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

Игровое поле. Начало игры.

На разных этапах игры игровое поле выглядит по-разному. Вначале поле просто разделено на клетки. Во время игры, в результате щелчка правой кнопкой мыши, в клетке появляется флажок. Щелчок левой кнопкой тоже меняет вид клетки: клетка меняет цвет и в ней появляется цифра или мина (игра на этом заканчивается). Рассмотрим объекты, свойства и методы, обеспечивающие работу с графикой.

Начало игры

В начале игры надо расставить мины и для каждой клетки поля подсчитать, сколько мин находится в соседних клетках. Функция NewGame (ее текст приведен в листинге 10.3), решает эту задачу.

Листинг 10.3. Функция NewGame.

// новая игра – генерирует новое поле
void __fastcall NewGame()
{
// Очистим элементы массива, соответствующие отображаемым
// клеткам, а в неотображаемые, по границе игрового поля,
// запишем число – 3. Уникальное значение клеток границы
// используется функцией Open для завершения рекурсивного
// процесса открытия соседних пустых клеток.
int row,col;
for (row=0; row <= MR+1; row++)
for (col=0; col <= MC+1; col++)
Pole[row][col] = – 3; for (row=l; row <= MR; row++)
for (col=l; col <= MC; col++) Pole[row][col] = 0;
// расставим мины
time_t t;
// используется генератором случайных чисел (ГСЧ)
srand((unsigned) time(&t)); // инициализация ГСЧ
int n = 0; // количество мин
do
{
row = rand() % MR +1; col = randO % MC +1;
 if (Pole [row] [col],!= 9)
 {
Pole[row][col] = 9; n++; } } while (n < 10);
// вычисление количества мин в соседних клетках
int k;
for (row = 1; row <= MR; row++)
for (col = 1; col <= MC; col++)
if (Pole[row][col]!= 9) { k =0;
if (Pole[row-1][col-1] == 9) k++;
if (Pole[row-1][col] == 9) k++;
 if (Pole[row-1][col+1] == 9) k++;
if (Pole[row][col-1] = 9) k++;
if (Pole[row][col+1] == 9) k++;
if (Pole[row+1][col-1] = 9) k++;
 if (Pole[row+1][col] == 9) k++;
 if (Pole[row+1][col+1] == 9) k++;
 Pole[row][col] = k;
 }
status =0; // начало игры nMin =0;
 // нет обнаруженных мин nFlag =0;
// нет флагов }

После того как функция NewGame расставит мины, функция showpole (ее текст приведен в листинге 10.4) выводит изображение игрового поля.

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