Листинги
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;
