Создание простой игровой программы

Теперь вы можете создавать графические приложения практически любой сложности. Рассмотрим пример создания игры "Крестики-нолики" на поле 10x10 клеток. Мы не будем касаться вопросов создания искусственного интеллекта, предоставив это читателю. Рассмотрим лишь вопрос создания графической оболочки игры.

Итак, пусть программа работает в качестве игрового поля, на котором игроки смогут последовательно ставить крестики и нолики. Создадим форму-заготовку (рис. 13.10), на которую поместим две кнопки Button1 и Button2. Первая будет готовить игровое поле, а вторая позволит выйти из программы.

Теперь напишем код для этих двух кнопок. Ниже приведен полный код модуля unit1 с соответствующими пояснениями и комментариями (листинг 13.29). Думаем, что читатель во всем разберется без особых проблем.

13-13-1.jpg

Рис. 13.10. Форма-заготовка для игровой программы

Листинг 13.29.Листинг игровой программы "Крестики-нолики"

unit Unit1;

interface

uses
SysUtils, Types, Classes, Variants, QGraphics, QControlS, QForms, QDialogs,
QStdCtrls;

type
TForm1 = class (TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

private

{ Private declarations }

public

{ Public declarations }

end;

var
Form1: TForm1;
f:boolean; // Флаг, указывающий, что ставится: крестик

                  // или нолик
implementation {$R *.xfm}
procedure TForm1.Button1Click(Sender; TObject); var
i:integer; begin
// Рисуем прямоугольную область, закрашенную белым цветом Canvas.FillRect(rect(10,10,210,210)); i:=10; //Рисуем горизонтальные линии клеточек сетки 10x10 while i<=210 do begin
Canvas.MoveTo(10, i);
Canvas.LineTo(210,1);
i:=i+20; end; i:=10;
// Рисуем вертикальные линии клеточек сетки 10x10 while i<=210 do begin
Canvas.MoveTo(i,10); Canvas.LineTo(i, 210) ;
i :=i+20; end; end;
procedure TForm1.Button2Click{Sender: TObject); begin
Form1.Close; // Закрытие приложения end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
x1,y1:integer; begin
// Проверяем, в какой области формы щелкнул мышкой пользователь // Если в области сетки, то
if (х>10) and (x<210) and (у>10) and (y<210) then begin
// Вычисляем координаты левого верхнего угла клеточки, // внутри которой щелкнул пользователь x1:=trunc((х-10)/20)*20+10; y1:=trunc( (у-10) /20) *20+10; // Проверяем, что ставить: крестик или нолик f:=not(f); if f=true then begin // Если нолик, то
canvas.Pen.Color:=clRed; canvas.Pen.Width:=2; canvas.Ellipse(x1,y1,x1+20,y1+20); end else begin // Иначе - крестик
canvas.Pen.Color:=clBlue; canvas.Pen.Width:=2; canvas.MoveTo(x1,y1); canvas. LineTo (x1+20,y1+20); canvas.MoveTo(x1+20,y1); canvas.LineTo(x1, y1+20) ; end; end;
end; end.

Теперь запустим программу. Нажмите кнопку Начать игру, и программа нарисует белый прямоугольник и сетку 10x10 (рис. 13.11).

13-13-2.jpg

Рис. 13.11. Поле для игры

Теперь два игрока могут последовательно щелкать левой кнопкой мыши в области сетки, в результате чего будут по очереди появляться красные нолики и синие крестики (рис. 13.12).

13-13-3.jpg

Рис. 13.12. Программа в процессе работы

Итак, мы изучили основные графические возможности, которые предоставляет среда Kylix. Теперь вы можете создавать любые программы, использующие графику.

Hosted by uCoz