Иллюстрированный самоучитель по 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;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.