Листинги
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-1,col-1] = 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+1,col+1] = 9 then k: = k + 1;
Pole[row,col]: = k;
end;
status: = 0; // начало игры
nMin: = 0; // нет обнаруженных мин
nFlag: = 0; // нет флагов
end;
// Рисует мину
Procedure Mina(Canvas: TCanvas; x, y: integer);
begin
with Canvas do
begin
Brush.Color: = clGreen;
Pen.Color: = clBlack;
Rectangle(x+16,y+26,x+24,y+30);
Rectangle(x+8,y+30,x+16,y+34);
Rectangle(x+24,y+30,x+32,y+34);
Pie(x+6,y+28,x+34,y+44,x+34,y+36,x+6,y+36);
MoveTo(x+12,y+32); LineTo(x+26,y+32);
MoveTo(x+8,y+36); LineTo(x+32,y+36);
MoveTo(x+20,y+22); LineTo(x+20,y+26);
MoveTo(x+8, y+30); LineTo(x+6,y+28);
MoveTo(x+32,y+30); LineTo(x+34,y+28);
end;
end;
// Рисует флаг
Procedure Flag(Canvas: TCanvas; x, y: integer);
var
p: array [0..3] of TPoint; // координаты флажка и нижней точки древка
m: array [0..4] of TPoint; // буква М
begin
// зададим координаты точек флажка
p[0].x: = x+4; p[0].y: = y+4;
p[1].x: = x+30; p[1].y: = y+12;
p[2].x: = x+4; p[2].y: = y+20;
p[3].x: = x+4; p[3].y: = y+36; // нижняя точка древка
m[0].x: = x+8; m[0].y: = y+14;
m[1].x: = x+8; m[1].y: = y+8;
m[2].x: = x+10; m[2].y: = y+10;
m[3].x: = x+12; m[3].y: = y+8;
m[4].x: = x+12; m[4].y: = y+14;
with Canvas do
begin
// установим цвет кисти и карандаша
Brush.Color: = clRed;
Pen.Color: = clRed;
Polygon(p); // флажок
// древко
Pen.Color: = clBlack;
MoveTo(p[0].x, p[0].y);
LineTo(p[3].x, p[3].y);
// буква М
Pen.Color: = clWhite;
Polyline(m);
Pen.Color: = clBlack;
end;
end;
// выбор из меню? команды О программе
procedure TForm1.N4Click(Sender: TObject);
begin
AboutForm.Top: = Trunc(Form1.Top + Form1.Height/2 – AboutForm.Height/2);
AboutForm.Left: = Trunc(Form1.Left +Form1.Width/2 – AboutForm.Width/2);
AboutForm.ShowModal;
end;
procedure TForm1.Form1Create(Sender: TObject);
var
row,col: integer;
begin
// В неотображаемые эл-ты массива, которые соответствуют
// клеткам по границе игрового поля запишем число -3.
// Это значение используется функцией Open для завершения
// рекурсивного процесса открытия соседних пустых клеток.
for row: = 0 to MR+1 do
for col: = 0 to MC+1 do
Pole[row,col]: = -3;
NewGame(); // "разбросать" мины
Form1.ClientHeight: = H*MR + 1;
Form1.ClientWidth: = W*MC + 1;
end;