Создание модели игры «Шашки» в среде программирования Delphi

Автор работы: Пользователь скрыл имя, 21 Января 2014 в 16:18, дипломная работа

Краткое описание

Цель дипломной работы: моделирование аналогов популярной игры шашки.
Одним из разделов компьютерного моделирования, являются компьютерные игры, зависящие от случайности и стратегических правил игры.
Актуальность темы на сегодняшний день: тема как никогда актуальна, за счет достаточно высокой конкуренции на рынке подобных приложений и программ. Многие подобные разработки, нацелены на игру «компьютер – человек», и искусственный интеллект в редких случаях, обыгрывает даже чемпионов.

Содержание

Введение…………………………………………………………………………..2Терминология…………………………………………………………………….4
Аналитический обзор
I. Шашки.
История шашечной игры……………………………………………………..8
Классификация……………………………………………………………....10
Варианты шашек……………………………………………………...…......10
Шашки как вид спорта....................................................................................15
II. Среда программирования Delphi.
2.1 Краткое определение Delphi…………………………………………...……16
2.2 Целевая платформа…………………………………………………………..16
2.3 История языка………………………………………………………………..16
2.4 Синтаксис языка……………………………………………………………..20
2.5 Объектно-ориентированные особенности языка…………………………..21
2.6 Примеры……………………………………………………………………..21
2.7 Расширения файлов………………………………………………………….23
Глава III Практическая часть.
Работа в среде Delphi, написание программы «Шашки»
3.1 Проект, его местоположение………………………………………………..24
3.2 Запуск программы с компакт диска………..……………………………….25
3.3 Исходный код программы…………………………………………………..27

Заключение…………………………………………………………………..….45
Список литературы………………………………………………………….…46

Вложенные файлы: 1 файл

Дипломная работа (общий файл) Станислав Левин.docx

— 1.14 Мб (Скачать файл)

Однако в ноябре того же года было принято решение отказаться от продажи IDE бизнеса. Тем не менее, разработкой IDE продуктов теперь будет заниматься новая компания — CodeGear, которая будет финансово полностью подконтрольна Borland.

В августе 2006 года Borland выпустил облегченную  версию RAD Studio под именем Turbo: Turbo Delphi (для Win32 и .NET), Turbo C#, Turbo C++.

В марте 2008 года было объявлено о  прекращении развития этой линейки  продуктов.

В марте 2007 года CodeGear порадовала пользователей  обновленной линейкой продуктов Delphi 2007 for Win32 и выходом совершенно нового продукта Delphi 2007 for PHP.

В июне 2007 года CodeGear представила свои планы на будущее, то есть опубликовала так называемый roadmap.

Embarcadero RAD Studio 2010.

 

25 августа 2008 года компания Embarcadero, новый хозяин CodeGear, опубликовала пресс-релиз на Delphi for Win32 2009. Версия привнесла множество нововведений в язык, как то:

  • По умолчанию полная поддержка Юникода во всех частях языка, VCL и RTL; замена обращений ко всем функциям Windows API на юникодные аналоги (то есть MessageBox вызывает MessageBoxW, а не MessageBoxA).
  • Обобщённые типы, они же generics.
  • Анонимные методы.
  • Новая директива компилятора $POINTERMATH [ON|OFF].
  • Функция Exit теперь может принимать параметры в соответствии с типом функции.

Вышедшая в 2011 году версия Delphi XE2 добавила компилятор Win64 и кросс-компиляцию для операционных систем фирмы Apple.

2.4 Синтаксис языка.

Операторы

Cписок операторов через пробел: := + — * / div mod not and or with xor shl shr ^ = <> >= <= < > @ in is as

Выражения

Выражения в Object Pascal (Delphi) бывают арифметическими, логическими и строковыми.

Основные логические выражения:

Логические выражения в основном употребляются в условных операторах. К логическим выражениям относятся  такие операции как:

  • not — «НЕ», отрицание логического выражения (NOT <логическое_выражение>)
  • and — «И», умножение (пересечение) логических выражений (<логическое_выражение1> AND <логическое_выражение2>)
  • or — «ИЛИ», объединение логических выражений (<логическое_выражение1> OR <логическое_выражение2>)
  • xor — «Исключающее ИЛИ», отрицание ИЛИ, все что не попадает под ИЛИ (<логическое_выражение1> XOR <логическое_выражение2>)

Типы данных

Обрабатываемые в программе  данные подразделяются на переменные, константы и литералы. Константы  представляют собой данные, значения которых установлены в разделе  объявления констант и не изменяются в процессе выполнения программы.

Классы

В языке Object Pascal классы — это специальные типы данных, используемые для описания объектов. Соответственно объект, имеющий тип какого-либо класса, является экземпляром (instance) этого класса или переменной этого типа.

Класс представляет собой особый тип, имеющий в своем составе такие  элементы (члены, member), как поля, свойства и методы. Поля класса аналогичны полям  записи и служат для хранения информации об объекте. Методами называются процедуры и функции, предназначенные как правило для обработки полей. Свойства занимают промежуточное положение между полями и методами.

2.5 Объектно-ориентированные особенности языка.

Инкапсуляция

Объединение и скрытие объектных  данных, а также обрабатывающих их методов внутри конкретного класса от пользователя называется инкапсуляцией.

Наследование

При создании новых объектов получить все свойства и методы от своих  предков называют наследованием. Такие  объекты наследуют после своего создания все поля, свойства, события, методы и прочее от своих предков. Наследование часто избавляет разработчиков  от рутинной работы и позволяет не мешкая приступить к разработке чего-то нового.

Полиморфизм

Это методы различных объектов, которые  могут иметь одинаковые имена, но по внутреннему содержимому отличаются друг от друга.

2.6 Примеры.

Структура программы

Каждая написанная программа на языке Delphi состоит из заголовка программы (program NewApplication;), поля используемых модулей Uses (к примеру, Uses Windows, Messages, SysUtils и т. д.), который может не входить в саму структуру, а также блоков описания и исполнения (начинаются составным оператором begin и заканчиваются end.).

 

 

 

 

program Project1;                     // Заголовок программы, с её именем «Project1»

 uses

  Forms,

  Unit1 in 'Unit1.pas' {Form1};       // модули, которые подключены к проекту и используются программой

 {$R *.res}

 begin

  Application.Initialize;                // Инициализация приложения

  Application.CreateForm(TForm1, Form1); // Создание формы/окна

  Application.Run;                       // Запуск и исполнение

end.

Пример № 1

Вывод сообщения «Hello, world!»  в консольном приложении Delphi

program Helloworld;          //название программы

{$APPTYPE CONSOLE}           //директива компилятору о создании консольного приложения

begin

  writeln('Hello, world!');    //вывод сообщения Hello, world!

end.                         //конец программы

Пример № 2

Вывод сообщения «Hello, world!»  в 32-разрядном GUI приложении Delphi

procedure TForm1.Button1Click(Sender: TObject); //Обработчик события OnClick, генерируемый автоматически

begin

  ShowMessage('Hello, world!');                  //вывод сообщения Hello, world!

end;                                           //конец процедуры

 

Пример  № 3

Динамическое создание списка строк и запись его в  файл

// Обработчик события,  происходящего при создании формы  MainForm

procedure TMainForm.FormCreate(Sender: TObject);

var

  // Объявление переменной типа TStrings (список строк).

  Strings: TStrings;

begin

  // Создание (выделение памяти и заполнение её начальными значениями) объекта типа TStringList.

  // TStringList - это потомок TStrings, реализующий его абстрактные методы с целью хранения строк в памяти.

  Strings := TStringList.Create;

  try

    // Добавление строки.

    Strings.Add('Добавляемая строка.');

    // Сохранение всех строк в файл.

    Strings.SaveToFile('C:\Strings.txt');

  finally

    // Освобождение памяти объекта и очистка ссылки на неё для предотвращения непреднамеренного обращения к не выделенной памяти.

    FreeAndNil(Strings);

  end;

end;

2.7 Расширения файлов.

  • .pas — исходный код модуля (pascal)
  • .dpr — исходный код проекта (pascal)
  • .dproj — исходный код проекта (xml)
  • .dproj.local — исходный код проекта (xml)
  • .dfm — исходный код формы
  • .dpk — скомпилированный пакет
  • .dcu — скомпилированный модуль
  • .exe — скомпилированное приложение
  • .res — ресурсы
  • .dsk — привязки к файлам
  • .identcache — кэшированные привязки к файлам

 

 

 

 

 

 

 

 

 

 

 

 

 

Глава III. Работа в среде Delphi, написание программы «Шашки»

1.1 Проект, его  местоположение.

Программа написана в среде  Delphi 7, и имеет достаточно простой интерфейс. Есть возможность записи имен игроков, таймер, и окно отображающее игрока, делающего ход в данный момент.

Программа, и весь теоретический материал, записаны на компакт диск.

Весь проект, хранится в папке «DCheckers».

 

На диске, весь проект находится  по следующему пути:

«Буква диска»:\Дипломная  работа\Шашки (программа)\DCheckers\

Полный перечень файлов, виден на следующем скриншоте.

 

