// нажатие кнопки мыши на игровом поле
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;