Текст программы
Полный текст программы "Сапер" приведен ниже: в листингах 10.11 и 10.12 – заголовочный файл и модуль главной формы; в листинге 10.13 – модуль формы О программе.
Листинг 10.11. Заголовочный файл главной формы (saper_.h).
#ifndef saper_H fdefine saper_H #include <Classes.hpp> #include <Controls.hpp> #include <StdCTRLs.hpp> #include <Forms.hpp> #include <ExtCTRLs.hpp> # include <Menus.hpp> class TForml: public TForm { published: TMainMenu *MainMenul; // команды главного меню TMenuItem *N1; // Новая игра TMenuItem *N2; // команда "?" // команды меню "?" TMenuItem *N3; // Справка TMenuItem *N4; // О программе void __fasteall FormMouseDown(TObject *Sender, TMouseButton Button, TSHIFTState SHIFT, int X, int Y); void __fastcall FormPaint(TObject *Sender); void _fastcall FormCreate(TObject *Sender); // выбор,команды в меню void fastcall NIClick(TObject *Sender); // Новая игра void __fastcall N3Click(TObject *Sender); // Справка void __fastoall N4Click(TObject *Sender); // О программе private: void fastcall ShowPole(int status); // отображает поле // отображает содержимое клетки void __fastcall Kletka (int row, int col, int status); void __fastcall Mina (int x, int y); // рисует мину void __fastcall Flag(int x, int y); // рисует флаг public: __fastcall TForml(TComponent* Owner); }; extern PACKAGE TForml *Forml; tendif
Листинг 10.12. Модуль главной формы (saperXcpp).
/* Игра "Сапер". Демонстрирует работу с графикой, использование рекурсии, доступ к файлу справочной информации. */ # include <vcl.h> #include <stdlib.h> // для доступа к ГСЧ #include <time.h> # linclude <stdio.h> # pragma hdrstop # include "saper_.h" # include "saper_2.cpp" # pragma package(smart_init) # pragma resource "*.dfm" TForml *Forml; // главное окно fastcall TForml::TForml(TComponent* Owner) : TForm(Owner) { } fdefine MR 10 // кол-во клеток – по вертикали fdefine MC 10 // кол-во клеток по горизонтали idefine MM 10 // кол-во мин int Pole[MR+2][МС+2]; // минное поле // 0..8 – количество мин в соседних клетках // 9 – в клетке мина // 100..109 – клетка открыта // 200..209 – в клетку поставлен флаг int nMin; // кол-во, найденных мин int nFlag; // кол-во поставленных флагов int status =0; //0 – начало игры; 1 – игра; 2 – результат // смещение игрового поля относительно левого верхнего угла // поверхности формы tdefine LEFT 0 // по X Idefine ТОР 1 // по Y ttdefine W 40 // ширина клетки поля #define H 40 // высота клетки поля void __fastcall NewGameO; // новая игра – "разбрасывает" мины void __fastcall Open(int row, int col); /* открывает текущую и соседние пустые клетки */ // нажатие кнопки мыши на игровом поле