Иллюстрированный самоучитель по Delphi 7 для начинающих

Листинги

Полный текст программы Сапер 2002 представлен ниже.

В листинге 15.9 приведен модуль, соответствующий главной форме. В листинге 15.10 – форме О программе.

Листинг 15.9. Модуль главного окна программы Сапер 2002.

unit saper_1;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
Menus, StdCTRLs, OleCTRLs, HHOPENLib_TLB;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
Hhopen1: THhopen;
procedure Form1Create(Sender: TObject);
procedure Form1Paint(Sender: TObject);
procedure Form1MouseDown(Sender: TObject; Button: TMouseButton;
SHIFT: TSHIFTState; X, Y: Integer);
procedure N1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses saper_2;
{$R *.DFM}
const
MR = 10; // кол-во клеток по вертикали
MC = 10; // кол-во клеток по горизонтали
NM = 10; // кол-во мин
W = 40; // ширина клетки поля
H = 40; // высота клетки поля
var
Pole: array[0..MR+1, 0.. MC+1] of integer; // минное поле
// значение элемента массива:
// 0..8 – количество мин в соседних клетках
// 9 – в клетке мина
// 100..109 – клетка открыта
// 200..209 – в клетку поставлен флаг
nMin: integer; // кол-во найденных мин
nFlag: integer; // кол-во поставленных флагов
status: integer; // 0 – начало игры; 1 – игра; 2 – результат
Procedure NewGame(); forward;
// генерирует новое поле
Procedure ShowPole(Canvas: TCanvas; status: integer); forward;// Показывает поле
Procedure Kletka(Canvas: TCanvas; row, col, status: integer); forward; // выводит содержимое клетки
Procedure Open(row, col: integer); forward;
// открывает текущую и все соседние клетки, в которых нет мин
Procedure Mina(Canvas: TCanvas; x, y: integer); forward; // Рисует мину
Procedure Flag(Canvas: TCanvas; x, y: integer); forward;// Рисует флаг
// выводит на экран содержимое клетки
Procedure Kletka(Canvas: TCanvas; row, col, status: integer);
var
x,y: integer; // координаты области вывода
begin
x: = (col-1)* W + 1;
y: = (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;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.