Создание игры "крестики-нолики"

 
 
 
 
 
 
 
 
 
 
 

     Курсовая  работа 
 

     По дисциплине: Технология программирования 

     На тему: «Создание игры “Крестики-нолики”» 
 
 
 
 
 
 
 

 

      Содержание

 

                Введение

 

В данной курсовой работе речь пойдет о создании несложной игровой программы

 «Крестики-нолики»,  которая и будет являться объектом исследования. Потребуется создать полноценную правильно-функционирующую программу и самостоятельно изучить некоторые процедуры и функции. 

Delphi - это  комбинация нескольких важнейших  технологий:

-Высокопроизводительный  компилятор в машинный код

-Объектно-ориентированная  модель компонент 

-Визуальное (а, следовательно, и скоростное) построение приложений из программных  прототипов 

-Масштабируемые  средства для построения баз  данных 

Основной  упор этой модели в Delphi делается на максимальном реиспользовании кода. Это позволяет разработчикам строить приложения весьма быстро из заранее подготовленных объектов, а также дает им возможность создавать свои собственные объекты для среды Delphi. Никаких ограничений по типам объектов, которые могут создавать разработчики, не существует. Действительно, все в Delphi написано на нем же, поэтому разработчики имеют доступ к тем же объектам и инструментам, которые использовались для создания среды разработки. В результате нет никакой разницы между объектами, поставляемыми Borland или третьими фирмами, и объектами, которые вы можете создать.

В стандартную  поставку Delphi входят основные объекты, которые образуют удачно подобранную иерархию из 270 базовых классов.

Целью моей курсовой работы является программирование с помощью Delphi 7.

 

              ИСТОРИЯ ЯЗЫКА DELPHI 

Delphi — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal — динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией — данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.

Также отличительным свойством Object Pascal от С++ является то, что объекты по умолчанию располагаются в динамической памяти. Однако можно переопределить виртуальные методы NewInstance и FreeInstance класса TObject. Таким образом, абсолютно любой класс может осуществить «желание» «где хочу — там и буду лежать». Соответственно организуется и «многокучность».

Object Pascal (Delphi) являются результатом функционального расширения Turbo Pascal

Delphi оказал огромное влияние на создание концепции языка C# для платформы .NET. Многие его элементы и концептуальные решения вошли в состав С#. Одной из причин называют переход Андерса Хейлсберга, одного из ведущих разработчиков Дельфи, из компании Borland Ltd. в Microsoft Corp.

Версия 1 была предназначена для разработки под 16-разрядную платформу Win16;

Версии  со второй компилируют программы  под 32-разрядную платформу Win32;

Вместе  с 6-й версией Delphi вышла совместимая с ним по языку и библиотекам среда Kylix, предназначенная для компиляции программ под операционную систему GNU/Linux;

Версия 8 способна генерировать байт-код исключительно для платформы .NET. Это первая среда, ориентированная на разработку мультиязычных приложений (лишь для платформы .NET);

Последующие версии (обозначаемые годами выхода, а  не порядковыми номерами, как это было ранее) могут создавать как приложения Win32, так и байт-код для платформы .NET.

Delphi for .NET — среда разработки Delphi, а также язык Delphi (Object Pascal), ориентированные на разработку приложений для .NET.

Первая  версия полноценной среды разработки Delphi для .NET — Delphi 8. Она позволяла писать приложения только для .NET.

В настоящее  время, в Delphi 2006, можно писать приложения для .NET, используя стандартную библиотеку классов .NET, VCL для .NET. Среда также позволяет создавать .NET-приложения на C# и Win32-приложения на C++. Delphi 2006 содержит функции для написания обычных приложений с использованием библиотек VCL и CLX.

Delphi 2006 поддерживает технологию MDA с помощью ECO (Enterprise Core Objects) версии 3.0.

В марте 2006 года компания Borland приняла решение о прекращении дальнейшего совершенствования интегрированных сред разработки JBuilder, Delphi и C++ Builder по причине убыточности этого направления. Планировалась продажа IDE-сектора компании. Группа сторонников свободного программного обеспечения организовала сбор средств для покупки у Borland прав на среду разработки и компилятор.

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

      

     Компоненты  Delphi используемые в программе

     Компонент TLabel

      TLabel служит для отображения текста на экране. Можно изменить шрифт и цвет метки, если дважды щелкнуть на свойство Font в Инспекторе Объектов. Видно, что это легко сделать и во время выполнения программы, написав всего одну строчку кода.

     Этот  компонент доступен из модуля STDCTRLS, и находится на странице Палитры компонентов Standard.

     Компонент представляет собой статический текст. С помощью этого компонента на рабочей поверхности формы можно отобразить информацию, сделать пояснения и показать названия других компонентов. Но он имеет и другую важную функцию — если в составе текста TLabel есть символы-акселераторы, информация об их нажатии может передаваться от TLabel другому элементу управления.

     Свойства  компонента приведены в табл.1:

 

