Листинги
// нажатие кнопки мыши на игровом поле procedure TForm1.Form1MouseDown(Sender: TObject; Button: TMouseButton; SHIFT: TSHIFTState; X, Y: Integer); var row, col: integer; begin if status = 2 // игра завершена then exit; if status = 0 then // первый щелчок status: = 1; // преобразуем координаты мыши в индексы // клетки поля row: = Trunc(y/H) + 1; col: = Trunc(x/W) + 1; if Button = mbLeft then begin if Pole[row,col] = 9 then begin // открыта клетка, в которой есть мина Pole[row,col]: = Pole[row,col] + 100; status: = 2; // игра закончена ShowPole(Form1.Canvas, status); end else if Pole[row,col] < 9 then Open(row,col); end else if Button = mbRight then if Pole[row,col] > 200 then begin // уберем флаг и закроем клетку nFlag: = nFlag -1; Pole[row,col]: = Pole[row,col] -200; // уберем флаг x: = (col-1)* W + 1; y: = (row-1)* H + 1; Canvas.Brush.Color: = clLtGray; Canvas.Rectangle(x-1,y-1,x+W,y+H); end else begin // поставить в клетку флаг nFlag: = nFlag + 1; if Pole[row,col] = 9 then nMin: = nMin + 1; Pole[row,col]: = Pole[row,col]+ 200; // поставили флаг if (nMin = NM) and (nFlag = NM) then begin status: = 2; // игра закончена ShowPole(Form1.Canvas, status); end else Kletka(Form1.Canvas, row, col, status); end; end; // Выбор меню Новая игра procedure TForm1.N1Click(Sender: TObject); begin NewGame(); ShowPole(Form1.Canvas,status); end;
Листинг 15.10. Модуль О программе.
// выбор из меню? команды Справка procedure TForm1.N3Click(Sender: TObject); var HelpFile: string; // файл справки HelpTopic: string; // раздел справки pwHelpFile: PWideChar; // файл справки (указатель на WideChar строку) pwHelpTopic: PWideChar; // раздел (указатель на WideChar строку) begin HelpFile: = 'saper.chm'; HelpTopic: = 'saper_02.htm'; // выделить память для WideChar строк GetMem(pwHelpFile, Length(HelpFile) * 2); GetMem(pwHelpTopic, Length(HelpTopic)*2); // преобразовать Ansi строку в WideString строку pwHelpFile: = StringToWideChar(HelpFile,pwHelpFile,MAX_PATH*2); pwHelpTopic: = StringToWideChar(HelpTopic,pwHelpTopic,32); // вывести справочную информацию Form1.Hhopen1.OpenHelp(pwHelpFile,pwHelpTopic); end; procedure TForm1.Form1Paint(Sender: TObject); begin ShowPole(Form1.Canvas, status); end; end.