Иллюстрированный самоучитель по C++ Builder

Игра

Во время игры программа воспринимает нажатия кнопок мыши и, в соответствии с правилами игры, открывает клетки или ставит в клетки флажки.

Основную работу выполняет функция обработки события 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 рисует флажок, используя метод базовой точки, т. е. координаты всех точек, определяющих положение элементов рисунка, отсчитываются от базовой точки.

Иллюстрированный самоучитель по C++ Builder › Примеры программ › Игра
Рис. 10.13. Флажок

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.