Делфи игра крестики нолики

Автор работы: Пользователь скрыл имя, 26 Июня 2013 в 21:57, курсовая работа

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

В данной курсовой работе будет разрабатываться игровая программа «Крестики-нолики», которая и будет являться объектом исследования. Потребуется создать полноценную правильно-функционирующую программу и самостоятельно изучим некоторые процедуры и функции.
Delphi - это комбинация нескольких важнейших технологий:
- Высокопроизводительный компилятор в машинный код;
- Объектно-ориентированная модель компонент;

Содержание

Введение ……………………………………………………………………………5
1 Компоненты Delphi используемые в программе ………….……………………6
1.1 Компонент TMainMenu ……………………..……………………………….....6
1.2 Компонент TLabel …….……………………………………………….…….....9
1.3 Компонент TPanel ………………………..……………………………..……..10
1.4 Компонент TImage …………………………..……………………………….....11
1.5 Компонент TImageList …………………………………………………..…....12
1.6 Компонент TTimer ……………..…………………………………………...….13
2 Разработка программы ………………………………………………….……….14
2.1 Постановка задачи ………………………..…………………………………....14
2.2 Блок схема………………………………………………………………….......15
2.3 Алгоритм реализации игровой программы …………………..………….....16
3 Описание пользовательского интерфейса …..……………………….………..24
Заключение ………………………………………………………………….…..…25
Список используемой литературы ……………………………………….………26
Приложение А-Листинг программы……………………………………….27

Прикрепленные файлы: 1 файл

Kursovaya_igra.doc

— 1.15 Мб (Скачать документ)

 

 

 


 

 Между словами try и except помещаются защищаемые от ошибок операторы. Если при выполнении любого из этих операторов возникает исключительная ситуация, то управление передается операторам между словами except и end, образующим блок обработки исключительных ситуаций. При нормальном (безошибочном) выполнении программы блок except...end пропускается.

И так, дальнейшую разработку программы осуществляем в защищённом блоке.

Проверяем стиль панелей по горизонтали, вертикали и диагонали. Если хоть один ряд имеет не начальный стиль панелей, то сравниваем заголовки панелей данного ряда. Если после проверки выясняется, что заголовки данного ряда не равны – игра продолжается, а если же выясняется, что равны, то открываем модальное окно с поздравлением (Риссунке 6) и присваиваем «X» или «O» (в зависимости от того, каким символом заполнен данный ряд) в лейбл формы поздравления:

Form3.Label1.Caption:=Form1.Panel2.Caption;

Form3.ShowModal;

 

Рисунок 6 Модальное окно с поздравлением


 

После закрытия модального окна поздравления делаем очистку игрового поля с помощью ранее описанной процедуры clean.

Данная процедура проверки применяется ко всем восьми рядам  панелей, и только после этого  закрываем try.

В случае если все панели игрового поля заполнены, а победитель не определился, то выводим сообщение:“Ничья, попробуйте ещё раз”(Рисунок 7).

 

 

if (Panel2.BevelInner=bvLowered) and (Panel3.BevelInner=bvLowered) and (Panel4.BevelInner=bvLowered) and (Panel5.BevelInner=bvLowered) and (Panel6.BevelInner=bvLowered) and (Panel7.BevelInner=bvLowered) and (Panel8.BevelInner=bvLowered) and (Panel9.BevelInner=bvLowered) and (Panel10.BevelInner=bvLowered)

  then

   begin

    Form1.Timer1.Enabled:=False;

    ShowMessage ('Ничья, попробуйте ещё раз!');

    clean;

   end;

Рисунок 7 Сообщение в случае ничьи

 

 


 

Программирование кнопки “Новая игра” в меню программы делается в одну строку. Кнопка программируется в событии OnClick, просто указывается процедура очистки игрового поля – Clean:

procedure TForm1.NewMenuItemClick(Sender: TObject);

begin

clean;

end;

Программирование кнопки “Выход” в меню программы так же осуществляется очень просто. Кнопка программируется в событии OnClick и указывается процедура закрытия программы – Close:

 

