Игра
Во время игры программа воспринимает нажатия кнопок мыши и, в соответствии с правилами игры, открывает клетки или ставит в клетки флажки.
Основную работу выполняет функция обработки события OnMouseDown (ее текст приведен в листинге 10.6). Функция получает координаты точки формы, в которой игрок щелкнул кнопкой мыши, а также информацию о том, какая кнопка была нажата.
Сначала функция преобразует координаты точки, в которой игрок нажал кнопку мыши, в координаты клетки игрового поля. Затем она вносит необходимые изменения в массив Pole и, если нажата правая кнопка, вызывает функцию Flag, которая рисует в клетке флажок. Если нажата левая кнопка в клетке, в которой нет мины, то эта клетка открывается, и на экране появляется ее содержимое. Если нажата левая кнопка в клетке, в которой есть мина, то вызывается функция showPole, которая показывает все мины, в том числе и те, которые игрок не успел найти.
Листинг 10.6. Обработка события OnMouseDown на поверхности игрового поля.
// нажатие кнопки мыши на игровом поле void _fastcall TForml::ForraMouseDown (TObject*Sender,TMouseButton Button, TSHIFTState SHIFT, int x, int y) -{ if (status == 2) return; if (status == 0) status = 1; x – = LEFT; у – == TOP; if (x > 0 && у > 0) { // преобразуем координаты мыши // в индексы клетки поля int row = y/H + 1; int col = x/W + 1; if (Button == mbLeft) { if (Pole[row][col] == 9) { Pole[row][col] +=100; status – 2; // игра закончена ShowPole(status); } else if (Pole[row][col] < 9) { Open(row,col); ShowPole(status); } } else if (Button == mbRight) { nFlag++; if (Pole[row][col] == 9) nMin++; Pole[row][col] += 200; // поставили флаг if (nMin == MM && nFlag = NM) { status =2; // игра закончена ShowPole(status); } else Kletka(row, col, status); } } }
Функция Flag (листинг 10.7) рисует флажок. Флажок (рис. 10.13) состоит из четырех примитивов: линии (древко), замкнутого контура (флаг) и ломаной линии (буква "М"). Функция Flag рисует флажок, используя метод базовой точки, т. е. координаты всех точек, определяющих положение элементов рисунка, отсчитываются от базовой точки.
Рис. 10.13. Флажок