Таблица 1

     Свойства  компонента TLabel

     Свойство      Описание
     (Pb) property Caption: TCaption; TCaption = string[255];      Содержит  строку с выводимым текстом.
     (Pb) property Alignment: TAlignment;      Устанавливает правило выравнивания текста — по правому, левому краю или по центру клиентской области.
     (Pb) property AutoSize: Boolean;      В случае True происходит автоматическое приведение размеров компонента к размерам текста и высоте шрифта.
     (Pb) property FocusControl: TWinControl;      Определяет  оконный компонент, которому посылаются сообщения о вводе акселератора.
     (Pb) property Transparent: Boolean;      Прозрачность  фона компонента. Если свойство установлено в True, то при перерисовке элемента управления не происходит закрашивание клиентской области. В противном случае — происходит закрашивание кистью bsSolid и цветом Color.
     (Pb) property WordWrap: Boolean;      Определяет  возможность разрыва слов в случае, если длина выводимого текста превышает ширину компонента.

     Компонент TPanel

      TPanel - управляющий, похожий на TGroupBox, используется в декоративных целях. Чтобы использовать TPanel, просто поместите его на форму и затем положите другие компоненты на него. Теперь при перемещении TPanel будут передвигаться и эти компоненты. TPanel используется также для создания панели инструментов и окна статуса.

     Этот  компонент доступен из модуля EXTCTRLS, и находится на странице Палитры компонентов Standard.

     Этот  компонент — является несущей  конструкцией для размещения других элементов управления. В отличие от простой рамки (TBevel) панель сама является оконным элементом управления и родителем для всех размещенных на ней компонентов. Часто ее используют для создания панелей инструментов, строк состояния и т. п.

     За  внешнее оформление панели отвечают свойства:

     (Pb) property Bevel Inner: TPanelBevel;

     (Рb) property BevelOuter: TPanelBevel;

     TPanelBevel = (bvNone, bvLowered, bvRaised) ;

     (Pb) property BevelWidth: TBevelWidth;

     TBevelWidth = 1..Maxint;

     (Pb) property BorderWidth: TBorderWidth;

     TBorderWidth = 0..Maxint ;

     На  границах панели размещаются две  специальные окаймляющие рамки (bevels): Bevellnner и BevelOuter. При помощи комбинации белого и серого цветов они имитируют трехмерность — приподнятость (bvRaised) или утоп-ленность (bvLowered). Обе рамки имеют ширину BevelWidth. Наружная — BevelOuter — расположена прямо по периметру панели, вторая — Bevellnner — внутри на расстоянии BorderWidth от нее. Обе могут быть невидимыми (bvNone), приподнятыми или утопленными.

     Комбинируя  сочетания bvLowered/bvRaised, можно создать вокруг панели "ров" или "вал".

     Иллюзию трехмерности может подчеркнуть  также стиль обрамления компонента:

     (Pb) property BorderStyle: TBorderStyle;

     TBorderStyle = bsNone .. bsSingle;

     Значение  bsSingle означает, что панель будет окаймлена черной линией единичной толщины (по периметру, снаружи от обеих рамок).

     Выравнивание  текста заголовка панели определяется при помощи свойства:

     (Pb) property Alignment: TAlignment;

     Компонент TButton

        TButton - позволяет выполнить какие-либо действия при нажатии кнопки во время выполнения программы. В Delphi все делается очень просто. Поместив TButton на форму, Вы по двойному щелчку можете создать заготовку обработчика события нажатия кнопки. 

Основные cвойства

       Name - название компонента;

Caption - текст,  отображаемый на кнопке;

Left - позиция  по горизонтали;

Width - ширина  кнопки в пикселях;

Height - высота  кнопки в пикселях;

Cursor - курсор, который будет отображаться при  наведении на кнопку;

Hint - текст  подсказки, которая появится при  наведении и задерживании указателя  мыщи над кнопкой;

ShowHint - будет ли отображаться подсказка. True - будет отображаться, False - не будет;

TabStop - Определяет  возможность доступа пользователя  к кнопке с помощью клавиши Tab. 