procedure TForm1.N4Click(Sender: TObject);

begin

Close;

end;

Программирование кнопки “О программе” также производится в событии OnClick и открывается модальное окно “О программе” (Рисунок 8), в котором описаны краткие сведения о программе и её создателе:

procedure TForm1.AboutMenuItemClick(Sender: TObject);

begin

Form2.ShowModal;

end;


 

Рисунок 8 Модальное окно “О программе”

Казалось бы, на этом можно  закончить программирование модуля Unit1, но заметим ещё одну очень интересную проблему. Эта проблема заключается в кнопке “максимизации” (развернуть на весь экран) программы. В ходе работы сделали так, чтобы окно программы не могло “растягиваться”:

(Pb) property BorderStyle: bsToolWindow;

но этого мало, т.к. при нажатии на кнопку “максимизации” окно программы растягивается на весь экран (вид программы становится не очень красивым!). Просмотрев некоторую литературу по Delphi,нашли решение этой проблемы!:

 

procedure TForm1.FormCreate(Sender: TObject);

var

  l:DWORD;

begin

l:=GetWindowLong(Self.Handle,GWL_STYLE);

l:=l and not(WS_MAXIMIZEBOX);

 l:=SetWindowLong(Self.Handle,GWL_STYLE,l);

end;


Данная процедура блокирует  кнопку “максимизации”, т.е. происходит “затухание” кнопки и все попытки нажать на неё становятся бесполезными.

Модуль Unit2 предназначен для вывода окна, содержащего информацию о программе и об авторе (Рисунок 8). Данное окно (Form2) создаём следующим образом:

    1. Создаём новую форму  – Form2;
    2. Ставим компонент TImage и загружаем на форму рисунок (Рисунок 3);
    3. Создаём на рисунке четыре Лейбла и пишем в их заголовки нужный текст. Далее делаем фон Лейблов прозрачным:

(Pb) property Transparent: True;

Модуль Unit3 предназначен для вывода окна, содержащего поздравления для победившего игрока и символ, с который происходил игровой процесс (Рисунок 6). Программирование окна (Form3) осуществляется следующим образом:

    1. Создаём ещё одну новую форму – Form3;
    2. Также как и на Form2 ставим компонент TImage и загружаем на форму рисунок;
    3. Создаём на рисунке три Лейбла: в двух пишем текст поздравления, а в третьем будет показываться символ, которым играл победитель (процедура вывода символа описана выше). Устанавливаем прозрачность фона Лейблов:

(Pb) property Transparent: True;

 

 

 

 

 

 


 

    1. Описание пользовательского интерфейса
  1. Файл → Новая игра – начало новой игры. (Рисунок 9)
  1. Файл → Выход – выход из программы.(рисунок 9)

             Рисунок 9 Пользовательский интерфейс

  1. Справка → О программе – Вывод дополнительной информации о программе и о её создателе. (Рисунок 10)

           Рисунок 10 Пользовательский интерфейс


 

                                                  Заключение

В результате выполнения данной курсовой работы, была разработана игровая программа под названием “Крестики-нолики”. Было проведено исследование компонентов программной среды Borland Delphi 6.0, которые использовались при создании программы, использовалось множество процедур и функций. Была использована и изучена процедура блокировки кнопки “максимизации”.

При создании программы  использовались следующие компоненты: TMainMenu, TLabel, TPanel, TImage, TImageList, TTimer.

Также использовались и другие программы:

- Adobe Photoshop CS v8.0 – использовался для создания дополнительных надписей на картинке для формы “О программе”;

- Restorator 2005 v3.50 build 1442 – использовался для изменения иконки EXE файла игры;

- Microsoft Paint v5.1 – использовался для создания рисунков к данному курсовому проекту

Изначально задумывалось сделать данную программу с искусственным интеллектом, т.е. сделать возможной игру человека с компьютером, но не реализовав данный проект, т.к. компьютер ходил бы без какой либо логики, а разработка более серьёзного искусственного интеллекта слишком сложно.

 

 

 

 

 

 


 

 

