Язык программирования Delphi

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование




? прямоугольник - заготовка пункта меню. Чтобы превратить эту заготовку в меню, нужно в окне Object Inspector в поле Caption ввести название меню.

Если перед какой-либо буквой в названии меню ввести знак &, то во время работы программы можно будет активизировать этот пункт меню путем нажатия комбинации клавиши и клавиши, соответствующей символу, перед которым стоит знак &. В названии меню эта буква будет подчеркнута.

Чтобы добавить в главное меню элемент, необходимо в окне редактора меню выбрать последний (пустой) элемент меню и ввести название нового пункта.

Чтобы добавить в меню команду, необходимо выбрать пункт меню, в который нужно добавить команду, переместить указатель активного элемента меню в конец списка команд меню и ввести название команды.

На рис. 5 приведено окно редактора меню, в котором находится меню программы Сапер.

Рис. 5. Структура меню программы Сапер.

После того как будет сформирована структура меню, нужно, используя окно Object Inspector, выполнить настройку элементов меню (выбрать настраиваемый пункт меню можно в окне формы приложения или из списка объектов в верхней части окна Object Inspector). Каждый элемент меню (пункты и команды) - это объект типа TMenuitem. Свойства объектов TMenuitem (табл.1) определяют вид меню во время работы программы.

Таблица 1. Свойства объекта TMenuItem

СвойствоОпределяетNameИмя элемента меню. Используется для доступа к свойствамCaptionНазвание меню или командыBitmapЗначок, который отображается слева от названия элемента менюEnabledПризнак доступности элемента меню. Если значение свойства равно False, то элемент меню недоступен, при этом название меню отображается серым цветом

При выборе во время работы программы элемента меню происходит событие Click. Чтобы создать процедуру обработки этого события, нужно в окне формы выбрать пункт меню и щелкнуть левой кнопкой мыши - Delphi создаст шаблон процедуры обработки этого события. В качестве примера ниже приведена процедура обработки события, которое возникает в результате выбора из меню ? команды Справка. N3 - это имя элемента меню, соответствующего этой команде.

3. Описание процедур

В начале игры нужно расставить мины, затем для каждой клетки поля подiитать, сколько мин находится в соседних клетках. Процедура NewGame решает эту задачу.

.1Процедура NewGame

// новая игра - генерирует новое поле

procedure NewGame ();,col : integer; // координаты клетки (индексы массива) : integer; // количество поставленных мин

k : integer; // кол-во мин в соседних клетках

begin

// Очистим эл-ты массива, соответствующие клеткам

// игрового поляrow :=1 to MR docol :=1 to MC do Pole[row,col] := 0;

// расставим мины

Randomize О; // инициализация Гi (генератор случайных чисел)

n := 0; // кол-во мин:= Random(MR) + 1;:= Random(MC) + 1;(Pole[row,col] <> 9) then begin[row,col] := 9; n := n+1;;

until (n = NM);

// для каждой клетки вычислим // кол-во мин в соседних клетках

for row := 1 to MR docol := 1 to MC do(Pole[row,col] <> 9) thenk :=0 ;Pole[row-l,col-l] = 9 then k = k + 1;Pole[row-1,col] = 9 then k = k + 1;Pole[row-1,col+1] = 9 then k = k + 1;Pole[row,col-1] = 9 then k = k + 1;Pole[row,col+1] = 9 then k = k + 1;Pole[row+1,col-1] = 9 then k = k + 1;Pole[row+1,col] = 9 then k = k + 1;Pole[row+l,col+l] = 9 then k := k + 1;[row,col] := k;; := 0; // начало игры

nMin := 0; // нет обнаруженных мин

nFlag := 0; // нет поставленных флагов

end;

После того как процедура NewGame расставит мины, процедура ShowPole выводит изображение игрового поля.

.2 Процедура ShowPole

// Показывает поле

Procedure ShowPoie(Canvas : TCanvas; status : integer);,col : integer;row := 1 to MR docol := 1 to MC do(Canvas, row, col, status);;

Процедура showPole выводит изображение поля последовательно, клетка за клеткой. Вывод изображения отдельной клетки выполняет процедура Kletka. Процедура Kletka используется для вывода изображения поля в начале игры, во время игры и в ее конце. В начале игры (значение параметра status = 0) процедура выводит только контур клетки, во время игры - количество мин в соседних клетках или флажок, а в конце отображает исходное состояние клетки и действия пользователя. Информацию о фазе игры процедура Kletka получает через параметр status.

.3 Процедура Kletka

// выводит на экран изображение клетки

Procedure Kletka(Canvas : TCanvas;, col, status : integer);

x,y : integer; // координаты области вывода

begin:= (col-1)* W + I; у := (row-1)* H + 1;status = 0 then begin.Brush.Color := clLtGray;.Rectangle(x-1,y-1,x+W,y+H);;;Pole[row,col] < 100 then.Brush.Color := clLtGray; // неоткрытые - серые.Rectangle(x-1,y-l,x+W,y+H);

// если игра завершена (status = 2), то показать мины

if (status = 2) and (Pole[row,col] = 9)Mina(Canvas, x, y) ; exit; end;

// открытая клетка.Brush.Color := clWhite; // открытые белые.Rectangle(x-1,y-l,x+W,y+H); (Pole[row,col] = 100)

then exit; // клетка открыта, но она пустая

if (Pole[row,col] >= 101)(Pole[row,col] <= 108) begin // в соседних клетках есть мины

=200)Flag(Canvas,x,y);(Pole[row,col]=109)">Canvas.Font.Size := 14;.Font.Color := clBlue;.TextOut(x+3,y+2,IntToStr(Pole[row,col] -100));;;(Pole[row,col] >= 200)Flag(Canvas, x, y); (Pole[row,col] = 109)

then // на этой мине подорвались!

begin.Brush.Color := clRed;.Rectangle(x-1,y-1,x+W,y+H);;((Pole[row,col] mod 10) = 9)(status = 2) then(Canvas, x, y);;

Во время игры программа воспринимает нажатия кнопок мыши и, в соответствии с правилами игры, открывает клетки или ставит в клетки флажки. Основную работу выполняет процедура обработки события onMouseDown. Сначала процедура преобразует координаты точки, в которой игрок нажал кнопку мыши, в координаты клетки игрового поля. Затем делает необходимые изменения в массиве Pole и, если нажата правая кнопка, рисует в клетке флажок. Если нажата левая кнопка в клетке, в которой нет мины, то эта клетка открывается, на экран выводится ее содержимое. Если нажата левая кнопка в клетке, в которой есть мина, то вызывается процедура showPole, которая показывает все мины, в том числ