C++ Builder - вопросы программирования



         

Листинг 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) выводит изображение игрового поля.









Содержание  Назад  Вперед