Начало игры
Процедура showPole выводит изображение поля последовательно, клетка за клеткой. Вывод изображения отдельной клетки выполняет процедура Kletka, ее текст приведен в листинге 15.5. Процедура Kletka используется для вывода изображения поля в начале игры, во время игры и в ее конце. В начале игры (значение параметра status = 0) процедура выводит только контур клетки, во время игры – количество мин в соседних клетках или флажок, а в конце отображает исходное состояние клетки и действия пользователя. Информацию о фазе игры процедура Kletka получает через параметр status.
Листинг 15.5. Процедура Kletka.
// выводит на экран изображение клетки Procedure Kletka(Canvas: TCanvas; row, col, status: integer); var x,y: integer; // координаты области вывода begin x: = (col-1)* W + I; у: = (row-1)* H + 1; if status = 0 then begin Canvas.Brush.Color: = clLtGray; Canvas.Rectangle(x-1,y-1,x+W,y+H); exit; end; if Pole[row,col] < 100 then begin Canvas.Brush.Color: = clLtGray; // неоткрытые – серые Canvas.Rectangle(x-1,y-l,x+W,y+H); // если игра завершена (status = 2), то показать мины if (status = 2) and (Pole[row,col] = 9) then Mina(Canvas, x, y); exit; end; // открытая клетка Canvas.Brush.Color: = clWhite; // открытые белые Canvas.Rectangle(x-1,y-l,x+W,y+H); if (Pole[row,col] = 100) then exit; // клетка открыта, но она пустая if (Pole[row,col] >= 101) and (Pole[row,col] <= 108) then begin // в соседних клетках есть мины Canvas.Font.Size: = 14; Canvas.Font.Color: = clBlue; Canvas.TextOut(x+3,y+2,IntToStr(Pole[row,col] – 100)); exit; end; if (Pole[row,col] >= 200) then Flag(Canvas, x, y); if (Pole[row,col] = 109) then // на этой мине подорвались! begin Canvas.Brush.Color: = clRed; Canvas.Rectangle(x-1,y-1,x+W,y+H); end; if ((Pole[row,col] mod 10) = 9) and (status = 2) then Mina(Canvas, x, y); end;