Список используемой литературы

  1. Михаил Фленов «Библия Delphi»  БХВ-Петербург,  2004г. 880с.
  2. Программирование в Delphi 6 Архангельский, А.Я. 2003г.
  3. Основы программирования в Delphi 7 Культин, Никита 2003г.

4. Delphi 7 для профессионалов - М. Кэнту Санкт - Петербург, 2004г.

5. Delphi на примерах – Пестриков В.М. БХВ-Петербург, 2005г.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 


Приложение А

Листинг программы

unit Unit1;

 

interface

 

uses

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

  Dialogs, Menus, unit2, ExtCtrls, ComCtrls, unit3, StdCtrls, ImgList;

 

type

  TForm1 = class(TForm)

    MainMenu1: TMainMenu;

    FileMenuItem: TMenuItem;

    NewMenuItem: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    InformationMenuItem: TMenuItem;

    AboutMenuItem: TMenuItem;

    Panel1: TPanel;

    Panel2: TPanel;

    Panel3: TPanel;

    Panel4: TPanel;

    Panel5: TPanel;

    Panel6: TPanel;

    Panel7: TPanel;

    Panel8: TPanel;

    Panel9: TPanel;

    Panel10: TPanel;

    Timer1: TTimer;

    ImageList1: TImageList;

    procedure AboutMenuItemClick(Sender: TObject);

    procedure Panel2Click(Sender: TObject);

    procedure Panel5Click(Sender: TObject);

    procedure Panel8Click(Sender: TObject);

    procedure Panel3Click(Sender: TObject);

    procedure Panel6Click(Sender: TObject);

    procedure Panel9Click(Sender: TObject);

 

    procedure Panel4Click(Sender: TObject);

    procedure Panel7Click(Sender: TObject);

    procedure Panel10Click(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

    procedure NewMenuItemClick(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure N4Click(Sender: TObject);

 

private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

 

Implementation

 

{$R *.dfm}

 

procedure clean;                                      // Процедура общего сброса ("Новая  игра")

begin

Form1.Timer1.Enabled:=false;              // Для надежности выключаем таймер

Form1.Panel2.BevelInner:=bvNone;     // Меняем стиль панели на начальный

Form1.Panel2.Caption:='';                     // Убираем заголовок панели

 Form1.Panel3.BevelInner:=bvNone;

Form1.Panel3.Caption:='';

Form1.Panel4.BevelInner:=bvNone;

Form1.Panel4.Caption:='';

Form1.Panel5.BevelInner:=bvNone;

Form1.Panel5.Caption:='';

Form1.Panel6.BevelInner:=bvNone;

Form1.Panel6.Caption:='';

Form1.Panel7.BevelInner:=bvNone;

Form1.Panel7.Caption:='';

Form1.Panel8.BevelInner:=bvNone;

Form1.Panel8.Caption:='';

Form1.Panel9.BevelInner:=bvNone;

Form1.Panel9.Caption:='';

Form1.Panel10.BevelInner:=bvNone;

Form1.Panel10.Caption:='';

Form1.Tag:=0;

 


 

Form1.Timer1.Enabled:=true;               // Возобновляем работу таймера

end;

 

 

procedure TForm1.AboutMenuItemClick(Sender: TObject);

begin

 

 

Form2.ShowModal;                              // Вызываем окно "О программе"

end;

 

procedure TForm1.Panel2Click(Sender: TObject);

begin

if Panel2.Caption<>'' then exit;            // Проверка на заголовок панели (анти-мухлеж)

Panel2.BevelInner:=bvLowered;          // Присваиваем стиль при нажатии  на панель

 

if Form1.Tag=0

  then                                                      // Меняем tag формы (для чередования  X и O)

   begin

    Panel2.Caption:='X';                         // если таг=0 тогда вписываем X

    Form1.Tag:=1;

   end

  else

   begin

    Panel2.Caption:='O';                        // если таг=1 тогда вписываем O

    Form1.Tag:=0;

   end;

end;

procedure TForm1.Panel5Click(Sender: TObject);

begin

if Panel5.Caption<>'' then exit;

Panel5.BevelInner:=bvLowered;

if Form1.Tag=0

  then

   begin

    Panel5.Caption:='X';

    Form1.Tag:=1;

   end

  else

   begin

    Panel5.Caption:='O';


 

Form1.Tag:=0;

   end;

 

end;

 

procedure TForm1.Panel8Click(Sender: TObject);

begin

if Panel8.Caption<>'' then exit;

Panel8.BevelInner:=bvLowered;

if Form1.Tag=0

  then

   begin

    Panel8.Caption:='X';

    Form1.Tag:=1;

   end

  else

   begin

    Panel8.Caption:='O';

    Form1.Tag:=0;

   end;

end;


procedure TForm1.Panel3Click(Sender: TObject);

begin

if Panel3.Caption<>'' then exit;

Panel3.BevelInner:=bvLowered;

if form1.Tag=0

  then

   begin

    Panel3.Caption:='X';

    Form1.Tag:=1;

   end

  else

   begin

    Panel3.Caption:='O';

    Form1.Tag:=0;

   end;

end;

 

 

procedure TForm1.Panel6Click(Sender: TObject);

begin

if Panel6.Caption<>'' then exit;

 

 

Panel6.BevelInner:=bvLowered;

 

if form1.Tag=0

  then

 

   begin

 

    Panel6.Caption:='X';

    Form1.Tag:=1;

   end

  else

   begin

    Panel6.Caption:='O';

    Form1.Tag:=0;

   end;

end;

 

procedure TForm1.Panel9Click(Sender: TObject);

begin

if Panel9.Caption<>'' then exit;

Panel9.BevelInner:=bvLowered;

if form1.Tag=0

  then

   begin

    Panel9.Caption:='X';

    Form1.Tag:=1;

   End


else

   begin

    Panel9.Caption:='O';

    Form1.Tag:=0;

   end;

end;

 

procedure TForm1.Panel4Click(Sender: TObject);

begin

if Panel4.Caption<>'' then exit;

Panel4.BevelInner:=bvLowered;

if Form1.Tag=0

  then

   begin

    Panel4.Caption:='X';

    Form1.Tag:=1;

 

   End

 

  Else

Begin

 

 

    Panel4.Caption:='O';

    Form1.Tag:=0;

   end;

end;

 

procedure TForm1.Panel7Click(Sender: TObject);

begin

if Panel7.Caption<>'' then exit;

Panel7.BevelInner:=bvLowered;

if Form1.Tag=0

  then

   begin

    Panel7.Caption:='X';

    Form1.Tag:=1;

   end

  else

   begin

    Panel7.Caption:='O';

    Form1.Tag:=0;

   end;

end;

 

procedure TForm1.Panel10Click(Sender: TObject);

begin

if Panel10.Caption<>'' then exit;


Panel10.BevelInner:=bvLowered;

if Form1.Tag=0

  then

   begin

    Panel10.Caption:='X';

    Form1.Tag:=1;

   end

  else

   begin

    Panel10.Caption:='O';

    Form1.Tag:=0;

   end;

 

end;

 

procedure TForm1.Timer1Timer(Sender: TObject);    // Процедура проверки на выигрыш;

 

 

 

begin

try                                                                                 // защита от непредвиденных ошибок

  if (Panel2.BevelInner=bvLowered) and (Panel4.BevelInner=bvLowered) and (Panel3.BevelInner=bvLowered) then

                                                                            // Если панели нажаты, то проверяем заголовки

  if (Panel2.Caption=Panel3.Caption) and (Panel2.Caption=Panel4.Caption)

   then                                          

    begin

     Form3.Label1.Caption:=Form1.Panel2.Caption;   // Если выигрышная комбинация то присваиваем Х или О в Лейбл формы поздравления

     Form3.ShowModal;                                                // Открываем окно поздравления ":-)"

     clean;                                                                        // Очистка игрового поля                                                      

Информация о работе Делфи игра крестики нолики