Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП Компьютерная Игра по ПЯВУ.docx
Скачиваний:
0
Добавлен:
03.12.2019
Размер:
919.97 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Государственное образовательное учреждение высшего профессионального образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА КОМПЬЮТЕРНОЙ МАТЕМАТИКИ И ПРОГРАММИРОВАНИЯ

КУРСОВАЯ РАБОТА ЗАЩИЩЕНА С ОЦЕНКОЙ

РУКОВОДИТЕЛЬ

асс.

М.Н. Суслов

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОЙ РАБОТЕ

КОМПЬЮТЕРНАЯ ИГРА

по дисциплине: ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ

РАБОТУ ВЫПОЛНИЛА

СТУДЕНТКА ГР.

4936

В.А. Дубровская

подпись, дата

инициалы, фамилия

Санкт-Петербург 2011

  1. Задание:

Написать игру на языке программирования высокого уровня.

  1. Описание правил игры:

Персонажи:

☻ - протагонист Паку-Паку Мэн

T – два брата близнеца-привидения: Тинки и Тэнки. В режиме преследования используют в качестве цели точку, в которой находится Паку-Паку.

Y – два брата близнеца-привидения: Янни и Санни. В режиме преследования используют в качестве цели точку, в которой находится Паку-Паку, если последняя расположена в радиусе видимости. Радиус видимости увеличивается с каждым пройденным уровнем.

u – маленькое привидение. Двигается в случайном режиме. Если Паку-Паку поймает такое привидение, то он получит дополнительную жизнь, а привидение вернется на начальную клетку в своем истинном обличии. Если же привидение поймает Паку-Паку, то Паку-Паку потеряет жизнь и прохождение уровня придется начать сначала.

Правила игры:

Цель игры – съесть все точки на карте.

Если Паку-Паку мен съедает «энерджайзер» +. то все привидения превращаются в маленькие уязвимые привидения. Каждый «энерджайзер» дает Паку-Паку 50 очков, а каждая обычная точка – 10. Когда Паку-Паку Мэн набирает число кратное 1000, то он получает дополнительную жизнь.

В начале игры у Паку-Паку есть три жизни, и радиусы у близнецов Янни и Санни равны четырем клеткам вокруг их положения.

  1. Описание структур данных:

В программе используются структуры данных и перечисления.

Перечисления:

  • перечисление COLOUR хранит названия цветов для придания колорита интерфейсу игры.

  • перечисление MOOD хранит названия состояний привидений.

  • перечисление DIRS хранит возможные направления движения Паку-Паку.

Структуры данных:

  • Структура PACMAN хранит:

  • символ, характеризующий внешний вид персонажа.

  • тип данных, охарактеризованный перечислением DIRS, отображающий направление движение персонажа.

  • массив из двух переменных, хранящий положение персонажа на карте.

  • Структура GHOST хранит:

  • тип данных, охарактеризованный перечислением MOOD, отображающий состояние персонажа.

  • символ, характеризующий внешний вид персонажа.

  • радиус видимости персонажем.

  • массив из двух переменных, хранящий положение персонажа на карте.

  • символ, который хранится на клетке, на который находится персонаж.

  • Структура GAME (основная структура игры) хранит:

  • карта игры – двумерный символьный массив размера 21 на 21.

  • количество точек на карте.

  • количество очков, набранных игроком.

  • количество жизней Паку-Паку.

  • номер уровня игры.

  • структура типа PACMAN

  • массив структур из четырех элементов типа GHOST

  1. Описание основного алгоритма игры:

  1. Описание вспомогательных функций:

  • Функции для работы с интерфейсом:

    • 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 – массив с координатами наилучшего шага

Блок-схема: