Создание игры "крестики-нолики"
Курсовая
работа
По
дисциплине: Технология программирования
На
тему: «Создание игры “Крестики-нолики”»
Содержание
Введение
В данной курсовой работе речь пойдет о создании несложной игровой программы
«Крестики-нолики», которая и будет являться объектом исследования. Потребуется создать полноценную правильно-функционирующую программу и самостоятельно изучить некоторые процедуры и функции.
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 -
будет ли отображаться
TabStop - Определяет
возможность доступа
В надписях кнопок (свойство Caption) можно предусматривать использование клавиш ускоренного доступа, выделяя для этого один из символов надписи - ставя перед ним символ амперсанта "&". Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа.
Основное событие кнопки - OnClick, возникающее при щелчке на ней. В обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке.
Свойство
Cancel, если его установить в true, определяет,
что нажатие пользователем
Свойство
Default, если его установить в true, определяет,
что нажатие пользователем
Вкладка
Events:
onClick - код который будет выполняться при нажатии кнопки (обратите внимание что нажать кнопку можно не только мышкой, но и клавишей Enter);
onMouseDown - код который выполнится при нажатии любой кнопки мыши на кнопке, причем не нужно кнопку отпускать;
onMouseUp - код который выполнится при отпускании любой кнопки мыши;
onMouseMove
- код который выполнится при
вождении мышкой по кнопке.
2. РАЗРАБОТКА ПРОГРАММЫ
2.1 Постановка задачи
Разработать
игровую программу «Крестики-
Алгоритм реализации работы
Алгоритм реализации игровой программы
Запуск программы осуществляется следующим образом: необходимо открыть папку, содержащую данную игру, и найти исполняемый файл krestiki-noliki.exe. На этом файле следует выполнить двойной щелчок левой клавишей манипулятора мышь.
Проект
программы состоит из файла проекта,
содержащего необходимые
Модуль Unit1 является основным модулем проекта, содержащим все необходимые для работы программы процедуры.
После
запуска программы на экран выводится
основная форма Form1 (XO) (рис.2), на которой
расположено игровое поле.
Рис.2
– Вид программы после запуска
Игра, т.е. работа программы, начинается сразу же после запуска, ход сначала предоставляется человеку, с символа «X».
После этого автоматически идёт ход компьютера, с символа «O» (рис.3)
Рис3. Поочередные ходы
Таким
образом, игроки по очереди ставят на свободные
клетки поля 3х3 знаки (человек всегда крестики,
компьютер всегда нолики). Первый, выстроивший
в ряд 3 своих фигур по вертикали, горизонтали
или диагонали, выигрывает. Если в этой
ситуации никто не выстраивает в ряд 3
своих фигур, то объявляется ничья.
Рис. 4 Ничья в игре
Рис.5 Победа человека
При победе компьютера или человека, счёт игры меняется.
Рис.6
Победа компьютера
ЗАКЛЮЧЕНИЕ
В результате
выполнения данной курсовой работы мной
была разработана игровая программа под
названием “Крестики-нолики”. Было проведено
исследование компонентов программной
среды Borland Delphi 7.0, которые использовались
при создании программы, использовалось
множество процедур и функций.
В результате исследования были выявлены следующие недостатки полученного программного продукта:
-Низкий исскуственный интеллект, т.е. ход компьютера осуществляется случайным образом, что делает маловероятным победу компьютера;
-Работоспособность приложения только в среде Windows;
Однако, помимо недостатков, есть и достоинства у этого программного продукта:
-Программный
продукт малотребователен к системным
ресурсам компьютера.
В результате учета всех сделанных выше замечаний возможно улучшение созданного программного продукта, на которое потребуется минимум изменений исходного кода программы.
Список использованной литературы
- Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. –М.:Нолидж, 1997. -616с.
- Фаронов В.В. Delphi 4. Учебный курс. –М.: Нолидж, 1999. -447с.
- Михаил Фленов «Библия Delphi» - М.:БХВ-Петербург, 2004г. 880с.
- Михаил Голованов, Евгений Веселов «Создание компонентов в среде Delphi», - М.:БХВ-Петербург, 2004г., 545с.
- Иван Хладни «Внутренний мир 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;