На диске, все файлы  хранятся по следующему пути:

«Буква диска»:\Дипломная  работа\Шашки (программа)\DCheckers\_source_

1.2 Запуск программы  с компакт диска.

Запуск программы с  компакт диска, осуществляется путем  двойного щелчка мыши по файлу «DCheckers.exe».

Путь к файлу:

«Буква диска»:\Дипломная  работа\Шашки (программа)\DCheckers\ DCheckers.exe

Появится следующее  окно:

В файле «About.pas» находится краткая информация об авторе проекта.

Просмотреть её можно как нажатие на сам файл, находящимся по следующему пути:

«Буква диска»:\Дипломная работа\Шашки (программа)\DCheckers\ _source_ \About.Pas) так и нажатием на кнопку «Помощь», в запущенной программе.

После чего вы увидите  окно:

 

 

 

1.3 Исходный код программы.

{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O-,P+,Q+,R+,S-,T-,U-,V+,W-,X+,Y+,Z1}

{$MINSTACKSIZE $00004000}

{$MAXSTACKSIZE $00100000}

{$IMAGEBASE $00400000}

{$APPTYPE GUI}

unit Main;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, StdCtrls, Buttons, Menus,

  Draughts, VChessBoard;

type

  TfmCheckers = class(TForm)

    Timer1: TTimer;

    pnRight: TPanel;

    MainMenu1: TMainMenu;

    miFile: TMenuItem;

    miGame: TMenuItem;

    miHelp: TMenuItem;

    miAbout: TMenuItem;

    miExit: TMenuItem;

    miStartLocalGame: TMenuItem;

    pnChessBoard: TPanel;

    lbedBlackName: TLabeledEdit;

    lbedWhiteName: TLabeledEdit;

    Label1: TLabel;

    Label2: TLabel;

    stCurrentPlayer: TStaticText;

    Label3: TLabel;

    stTimer: TStaticText;

    miCancelGame: TMenuItem;

    procedure miExitClick(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure FormResize(Sender: TObject);

    procedure miStartLocalGameClick(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

    procedure miCancelGameClick(Sender: TObject);

    procedure miAboutClick(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

    vcbChess:TVisualChessBoard;

    PlayerSide, CurrentPlayer:Integer;

    IsDraughtChosen:Boolean;

    DraughtPosition:TCellPosition;

    StrikeMode:Boolean;

    PlayTime:Integer;

    StartTime:TDateTime;

    LocalGame:Boolean;

   

    procedure vcbChessMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

    procedure vcbChessMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

    procedure vcbChessMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

 

    Procedure TrySelectNewDraught(x, y:Integer);

    Procedure TryMakeStrike(x, y:Integer);

 

    Procedure SwitchCurrentPlayer;

    Function CheckForWin:Integer;

  end;

 

var

  fmCheckers: TfmCheckers;

 

implementation

 

uses About;

 

{$R *.dfm}

 

procedure TfmCheckers.miExitClick(Sender: TObject);

begin

  Close;

end;

 

procedure TfmCheckers.FormCreate(Sender: TObject);

begin

  vcbChess:=TVisualChessBoard.Create(pnChessBoard);

  vcbChess.Parent:=pnChessBoard;

 

  vcbChess.Left:=8;

  vcbChess.Top:=8;

  vcbChess.Width:=1200;

  vcbChess.Height:=1200;

 

  vcbChess.OnMouseMove:=vcbChessMouseMove;

  vcbChess.OnMouseDown:=vcbChessMouseDown;

  vcbChess.OnMouseUp:=vcbChessMouseUp;

 

  vcbChess.Refresh;

end;

 

procedure TfmCheckers.FormResize(Sender: TObject);

Var

  CellSize:Integer;

begin

  If pnChessBoard.Width<pnChessBoard.Height Then

    CellSize:=(pnChessBoard.Width-16) div 8

  Else

    CellSize:=(pnChessBoard.Height-16) div 8;

 

  vcbChess.Left:=8;

  vcbChess.Top:=8;

  vcbChess.Width:=CellSize*8;

  vcbChess.Height:=CellSize*8;

  vcbChess.Refresh;

  If IsDraughtChosen Then

    TrySelectNewDraught(DraughtPosition.X, DraughtPosition.Y);

end;

 

procedure TfmCheckers.vcbChessMouseMove(Sender: TObject; Shift: TShiftState;

  X, Y: Integer);

Var

  xP, yP:Integer;

begin

  vcbChess.Cursor:=crDefault;

 

  vcbChess.GetCellNumberByCoord(X, Y, xP, yP);

Информация о работе Создание модели игры «Шашки» в среде программирования Delphi