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