В надписях кнопок (свойство Caption) можно предусматривать  использование клавиш ускоренного доступа, выделяя для этого один из символов надписи - ставя перед ним символ амперсанта "&". Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа.

Основное  событие кнопки - OnClick, возникающее  при щелчке на ней. В обработчике  этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке.

Свойство Cancel, если его установить в true, определяет, что нажатие пользователем клавиши Esc будет эквивалентно нажатию на данную кнопку. Это свойство целесообразно задавать равным true для кнопок Отменить в различных диалоговых окнах, чтобы можно было выйти из диалога, нажав на эту кнопку или нажав клавишу Esc.

Свойство Default, если его установить в true, определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе.

Вкладка Events: 

onClick - код  который будет выполняться при нажатии кнопки (обратите внимание что нажать кнопку можно не только мышкой, но и клавишей Enter);

onMouseDown - код который выполнится при  нажатии любой кнопки мыши  на кнопке, причем не нужно  кнопку отпускать;

onMouseUp - код который выполнится при отпускании любой кнопки мыши;

onMouseMove - код который выполнится при  вождении мышкой по кнопке. 
2. РАЗРАБОТКА ПРОГРАММЫ

     2.1 Постановка задачи

     Разработать игровую программу «Крестики-нолики», которая включает в себя игровую панель, состоящую из девяти клеток (панелей), образующих собой один большой квадрат. Игровая программа рассчитана на одного игрока против компьютера. Игрок ходит первым и играет символом «X», компьютер – «O». Выигрывает тот, кто первым заполнит ряд панелей своим символом: любой из трёх рядов по горизонтали или вертикали, либо любой ряд по диагонали.

     Алгоритм  реализации работы

     Алгоритм  реализации игровой  программы

     Запуск  программы осуществляется следующим  образом: необходимо открыть папку, содержащую данную игру, и найти исполняемый файл krestiki-noliki.exe. На этом файле следует выполнить двойной щелчок левой клавишей манипулятора мышь.

     Проект  программы состоит из файла проекта, содержащего необходимые конструкции для исполнения, и модуля Unit1.

     Модуль  Unit1 является основным модулем проекта, содержащим все необходимые для работы программы процедуры.

     После запуска программы на экран выводится  основная форма Form1 (XO) (рис.2), на которой расположено игровое поле.  

     

     Рис.2 – Вид программы после запуска  

      Игра, т.е. работа программы, начинается сразу же после запуска, ход сначала предоставляется человеку, с символа «X».

  

После этого автоматически идёт ход  компьютера, с символа «O» (рис.3)

 

 

 

Рис3. Поочередные  ходы

  

Таким образом, игроки по очереди ставят на свободные клетки поля 3х3 знаки (человек всегда крестики, компьютер всегда нолики). Первый, выстроивший в ряд 3 своих фигур по вертикали, горизонтали или диагонали, выигрывает. Если в этой ситуации никто не выстраивает в ряд 3 своих фигур, то объявляется ничья. 
 

       
 

 Рис. 4 Ничья в игре

   

 

Рис.5  Победа человека

 

При победе компьютера или человека, счёт игры меняется.

  

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Рис.6  Победа компьютера 
 
 
 
 
 
 

 

  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ЗАКЛЮЧЕНИЕ

 

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

В результате исследования были выявлены следующие  недостатки полученного программного продукта:

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

-Работоспособность приложения только в среде Windows;

Однако, помимо недостатков, есть и достоинства  у этого программного продукта:

-Программный продукт малотребователен к системным ресурсам компьютера.  

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

 

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

 

  1. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. –М.:Нолидж, 1997. -616с.
  2. Фаронов В.В. Delphi 4. Учебный курс. –М.: Нолидж, 1999. -447с. 
  3. Михаил Фленов «Библия Delphi» - М.:БХВ-Петербург,  2004г. 880с. 
  4. Михаил Голованов, Евгений Веселов «Создание компонентов в среде Delphi», - М.:БХВ-Петербург, 2004г.,  545с.
  5. Иван Хладни «Внутренний мир Borland Delphi 2007», -М.: Вильямс, 2007г. 892с.

 

      Приложение 1

     unit Unit1;

     interface

     uses

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

       StdCtrls, ExtCtrls;

     type

       TForm1 = class(TForm)

         Panel1: TPanel;

         Panel2: TPanel;

         Panel3: TPanel;

         Panel4: TPanel;

         Panel5: TPanel;

         Panel6: TPanel;

         Panel7: TPanel;

         Panel8: TPanel;

         Panel9: TPanel;

         Button1: TButton;

         Button2: TButton;

         Button3: TButton;

         Label1: TLabel;

         Label2: TLabel;

         procedure Button2Click(Sender: TObject);

         procedure Panel1Click(Sender: TObject);

         procedure Panel2Click(Sender: TObject);

         procedure Panel3Click(Sender: TObject);

         procedure Panel4Click(Sender: TObject);

         procedure Panel5Click(Sender: TObject);

         procedure Panel6Click(Sender: TObject);

         procedure Panel7Click(Sender: TObject);

         procedure Panel8Click(Sender: TObject);

         procedure Panel9Click(Sender: TObject);

         procedure Button1Click(Sender: TObject);

         procedure Button3Click(Sender: TObject);

         procedure FormCreate(Sender: TObject);

       private

         { Private declarations }

       public

         { Public declarations }

       end; 

     var i,a,c,b:integer;

       Form1: TForm1; 

     implementation 

     {$R *.DFM} 

     procedure TForm1.Button2Click(Sender: TObject);

     begin

     Close;

     end; 

     procedure TForm1.Panel1Click(Sender: TObject);

     begin

     if panel1.Caption='' then begin

     panel1.Caption:='X';

     button1.Click;

     i:=0;

     end;

     end; 

     procedure TForm1.Panel2Click(Sender: TObject);

     begin

     if panel2.Caption='' then begin

     panel2.Caption:='X';

     button1.Click;

     i:=0;

     end;

     end; 

     procedure TForm1.Panel3Click(Sender: TObject);

     begin

     if panel3.Caption='' then begin

     panel3.Caption:='X';

     button1.Click;

     i:=0;

     end;

     end; 

     procedure TForm1.Panel4Click(Sender: TObject);

     begin

     if panel4.Caption='' then begin

     panel4.Caption:='X';

     button1.Click;

     i:=0;

     end;

     end; 

     procedure TForm1.Panel5Click(Sender: TObject);

     begin

     if panel5.Caption='' then begin

     panel5.Caption:='X';

     button1.Click;

     i:=0;

     end;

     end; 

     procedure TForm1.Panel6Click(Sender: TObject);

     begin

     if panel6.Caption='' then begin

     panel6.Caption:='X';

     button1.Click;

     i:=0;

     end;

     end; 

     procedure TForm1.Panel7Click(Sender: TObject);

     begin

     if panel7.Caption='' then begin

     panel7.Caption:='X';

     button1.Click;

     i:=0;

     end;

     end; 

     procedure TForm1.Panel8Click(Sender: TObject);

     begin

     if panel8.Caption='' then begin

     panel8.Caption:='X';

     button1.Click;

     i:=0;

     end;

     end; 

     procedure TForm1.Panel9Click(Sender: TObject);

     begin

     if panel9.Caption='' then begin

     panel9.Caption:='X';

     button1.Click;

     i:=0;

     end;

     end; 

     procedure TForm1.Button1Click(Sender: TObject);

     begin

     if i=0 then

     repeat

     ///////////////////////////////////Блок определения выигрыша

     if panel1.Caption='X' then

     if panel2.Caption='X' then

     if panel3.Caption='X' then begin

     showmessage('Win');

     b:=b+1;

     button3.Click;

     I:=1;

     end;

     if panel4.Caption='X' then

     if panel5.Caption='X' then

     if panel6.Caption='X' then begin

     showmessage('Win');

     b:=b+1;

     button3.Click;

     I:=1;

     end;

     if panel7.Caption='X' then

     if panel8.Caption='X' then

     if panel9.Caption='X' then begin

     showmessage('Win');

     b:=b+1;

     button3.Click;

     I:=1;

     end;

     if panel1.Caption='X' then

     if panel5.Caption='X' then

     if panel9.Caption='X' then begin

     showmessage('Win');

     b:=b+1;

     button3.Click;

     I:=1;

     end;

     if panel3.Caption='X' then

     if panel5.Caption='X' then

     if panel7.Caption='X' then begin

     showmessage('Win');

     b:=b+1;

     button3.Click;

     I:=1;

     end;

     if panel1.Caption='X' then

     if panel4.Caption='X' then

     if panel7.Caption='X' then begin

     showmessage('Win');

     b:=b+1;

     button3.Click;

     I:=1;

     end;

     if panel2.Caption='X' then

     if panel5.Caption='X' then

     if panel8.Caption='X' then begin

     showmessage('Win');

     b:=b+1;

     button3.Click;