Игровое поле. Начало игры.
Листинг 10.4. Функция ShowPole.
// показывает поле void __fastcall TForml::ShowPole(int status) { for (int row =1; row <= MR; row++) for (int col = 1; col <= MC; col++) Kletka(row, col, status); }
Функция ShowPole выводит изображение поля последовательно, клетка за клеткой. Вывод изображения отдельной клетки выполняет функция Kletka, ее текст приведен в листинге 10.5. Функция Kletka используется для вывода изображения поля в начале игры, во время игры и в ее конце.
В начале игры (значение параметра status равно нулю) функция выводит только контур клетки, во время игры – количество мин в соседних клетках или флажок, а в конце она отображает исходное состояние клетки и действия пользователя. Информацию о фазе игры функция Kletka получает через параметр status.
Листинг 10.5. Функция KLetka.
// рисует на экране клетку void __fastcall TForml::Kletka(int row, int col, int status) { int x = LEFT + (col-1)* W; int у = TOP + (row-1)* H; if (status == 0) // начало игры ( // клетка – серый квадрат Canvas › Brush › Color = clLtGray; Canvas › Rectangle (х-1, у-1, x+W, у+Н); return; } // во время (status = 1) – и в конце (status = 2) игры if (Pole[row][col] < 100) { // клетка не открыта Canvas › Brush › Color = clLtGray; // не открытые – серые Canvas › Rectangle(х-1,у-1,x+W,у+Н); if (status == 2 && Pole.frow] [col] == 9) Mina(x, у); // игра закончена, показать мину return; } // клетка открыта Canvas › Brush › Color = clWhite; // открытые белые Canvas › Rectangle(x-l,y-l,x+W,y+H); if (Pole[row][col] == 100) return; // клетка пустая if (Pole[row][col] >= 101 && Pole[row][col] <= 108) { Canvas › Font › Size = 14; Canvas › Font › Color = clBlue; Canvas › TextOutA(x+3,y+2,IntToStr(Pole[row][col] – 100)); return; } if (Pole[row][col] >= 200) Flag(x, y); if (Pole[row][col] == 109) // на этой мине подорвались! { Canvas › Brush › Color = clRed; Canvas › Rectangle(x,y,x+W,y+H); } if ((Pole[row][col]% 10 = 9) && (status = 2)) Mina(x, y); }