Автор работы: Пользователь скрыл имя, 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
Между словами try и except помещаются защищаемые от ошибок операторы. Если при выполнении любого из этих операторов возникает исключительная ситуация, то управление передается операторам между словами except и end, образующим блок обработки исключительных ситуаций. При нормальном (безошибочном) выполнении программы блок except...end пропускается.
И так, дальнейшую разработку программы осуществляем в защищённом блоке.
Проверяем стиль панелей по горизонтали, вертикали и диагонали. Если хоть один ряд имеет не начальный стиль панелей, то сравниваем заголовки панелей данного ряда. Если после проверки выясняется, что заголовки данного ряда не равны – игра продолжается, а если же выясняется, что равны, то открываем модальное окно с поздравлением (Риссунке 6) и присваиваем «X» или «O» (в зависимости от того, каким символом заполнен данный ряд) в лейбл формы поздравления:
Form3.Label1.Caption:=Form1.
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(
begin
clean;
end;
Программирование кнопки “Выход” в меню программы так же осуществляется очень просто. Кнопка программируется в событии OnClick и указывается процедура закрытия программы – Close:
procedure TForm1.N4Click(Sender: TObject);
begin
Close;
end;
Программирование кнопки “О программе” также производится в событии OnClick и открывается модальное окно “О программе” (Рисунок 8), в котором описаны краткие сведения о программе и её создателе:
procedure TForm1.AboutMenuItemClick(
begin
Form2.ShowModal;
end;
Рисунок 8 Модальное окно “О программе”
Казалось бы, на этом можно закончить программирование модуля Unit1, но заметим ещё одну очень интересную проблему. Эта проблема заключается в кнопке “максимизации” (развернуть на весь экран) программы. В ходе работы сделали так, чтобы окно программы не могло “растягиваться”:
(Pb) property BorderStyle: bsToolWindow;
но этого мало, т.к. при нажатии на кнопку “максимизации” окно программы растягивается на весь экран (вид программы становится не очень красивым!). Просмотрев некоторую литературу по Delphi,нашли решение этой проблемы!:
procedure TForm1.FormCreate(Sender: TObject);
var
l:DWORD;
begin
l:=GetWindowLong(Self.Handle,
l:=l and not(WS_MAXIMIZEBOX);
l:=SetWindowLong(Self.Handle,
end;
Данная процедура блокирует кнопку “максимизации”, т.е. происходит “затухание” кнопки и все попытки нажать на неё становятся бесполезными.
Модуль Unit2 предназначен для вывода окна, содержащего информацию о программе и об авторе (Рисунок 8). Данное окно (Form2) создаём следующим образом:
(Pb) property Transparent: True;
Модуль Unit3 предназначен для вывода окна, содержащего поздравления для победившего игрока и символ, с который происходил игровой процесс (Рисунок 6). Программирование окна (Form3) осуществляется следующим образом:
(Pb) property Transparent: True;
Рисунок 9 Пользовательский интерфейс
Рисунок 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 – использовался для создания рисунков к данному курсовому проекту
Изначально задумывалось сделать данную программу с искусственным интеллектом, т.е. сделать возможной игру человека с компьютером, но не реализовав данный проект, т.к. компьютер ходил бы без какой либо логики, а разработка более серьёзного искусственного интеллекта слишком сложно.
Список используемой литературы
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:=
Form1.Panel2.Caption:='';
Form1.Panel3.BevelInner:=
Form1.Panel3.Caption:='';
Form1.Panel4.BevelInner:=
Form1.Panel4.Caption:='';
Form1.Panel5.BevelInner:=
Form1.Panel5.Caption:='';
Form1.Panel6.BevelInner:=
Form1.Panel6.Caption:='';
Form1.Panel7.BevelInner:=
Form1.Panel7.Caption:='';
Form1.Panel8.BevelInner:=
Form1.Panel8.Caption:='';
Form1.Panel9.BevelInner:=
Form1.Panel9.Caption:='';
Form1.Panel10.BevelInner:=
Form1.Panel10.Caption:='';
Form1.Tag:=0;
Form1.Timer1.Enabled:=true;
end;
procedure TForm1.AboutMenuItemClick(
begin
Form2.ShowModal;
end;
procedure TForm1.Panel2Click(Sender: TObject);
begin
if Panel2.Caption<>'' then exit; // Проверка на заголовок панели (анти-мухлеж)
Panel2.BevelInner:=bvLowered;
if Form1.Tag=0
then
begin
Panel2.Caption:='X';
Form1.Tag:=1;
end
else
begin
Panel2.Caption:='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.
then
begin
Form3.Label1.Caption:=Form1.
Form3.ShowModal; // Открываем окно поздравления ":-)"
clean;