Під час гри програма сприймає натискання кнопок миші і, відповідно до правил гри, відкриває клітини або ставить в клітини прапорці.
Основну роботу виконує процедура обробки події 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] & lt; 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;