
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Государственное образовательное учреждение высшего профессионального образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА КОМПЬЮТЕРНОЙ МАТЕМАТИКИ И ПРОГРАММИРОВАНИЯ
КУРСОВАЯ РАБОТА ЗАЩИЩЕНА С ОЦЕНКОЙ
РУКОВОДИТЕЛЬ
асс. |
|
|
|
М.Н. Суслов |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОЙ РАБОТЕ |
КОМПЬЮТЕРНАЯ ИГРА
|
по дисциплине: ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ |
|
|
РАБОТУ ВЫПОЛНИЛА
СТУДЕНТКА ГР. |
4936 |
|
|
|
В.А. Дубровская |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2011
Задание:
Написать игру на языке программирования высокого уровня.
Описание правил игры:
Персонажи:
☻ - протагонист Паку-Паку Мэн
T – два брата близнеца-привидения: Тинки и Тэнки. В режиме преследования используют в качестве цели точку, в которой находится Паку-Паку.
Y – два брата близнеца-привидения: Янни и Санни. В режиме преследования используют в качестве цели точку, в которой находится Паку-Паку, если последняя расположена в радиусе видимости. Радиус видимости увеличивается с каждым пройденным уровнем.
u – маленькое привидение. Двигается в случайном режиме. Если Паку-Паку поймает такое привидение, то он получит дополнительную жизнь, а привидение вернется на начальную клетку в своем истинном обличии. Если же привидение поймает Паку-Паку, то Паку-Паку потеряет жизнь и прохождение уровня придется начать сначала.
Правила игры:
Цель игры – съесть все точки на карте.
Если Паку-Паку мен съедает «энерджайзер» +. то все привидения превращаются в маленькие уязвимые привидения. Каждый «энерджайзер» дает Паку-Паку 50 очков, а каждая обычная точка – 10. Когда Паку-Паку Мэн набирает число кратное 1000, то он получает дополнительную жизнь.
В начале игры у Паку-Паку есть три жизни, и радиусы у близнецов Янни и Санни равны четырем клеткам вокруг их положения.
Описание структур данных:
В программе используются структуры данных и перечисления.
Перечисления:
перечисление COLOUR хранит названия цветов для придания колорита интерфейсу игры.
перечисление MOOD хранит названия состояний привидений.
перечисление DIRS хранит возможные направления движения Паку-Паку.
Структуры данных:
Структура PACMAN хранит:
символ, характеризующий внешний вид персонажа.
тип данных, охарактеризованный перечислением DIRS, отображающий направление движение персонажа.
массив из двух переменных, хранящий положение персонажа на карте.
Структура GHOST хранит:
тип данных, охарактеризованный перечислением MOOD, отображающий состояние персонажа.
символ, характеризующий внешний вид персонажа.
радиус видимости персонажем.
массив из двух переменных, хранящий положение персонажа на карте.
символ, который хранится на клетке, на который находится персонаж.
Структура GAME (основная структура игры) хранит:
карта игры – двумерный символьный массив размера 21 на 21.
количество точек на карте.
количество очков, набранных игроком.
количество жизней Паку-Паку.
номер уровня игры.
структура типа PACMAN
массив структур из четырех элементов типа GHOST
Описание основного алгоритма игры:
Описание вспомогательных функций:
Функции для работы с интерфейсом:
void ClearScreen()
void SetTextColor(COLOURS colour)
void show_map(void)
void MoveCursor(int x, int y)
void SetCursorVisibility(bool isVisible)
void show_health(void)
void show_rules_and_controls(void)
Функции обработки данных игры:
bool analys_pacman_locations(void)
bool analys_ghosts_locations(void)
bool made_move(void)
Функции установки некоторых определенных параметров для игры:
void made_const_map(void)
void made_basic_characters_locations(void)
void made_basic_map(void)
void made_basic_descriptions(bool inception)
void basic_ghosts_decriptions(int number)
Функции работы искусственного интеллекта:
void made_matrix(void)
void find_way(int end_poz_X,int end_poz_Y,int poz_X,int poz_Y,int const_poz_X,int const_poz_Y,int count)
void find_right_move(int*move,int poz_X,int poz_Y)
bool if_in_radius(int poz_ghost_X,int poz_ghost_Y,int radius)
void random_move(int*move,int poz_X,int poz_Y)
bool can_do_move(char ch)
Вспомогательные функции:
bool if_it_wall(char ch)
bool if_it_ghost(char ch)
Анализ хода Паку-Паку мена:
Протитип: bool analys_pacman_locations(void);
Входные данные: GAME game – основная структура игры
Выходные данные: true/false – игра закончилась/игра продолжается
Блок-схема:
Анализ хода привидений:
Протитип: bool analys_ghosts_locations(void);
Входные данные: GAME game – основная структура игры
Выходные данные: true/false – игра закончилась/игра продолжается
Блок-схема:
Происходит по принципу и аналогу исследования хода Паку-Паку, только добавляется условие невозможности наложения двух привидений друг на друга и анализ происходит для всех привидений сразу.
Ввод данных для управления Паку-Паку меном:
Протитип: bool made_move(void);
Входные данные: GAME game – основная структура игры
Выходные данные: true/false – игра закончилась/игра продолжается
Блок-схема:
Функция волнового алгоритма:
Протитип: void find_way(int end_poz_X,int end_poz_Y,int poz_X,int poz_Y,int const_poz_X,int const_poz_Y,int count);
Входные данные:
int end_poz_X – координата конечной точки
int end_poz_Y – координата конечной точки
int poz_X – координата начальной точки
int poz_Y – координата начальной точки
int const_poz_X – координата начальной точки, которая неизменна в функции
int const_poz_Y – координата начальной точки, которая неизменна в функции
int count – номер волны
Выходные данные: int matrix – матрица с номерами волн
Блок-схема:
Поиск наилучшего шага:
Протитип: void find_right_move(int*move,int poz_X,int poz_Y);
Входные данные:
int poz_X – координата конечной точки
int poz_Y – координата конечной точки
Выходные данные: int move – массив с координатами наилучшего шага
Блок-схема: