Начало игры
В начале игры нужно расставить мины, затем для каждой клетки поля подсчитать, сколько мин находится в соседних клетках. Процедура NewGame (ее текст приведен в листинге 15.3) решает эту задачу.
Листинг 15.3. Процедура NewGame.
// новая игра – генерирует новое поле procedure NewGame (); row,col: integer; // координаты клетки (индексы массива) n: integer; // количество поставленных мин k: integer; // кол-во мин в соседних клетках begin // Очистим эл-ты массива, соответствующие клеткам // игрового поля for row: = 1 to MR do for col: = 1 to MC do Pole[row,col]: = 0; // расставим мины Randomize О; // инициализация ГСЧ n: = 0; // кол-во мин repeat row: = Random(MR) + 1; col: = Random(MC) + 1; if (Pole[row,col] <> 9) then begin Pole[row,col]: = 9; n: = n+1; end; until (n = NM); // для каждой клетки вычислим // кол-во мин в соседних клетках for row: = 1 to MR do for col: = 1 to MC do if (Pole[row,col] <> 9) then begin k: = 0; if Pole[row-l,col-l] = 9 then k = k + 1; if Pole[row-1,col] =' 9 then k = k + 1; if Pole[row-1,col+1] = 9 then k = k + 1; if Pole[row,col-1] = 9 then k = k + 1; if Pole[row,col+1] = 9 then k = k + 1; if Pole[row+1,col-1] = 9 then k = k + 1; if Pole[row+1,col] = 9 then k = k + 1; if Pole[row+l,col+l] = 9 then k: = k + 1; Pole[row,col]: = k; end; status: = 0; // начало игры nMin: = 0; // нет обнаруженных мин nFlag: = 0; // нет поставленных флагов end;
После того как процедура NewGame расставит мины, процедура showPole (ее текст приведен в листинге 15.4) выводит изображение игрового поля.
Листинг 15.4. Процедура ShowPole.
// Показывает поле Procedure ShowPoie(Canvas: TCanvas; status: integer); var row,col: integer; begin for row: = 1 to MR do for col: = 1 to MC do Kletka(Canvas, row, col, status); end;