- •«Московский технический университет связи и информатики»
- •Курсовая работа
- •1. Постановка задачи 2
- •Постановка задачи
- •Логическая структура программы
- •2.1 Класс рыбы Fish
- •2.3 Класс птицы Bird
- •2.2 Класс рыбака на пирсе Fisher
- •2.4 Класс рыбака на лодке Fisherboat
- •2.5 Класс дождя Rain
- •2.6 Класс внешнего мира GameEnvironment
- •2.7 Главная часть приложения - класс «MyForm»
- •3.7 Класс MyForm
- •Текст программы
- •4.1 Класс Fisher
- •4.2 Класс Fisherboat
- •4.3 Класс Fish
- •4.4 Класс Bird
- •4.5 Класс Rain
- •4.6 Класс GameEnvironment
- •4.7 Класс MyForm
- •Результаты тестирования программы
2.5 Класс дождя Rain
RainTickTime – оставшееся время дождя в тиках таймера.
События:
EventRainStart – событие начала дождя.
Методы:
OnRainStart – обработчик события начала дождя, устанавливает RainTickTime в максимальное значение;
RainStart – метод, вызывающий событие дождя (нужен для вызова события извне);
RainStop – метод, обнуляющий оставшееся время дождя.
Конструктор:
Выставляет свойства: устанавливает RainTickTime в нуль; связывает метод OnRainStart с событием EventRainStart.
2.6 Класс внешнего мира GameEnvironment
содержащий следующие данные:
Поля:
Weather – объект класса Rain;
Animals – список объектов класса Fish;
Fishers – список объектов класса Fisher;
_time_secs – protected поле, хранящее текущее время в секундах.
События:
EventFishCatched – событие поимки рыбы.
Методы:
FishSpawning – метод добавления новых рыб: добавляет рыб до суммарного количества FISHES_AT_ONE_TIME, подписывая метод FishDeleting на событие класса Fish EventDeleteObject;
FishDeleting – метод обработки события удаления рыбы, удаляет рыбу из списка методом Remove;
FisherDeleting – метод, обработки события удаления рыбака, удаляет рыбака из списка методом Remove;
FisherReplace – перемещает рыбака между лодкой и пирсом (фактически очищает список рыбаков, добавляет в список рыбаков объект соответствующего класса (Fisher или Fisherboat), связывает метод FisherDeleting с событием класса Fisher EventDeleteObject;
CheckFishcatch – проверяет условия (касание крючка, соответствие наживок, случайную вероятность) поимки конкретной рыбы, возвращает true в случае успеха;
OnEventFishCatched – метод обработки события ловли рыбы;
TimerTickAction – метод, включающий все основные программные действия, которые необходимо выполнить по тику таймера: принимает текущий шаг таймера, при повышенном множителе (т.е. уменьшенном шаге) выполняет ряд методов в цикле, в числе прочего этот метод вызывает событие EventFishCatched (при положительном возврате CheckFishcstch), вызывает методы передвижения рыб и рыбака, переключает время и дождь (начинается с вероятностью 1%, если еще не идет, продолжается 8 «минут» (тиков таймера));
GetStrTime – возвращает строку вида mm:ss, где mm и ss это минуты и секунды соответственно;
GetIntTime – возвращает число секунд как целочисленное значение;
GetStrTOD – возвращает название времени суток.
Конструктор:
Выставляет свойства: инициализирует списки рыб и рыбаков, а также объект класса Rain; связывает метод-обработчик OnEventFishCatched с событием EventFishCatched; устанавливает время в 450 секунд (7:30).
2.7 Главная часть приложения - класс «MyForm»
Методы:
Timer_Tick – метод обновления таймера, основной «цикл» всех вычислений: вызывает метод TimerTickAction класса GameEnvironment, а также все связанные с обновлением интерфейса методы;
Graphics – метод отрисовки графики: инициализирует объект Graphics, передает его в метод DrawScreen по ссылке, меняет изображение основного pictureBox и освобождает память;
DrawScreen – метод отрисовки экрана: выбирает элементы фона в соответствии со временем суток, управляет порядком наложения слоев (в том числе порядком вызова методов DrawFishes и DrawFisher);
DrawFishes – метод рисования всех рыб;
DrawFisher – метод рисования рыбака;
CheckWin – метод, проверяющий достижение цели по сумме пойманных рыб;
UpdateFishStr – метод, обновляющий label с информацией о пойманных рыбах / цели
UpdateDateTime – метод, обновляющий label с текущим временем;
btn_exit_Click – метод, вызывающий Form::Close(), то есть закрывающий приложение;
btn_hide_Click – метод, сворачивающий окно приложения;
btn_mltp_Click – метод, меняющий ускорение симуляции (доступны варианты от первой (1) до четвертой (16) степени двойки включительно);
btn_newFishboat_Click – обработчик нажатия кнопки «ПРИВЕСТИ РЫБАКА»;
btn_changePtr_Click – обработчик нажатия кнопки смены наживки (рыбак закинет удочку заново);
btn_changePos_Click – обработчик нажатия кнопки смены позиции (пирс/лодка) рыбака;
btn_rainSwitch_Click – обработчик нажатия кнопки включения/отключения дождя;
btn_restart_Click – обработчик нажатия кнопки перезапуска симуляции (появляется, когда цель по пойманным рыбам достигнута, то есть симуляция окончена);
OnEventCatchFish – обработчик события пойманной рыбы (пишет инфо о событии), подписанный на событие EventFishCatched класса GameEnvironment;
OnEventDeleteBoat – обработчик события ушедшего рыбака (пишет инфо о событии), подписанный на метод EventDeleteObject класса Fisher;
SetFishboatButtons – устанавливает поле Enabled кнопок, которые должны быть включены только когда рыбак на экране, в value (true/false), а кнопку добавления рыбака в противоположное значение (false/true);
SetNotRestartButtons – убирает все кнопки, кроме кнопки перезапуска (или наоборот).
Схемы алгоритмов
Класс Fish:
OnDownMove
Рисунок 1 - Схема алгоритма метода OnDownMove
Move
Рисунок 2 - Схема алгоритма метода Move
Catched
Рисунок 3 - Схема алгоритма метода Catched
SetPropertiesByPower
Рисунок 4 - Схема алгоритма метода SetPropertiesByPower
3.2 Класс Bird:
OnDownMove
Рисунок 5 - Схема алгоритма метода OnDownMove
SetPropertiesByPower
Рисунок 6 - Схема алгоритма метода SetPropertiesByPower
3.3 Класс Fisher:
Catch
Рисунок 7 - Схема алгоритма метода Catch
Move
Рисунок 8 - Схема алгоритма метода Move
OnWorkStop
Рисунок 9 - Схема алгоритма метода OnWorkStop
3.4 Класс Fisherboat:
Move
Рисунок 10 - Схема алгоритма метода Move
3.5 Класс Rain:
OnRainStart
Рисунок 11 - Схема алгоритма метода OnRainStart
RainStart
Рисунок 12 - Схема алгоритма метода RainStart
RainStop
Рисунок 13 - Схема алгоритма метода RainStop
3.6 Класс GameEnvironment:
FishDeleting
Рисунок 14 - Схема алгоритма метода FishDeleting
FisherReplace
Рисунок 15 - Схема алгоритма метода FisherReplace
CheckFishcatch
Рисунок 16 - Схема алгоритма метода CheckFishcatch
OnEventFishCatch
Рисунок 17 - Схема алгоритма метода OnEventFishCatch
GetStrTime
Рисунок 18 - Схема алгоритма метода GetStrTime
GetIntTime
Рисунок 19 - Схема алгоритма метода GetIntTime
GetStrTOD
Рисунок 22 - Схема алгоритма метода GetStrTOD