Во время игры программа воспринимает нажатия кнопок мыши и, в соответствии с правилами игры, открывает клетки или ставит в клетки флажки.
Основную работу выполняет процедура обработки события 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;
Последние комментарии
5 дней 8 часов назад
1 неделя 1 день назад
2 недели 3 дня назад
4 недели 1 день назад
5 недель 3 дня назад
7 недель 4 дня назад
10 недель 2 дня назад
10 недель 6 дней назад
11 недель 2 дня назад
12 недель 33 минуты назад