Введение основная часть



Скачать 496.51 Kb.
страница10/14
Дата09.01.2018
Размер496.51 Kb.
Название файлаДокумент Microsoft Office Word.docx
ТипРеферат
1   ...   6   7   8   9   10   11   12   13   14
2. Специальная часть

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

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



2.2. Алгоритм реализации игровой части

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

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

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

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

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



В первую очередь пишем процедуру очистки игрового поля – clean. Сначала для надёжности выключаем таймер, меняем стиль панели на начальный (Form1.Panel2.BevelInner:=bvNone) и очищаем заголовок (Form1.Panel2.Caption:=' '). Данную операцию расписываем на все девять панелей игрового поля. В конце возобновляем работу таймера.

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

Далее выполняем проверку на “мухлёж”, т.е. проверяем заголовок каждой панели игрового поля. Если заголовок панели пуст, то на данную панель разрешено нажимать, если же ему присвоено какое-либо значение («X» либо «O»), то при нажатии на данную панель ничего не будет происходить:

if Panel2.Caption' ' then exit;



При нажатии на панель, для большей красоты, меняем её стиль (Panel2.BevelInner:=bvLowered). Передо мной встал вопрос: как сделать чередование «X» и «O»?! Всё просто, чередование делаем с помощью условного оператора If. Если Tag равен нулю, то в заголовок данной панели записываем символ «X» и присваиваем в Tag единицу, в противном случае в заголовок записываем символ «O» и присваиваем в Tag ноль. Пример нажатой панели изображён на рисунке 5.

if Form1.Tag=0

then


begin

Panel.Caption:='X';

Form1.Tag:=1;

end


else

begin


Panel.Caption:='O';

Form1.Tag:=0;

end;

Рис. 5 Вид нажатой панели в программе


Таким же образом описываем каждую панель игрового поля.

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

Когда подпрограмма сталкивается с невозможностью выполнения последующих действий, она создает объект с описанием ошибки и прерывает нормальный ход своей работы с помощью оператора Raise. Данный оператор создает объект класса EOutOfMemory (класс ошибок исчерпания памяти) и прерывает нормальное выполнение программы. Вызывающие подпрограммы могут эту ситуацию перехватить и обработать. Для этого в них организуется так называемый защищенный блок:

try


// Защищаемые от ошибок операторы

except


// Операторы обработки исключительной ситуации

end;


Между словами 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   ...   6   7   8   9   10   11   12   13   14


База данных защищена авторским правом ©coolnew.ru 2019
обратиться к администрации

    Главная страница
Контрольная работа
Курсовая работа
Теоретические основы
Лабораторная работа
Методические указания
Общая характеристика
Рабочая программа
Теоретические аспекты
Пояснительная записка
Практическая работа
Дипломная работа
Методические рекомендации
Федеральное государственное
История развития
Общие сведения
Учебное пособие
Основная часть
государственное бюджетное
Направление подготовки
Теоретическая часть
Физическая культура
Самостоятельная работа
История возникновения
Методическая разработка
Краткая характеристика
Практическое задание
квалификационная работа
Выпускная квалификационная
Гражданское право
Название дисциплины
бюджетное учреждение
государственное образовательное
образовательное бюджетное
Российская академия
Общие положения
теоретические основы
прохождении учебной
история возникновения
образовательная организация
Общая часть
Понятие сущность
Уголовное право
Современное состояние
Правовое регулирование
Финансовое право
Фамилия студента
Техническое задание
Методическое пособие
Финансовое планирование
Теория государства
Российская федерация