Programming: Delphi
Иллюстрированный самоучитель по Delphi 7 для начинающих
Игра
Во время игры программа
воспринимает нажатия кнопок мыши и, в соответствии с правилами игры, открывает
клетки или ставит в клетки флажки.
Основную работу выполняет
процедура обработки события onMouseDown (ее текст приведен в листинге 15.6).
Сначала процедура преобразует координаты точки, в которой игрок нажал кнопку
мыши, в координаты клетки игрового поля. Затем делает необходимые изменения
в массиве Pole и, если нажата правая кнопка, рисует в клетке флажок. Если нажата
левая кнопка в клетке, в которой нет мины, то эта клетка открывается, на экран
выводится ее содержимое. Если нажата левая кнопка в клетке, в которой есть мина,
то вызывается процедура showPole, которая показывает все мины, в том числе и
те, которые игрок не успел найти.
Листинг 15.6.
Обработка события OnMouseDown на поверхности игрового поля
//
нажатие кнопки мыши на игровом поле
procedure
TForm1.Form1MouseDown(Sender: TObject;
Button:
TMouseButton;
Shift:
TShiftState; X, Y: Integer);
var
row,
col : integer;
begin
if
status = 2 // игра завершена
then
exit;
if
status = 0 then // первый щелчок
status
:= 1;
//
преобразуем координаты мыши в индексы
//
клетки поля
row
:= Trunc(y/H) + 1;
col
:= Trunc(x/W) + 1;
if
Button = mbLeft then
begin
if
Pole[row,col] = 9 then
begin
// открыта клетка, в которой есть мина
Pole[row,col]
:= Pole[row,col] + 100;
status
:= 2; // игра закончена
ShowPole(Form1.Canvas,
status);
end
else
if
Pole[row,col] < 9 then
Open(row,col);
end
else
if
Button = mbRight then
if
Pole[row,col] > 200 then begin
//
уберем флаг и закроем клетку
nFlag
:= nFlag — 1;
Pole[row,col]
:= Pole[row,col]-200;
//
уберем флаг
x
:= (col-D* W + 1; у := (row-1)* H + 1;
Canvas.Brush.Color
:= clLtGray;
Canvas.Rectangle(x-1,y-1,x+W,y+H);
end
else
begin
// поставить в клетку флаг
nFlag
:= nFlag + 1; if Pole[row,col] = 9
then
nMin := nMin + 1;
Pole[row,col]:=Pole[row,col]+200;
//
поставили флаг
if
(nMin = NM) and (nFlag = NM) then begin
status
:= 2;
//
игра закончена
ShowPole(Form1.Canvas,
status);
end
else
Kletka(Form1.Canvas, row, col, status);
end;
end;
Назад | Оглавление | Вперёд
При перепечатке любого материала
с сайта, видимая ссылка на источник www.warayg.narod.ru
и все имена, ссылки авторов обязательны.
© 2005
|