Задание7_Сапер_ч2 (1076725), страница 2
Текст из файла (страница 2)
END;
PROCEDURE В( N : byte );
BEGIN ... // - текст - описание процедуры В
A(N) ; // - вызов процедуры А - косвенная рекурсия
END;
Опережающее описание обеспечивает взаимную рекурсию подпрограмм: ранее описанная подпрограмма может вызвать другую подпрограмму с опережающим описанием, текст которой расположен после вызывающей подпрограммы. Опережающие описания не допускаются в интерфейсной части модуля (unit).
Шаг 8. Процедура MouseDown().
Эта процедура будет выполнять управлениt выводом изображений клеток в процессе игры. Если нажата правая кнопка, то в клетке должен выводиться флажок, а если флаг был, то он убирается и клетка закрывается. Если флаги расставлены верно и их число равно числу мин (NM), то вызывается процедура ShowPole() и игра завершается. Если нажата левая кнопка в клетке, в которой нет мины, то вызывается процедура Open(). Если нажата левая кнопка в клетке, в которой есть мина, то вызывается процедура ShowPole, которая показывает все мины, в том числе и те, которые игрок не успел найти, и игра завершается поражением (клетка с миной, на которой подорвался сапер, выделяется красным цветом).
Прототип процедуры:
Procedure TForm1.Form1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Описание алгоритма:
-
Если status=2, то выход (игра завершена и ничего не надо делать).
-
Если status=0, то status=1 – первое нажатие.
-
Преобразовать координаты мыши в индексы клетки поля.
-
Если нажата левая кнопка мыши, то:
4.1. если открыта клетка, в которой есть мина, то к Pole(row,col) нужно прибавить 100, установить status=2 (игра закончена) и показать поле;
4.2. иначе если открыта клетка, в которой нет мины, то нужно вызвать процедуру Open(row,col);
5. Если нажата правая кнопка мыши, то:
5.1. если в клетке был флаг, то убрать флаг (вычесть из Pole[row,col] 200 и вывести прямоугольник серого цвета;
5.2. иначе поставить в клетку флаг, то есть:
увеличить счетчик флагов;
если в поле была мина, то увеличить счетчик открытых мин;
прибавить 200 к Pole[row,col];
если число открытых мин и число поставленных флагов равны NM, то
игра закончена (status=2 и показать поле);
иначе показать клетку.
В заключение работы выполнить шаги 9 и 10.
Шаг 9. Комплексная отладка программы.
Шаг 10. Тестирование и исправление обнаруженных ошибок.