Листинги
Полный текст программы Сапер 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;