Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Игры "ghost's city"

Автор:   •  Февраль 10, 2018  •  Курсовая работа  •  52,057 Слов (209 Страниц)  •  503 Просмотры

Страница 1 из 209
  1. МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
  1. федеральное государственное автономное образовательное учреждение
    высшего профессионального образования
  1. «Санкт-Петербургский государственный университет
    аэрокосмического приборостроения»

  1. КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
  2. КУРСОВАЯ РАБОТА
  3. ЗАЩИЩЕНА С ОЦЕНКОЙ
  4. РУКОВОДИТЕЛЬ
  1. доцент, канд. техн. наук
  1. Л.Н. Бариков
  1. должность, уч. степень, звание
  1. подпись, дата
  1. инициалы, фамилия
  1. ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
    К КУРСОВОЙ РАБОТЕ
  1. Игра «Ghost’s city»
  1. по дисциплине: Основы программирования
  1. РАБОТУ ВЫПОЛНИЛ
  1. СТУДЕНТ ГР.
  1. 4642
  1. Ю.Л.Ляпина
  1. подпись, дата
  1. инициалы, фамилия
  1. Санкт-Петербург
  2. 2017
  3. СОДЕРЖАНИЕ
  4. Введение……………………………………………………………………………………………3
  5. 1.Постановка задачи……………………………………………………………………………….4
  6. 2.Спецификация……………………………………………………………………………………5
  7.           2.1 Спецификация…………………………………………………………………………...6
  8. 3.Текст программы…………………………………………………………………………………7
  9.            Аннотация…………………………………………………………………………………...8
  10.            Содержание………………………………………………………………………………….9
  11.            3.1 Текст программы……………………………………………………………………….10
  12.            3.2 Результаты тестирования………………………………………………………………53
  13. 4.Описание программы……………………………………………………………………………54
  14.            Аннотация……………………………………………………………………………...…...55
  15.            Содержание……………………………………………………………………………...….56
  16.             4.1 Общие сведения…………………………………………………………………...…...57
  17.             4.2 Функциональное назначение……………………………………………………...…..57
  18.             4.3 Описание логической структуры………………………………………………....…...57
  19.             4.4 Спецификация подпрограмм……………………………………………………...…..57
  20.             4.5 Используемые технические средства…………………………………………….…...61
  21.             4.6 Вызов и загрузка……………………………………………………………………..…61
  22. 5. Описание применения……………………………………………………………………….….62
  23.             Аннотация……………………………………………………………………………….….63
  24.             Содержание…………………………………………………………………………………64
  25.             5.1 Назначение программы………………………………………………………………...65
  26.             5.2 Условия применения……………………………………………………………...……65
  27.             5.3 Описание задачи………………………………………………………………………...65
  28.             5.4 Основные характеристики занимаемой памяти……………………………………....65
  29. Заключение……………………………………………………………………………………….....66
  30. Список используемых источников………………………………………………………………..67

  1. Введение
  2. Данная курсовая работа способствует закреплению учебного материала, изученного по курсу «Основы программирования».
  3. Программа представляет собой приложение «Ghost’s city», используется в качестве игры для одного человека.
  4. Цель курсового проекта — выработать навыки общеизвестных алгоритмов для решения конкретных задач, закрепить знания по программированию на языке С++.
  5. Курсовая работа поможет приобрести навыки по оформлению документации на программные средства.

  1. 1.Постановка задачи
  2. Используя технологию объектно-ориентированного программирования и кроссплатформенную мультимедийную библиотеку SFML,  написать программу «Ghost’s city».
  3. Используя клавиатуру программу может использовать только 1 человек.
  4. Программу «Ghost’s city» создать на языке С++, в среде программирования MS Visual Studio 2013.

  1. МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
  1. федеральное государственное автономное образовательное учреждение
    высшего профессионального образования
  1. «Санкт-Петербургский государственный университет
    аэрокосмического приборостроения»

  1. КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
  1. ПРОГРАММА
  1. Игра «Ghost’s city»
  1. Спецификация
  1. 44.4642.17-01
  1. РАБОТУ ВЫПОЛНИЛ
  1. СТУДЕНТ ГР.
  1. 4642
  1. Ю.Л.Ляпина
  1. подпись, дата
  1. инициалы, фамилия
  1. Санкт-Петербург
  2. 2017
  3. 2.1 Спецификация
  1. Обозначение
  1. Наименование
  1. Применение
  1. 44.4642.17-01
  1. Документация
  2. Программа «Ghost’s city»
  3. Спецификация
  1. 44.4642.17-12
  1. Документация
  2. Программа «Ghost’s city»
  3. Текст программы
  1. 44.4642.17-13
  1. Документация
  2. Программа «Ghost’s city»
  3. Описание программы
  1. 44.4642.17-31
  1. Документация
  2. Программа «Ghost’s city»
  3. Описание применения

  1. МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
  1. федеральное государственное автономное образовательное учреждение
    высшего профессионального образования
  1. «Санкт-Петербургский государственный университет
    аэрокосмического приборостроения»

  1. КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
  1. ПРОГРАММА
  1. Игра «Ghost’s city»
  1. Текст программы
  1. 44.4642.17-12
  1. РАБОТУ ВЫПОЛНИЛ
  1. СТУДЕНТ ГР.
  1. 4642
  1. Ю.Л.Ляпина
  1. подпись, дата
  1. инициалы, фамилия
  1. Санкт-Петербург
  2. 2017
  3. Аннотация
  4. В документе приводится текст программы игры  «Ghost’s  city»,  написанной на языке С++,  так же результаты тестирования.

  1. Содержание
  2. 3.1 Текст программы
  3. 3.2 Результаты тестирования
  4. 3.1 Текст программы
  5. bullet.cpp
  6. #include "bullet.h"
  7. #include "wall.h"
  8. Bullet::Bullet()
  9. {
  10.         m_type = GameObjectType_Bullet;
  11.         m_ownerType = GameObjectType_None;
  12.         setTextureRect(kBulletImage);
  13. }
  14. void Bullet::render(sf::RenderWindow* rw)
  15. {
  16.         GameObject::render(rw);
  17. }
  18. void Bullet::intersect(GameObject* object)
  19. {
  20.         // удаляет себя
  21.         setHealth(0);
  22.         // наносит урон
  23.         object->doDamage(1);
  24. }

  1. bullet.h
  2. #pragma once
  3. #include "gameObject.h"
  4. #include "level.h"
  5. class Bullet
  6.         : public GameObject
  7. {
  8. public:
  9.         Bullet();
  10.         virtual void render(sf::RenderWindow* rw);
  11.         virtual void intersect(GameObject* object);
  12.         void setOwnerType(GameObjectType ownerType) { m_ownerType = ownerType; }
  13.         GameObjectType getOwnerType() { return m_ownerType; }
  14. private:
  15.         GameObjectType m_ownerType;
  16. };

  1. direction.h
  2. #pragma once
  3. enum Direction
  4. {
  5.         Direction_Left,
  6.         Direction_Up,
  7.         Direction_Right,
  8.         Direction_Down,
  9.         Direction_MAX
  10. };

  1. enemy.cpp
  2. #include "enemy.h"
  3. #include "ghostEnemy.h"
  4. #include "utils.h"
  5. /////////////////////////////////////
  6. // Class Enemy
  7. Enemy::Enemy()
  8. {
  9.         m_type = GameObjectType_Enemy;
  10.         m_spawnTime = kEnemyEmergenceTime; //spawn - место появления spawner - моб, враг
  11.         m_spawnTimer = GetRandomFloat(0.0, m_spawnTime);
  12.         m_physical = false;
  13. }
  14. void Enemy::update(float dt)
  15. {
  16.         GameObject::update(dt);
  17.         m_spawnTimer += dt;
  18.         if (m_spawnTimer > m_spawnTime)
  19.         {
  20.                 m_spawnTimer = 0.0f;
  21.                 int enemiesOnLevel = m_game->getObjectsCount(GameObjectType_GhostEnemy);
  22.                 int enemiesStorageLeft = kEnemiesLevel - enemiesOnLevel - m_game->getDiedEnemiesCount();
  23.                 if (enemiesStorageLeft > 0 && enemiesOnLevel < kEnemiesLevelInOneMoment)
  24.                         m_game->createObject(GameObjectType_GhostEnemy, getX(), getY());
  25.         }
  26. }

  1. enemy.h
  2. #pragma once
  3. #include "gameObject.h"
  4. #include "level.h"
  5. class Enemy
  6.         : public GameObject
  7. {
  8. public:
  9.         Enemy();
  10.         virtual void update(float dt);
  11. private:
  12.         float m_spawnTimer;
  13.         float m_spawnTime;
  14. };

  1. game.cpp
  2. #include "game.h"
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include "level.h"
  8. #include "wall.h"
  9. #include
  10. #include "bullet.h"
  11. #include "ghostPlayer.h"
  12. #include "ghostEnemy.h"
  13. #include "enemy.h"
  14. sf::Texture* g_atlas00 = 0;
  15. Game::Game()
  16. {
  17.         m_isGameActive = true;
  18.         m_clockLastFrame = 0;
  19.         for (int i = 0; i < kObjectsCountMax; i++)
  20.                 m_objects[i] = 0;
  21.         m_player = 0;
  22.         m_diedEnemiesCount = 0;
  23.         m_renderWindow = 0;
  24. }
  25. Game::~Game()
  26. {
  27.         if (g_atlas00)
  28.                 delete g_atlas00;
  29.         if (m_renderWindow)
  30.                 delete m_renderWindow;
  31. }
  32. void Game::setupSystem()
  33. {
  34.         srand(time(0));
  35.         m_renderWindow = new sf::RenderWindow(
  36.                 sf::VideoMode(kPixels * kScreenColumns, kPixels * kScreenRows, 32),
  37.                 "Ghost's City",
  38.                 sf::Style::Titlebar | sf::Style::Close);
  39.         g_atlas00 = new sf::Texture();
  40.         g_atlas00->loadFromFile("atlas00.png");
  41. }
  42. void Game::initialize()
  43. {
  44.         shutdown();
  45.         m_diedEnemiesCount = 0;
  46.         // загрузка уровня
  47.         for (int r = 0; r < kLevelRows; r++)
  48.         {
  49.                 for (int c = 0; c < kLevelColumns; c++)
  50.                 {
  51.                         unsigned char cellSymbol = kLevelData0[r][c];
  52.                         switch (cellSymbol)
  53.                         {
  54.                         case CellSymbol_BrickWall:
  55.                         {
  56.                                 Wall* wall = (Wall*)createObject(GameObjectType_Wall, c, r);
  57.                                 wall->setTextureRect(kBrickWallImage);
  58.                                 break;
  59.                         }
  60.                         case CellSymbol_SteelWall:
  61.                         {
  62.                                 Wall* wall = (Wall*)createObject(GameObjectType_Wall, c, r);
  63.                                 wall->setTextureRect(kSteelWallImage);
  64.                                 wall->setInvulnerable(true);
  65.                                 break;
  66.                         }
  67.                         
  68.                         case CellSymbol_Player:
  69.                         {
  70.                                 GhostPlayer* player = (GhostPlayer*)createObject(GameObjectType_GhostPlayer, c + 0.5, r + 0.5);
  71.                                 player->setSpriteColor(sf::Color(255, 255, 255));
  72.                                 player->setKeys('A', 'D', 'W', 'S', VK_SPACE);
  73.                                 m_player = player;
  74.                                 break;
  75.                         }
  76.                         case CellSymbol_Enemy:
  77.                         {
  78.                                 createObject(GameObjectType_Enemy, c, r);
  79.                                 break;
  80.                         }
  81.                         }
  82.                 }
  83.         }
  84. }
  85. bool Game::loop()
  86. {
  87.         if (!m_renderWindow->isOpen())
  88.                 return false;
  89.         // время обновления
  90.         clock_t clockNow = clock();
  91.         clock_t deltaClock = clockNow - m_clockLastFrame;
  92.         float deltaTime = float(deltaClock) / CLOCKS_PER_SEC;
  93.         m_clockLastFrame = clockNow;
  94.     sf::Event event;
  95.         while (m_renderWindow->pollEvent(event))
  96.         {
  97.                 if (event.type == sf::Event::Closed)
  98.                         m_renderWindow->close();
  99.         }
  100.     render();
  101.         update(deltaTime);
  102.         return m_isGameActive;
  103. }
  104. void Game::shutdown()
  105. {
  106.         for (int i = 0; i < kObjectsCountMax; i++)
  107.                 if (m_objects[i] != 0)
  108.                 {
  109.                         delete m_objects[i];
  110.                         m_objects[i] = 0;
  111.                 }
  112. }
  113. void Game::render()
  114. {
  115.         // начало кадра
  116.         m_renderWindow->clear(sf::Color(20, 20, 20));
  117.         // прорисовка всех обектов
  118.         int objectsCount = 0;
  119.         for (int i = 0; i < kObjectsCountMax; i++)
  120.                 if (m_objects[i] != 0)
  121.                 {
  122.                         m_objects[i]->render(m_renderWindow);
  123.                         objectsCount++;
  124.                 }
  125.                 m_renderWindow->display();
  126. }
  127. void Game::update(float dt)
  128. {
  129.         for (int i = 0; i < kObjectsCountMax; i++)
  130.                 if (m_objects[i] != 0)
  131.                 {
  132.                         m_objects[i]->update(dt);
  133.                         if (m_objects[i]->getHealth() <= 0 && m_objects[i]->getDestroyAfterDeath())
  134.                                 destroyObject(m_objects[i]);
  135.                 }
  136.         // удаление игрока
  137.         if (m_player && m_player->getHealth() <= 0)
  138.         {
  139.                 destroyObject(m_player);
  140.                 m_player = NULL;
  141.                 initialize();
  142.         }
  143.     // удаление всех врагов
  144.         if (m_diedEnemiesCount == kEnemiesLevel) {
  145.                 m_renderWindow->clear(sf::Color(176, 196, 222));
  146.         
  147.             m_renderWindow->display();
  148.                         
  149.         }
  150. }
  151. GameObject* Game::checkIntersects(float x, float y, float width, float height, GameObject* exceptObject)
  152. {
  153.         int r00 = int(y);
  154.         int c00 = int(x);
  155.         int r01 = r00 + height - 1;
  156.         int c01 = c00 + width - 1;
  157.         for (int i = 0; i < kObjectsCountMax; i++)
  158.                 if (m_objects[i] != 0 && m_objects[i]->getPhysical() && m_objects[i] != exceptObject)
  159.                 {
  160.                         int r10 = int(m_objects[i]->getY());
  161.                         int c10 = int(m_objects[i]->getX());
  162.                         int r11 = r10 + m_objects[i]->getHeight() - 1;
  163.                         int c11 = c10 + m_objects[i]->getWidth() - 1;
  164.                         if (r00 <= r11 && r01 >= r10 && c00 <= c11 && c01 >= c10)
  165.                                 return m_objects[i];
  166.                 }
  167.         return 0;
  168. }
  169. bool Game::moveObjectTo(GameObject* object, float x, float y)
  170. {
  171.         int r0 = int(y);
  172.         int c0 = int(x);
  173.         int r1 = r0 + object->getHeight() - 1;
  174.         int c1 = c0 + object->getWidth() - 1;
  175.         if (r0 < 0 || c0 < 0 || r1 >= kLevelRows || c1 >= kLevelColumns)
  176.                 return false;
  177.         bool canMoveToCell = false;
  178.         GameObject* otherObject = checkIntersects(x, y, object->getWidth(), object->getHeight(), object);
  179.         if (otherObject)
  180.                 object->intersect(otherObject);
  181.         else
  182.                 canMoveToCell = true;
  183.         if (canMoveToCell)
  184.         {
  185.                 object->setX(x);
  186.                 object->setY(y);
  187.         }
  188.         return canMoveToCell;
  189. }
  190. int Game::getObjectsCount(GameObjectType type)
  191. {
  192.         int totalCount = 0;
  193.         for (int i = 0; i < kObjectsCountMax; i++)
  194.         {
  195.                 if (m_objects[i] == 0)
  196.                         continue;
  197.                 if (m_objects[i]->getType() == type)
  198.                         totalCount++;
  199.         }
  200.         return totalCount;
  201. }
  202. GameObject* Game::createObject(GameObjectType type, float x, float y)
  203. {
  204.         // нахождение свободного указател и осоздание объекта
  205.         for (int i = 0; i < kObjectsCountMax; i++)
  206.         {
  207.                 if (m_objects[i] == 0)
  208.                 {
  209.                         GameObject* object = 0;
  210.                         switch (type)
  211.                         {
  212.                         case GameObjectType_Wall:                        object = new Wall();                        break;
  213.                         case GameObjectType_Bullet:                        object = new Bullet();                        break;
  214.                         case GameObjectType_GhostPlayer:        object = new GhostPlayer();                break;
  215.                         case GameObjectType_GhostEnemy:                object = new GhostEnemy();                break;
  216.                         case GameObjectType_Enemy:                object = new Enemy();        break;
  217.                         }
  218.                         if (object == 0)
  219.                                 return 0;
  220.                         object->setGame(this);
  221.                         if (moveObjectTo(object, x, y) == false)
  222.                         {
  223.                                 delete object;
  224.                                 return 0;
  225.                         }
  226.                         m_objects[i] = object;
  227.                         return object;
  228.                 }
  229.         }
  230.         return 0;
  231. }
  232. void Game::destroyObject(GameObject* object)
  233. {
  234.         for (int i = 0; i < kObjectsCountMax; i++)
  235.         {
  236.                 if (m_objects[i] == object)
  237.                 {
  238.                         delete m_objects[i];
  239.                         m_objects[i] = 0;
  240.                         return;
  241.                 }
  242.         }
  243. }
  244. void Game::increaseDiedEnemiesCount()
  245. {
  246.         m_diedEnemiesCount++;
  247. }

  1. game.h
  2. #pragma once
  3. #include
  4. #include
  5. #include "gameObject.h"
  6. #include "gameObjectType.h"
  7. const int kObjectsCountMax = 1024;
  8. // предварительное объявление класса
  9. class GameObject;
  10. class Game
  11. {
  12. public:
  13.         Game();
  14.         ~Game();
  15.         void setupSystem();
  16.         void initialize();
  17.         bool loop();
  18.         void shutdown();
  19.         GameObject* createObject(GameObjectType type, float x, float y);
  20.         void destroyObject(GameObject* object);
  21.         GameObject* checkIntersects(float x, float y, float width, float height, GameObject* exceptObject);
  22.         bool moveObjectTo(GameObject* object, float x, float y);
  23.         int getObjectsCount(GameObjectType type);
  24.         int getDiedEnemiesCount() { return m_diedEnemiesCount; }
  25.         void increaseDiedEnemiesCount();
  26. private:
  27.         void render();
  28.         void update(float dt);
  29. private:
  30.         bool m_isGameActive;
  31.         clock_t m_clockLastFrame;
  32.         sf::RenderWindow* m_renderWindow;
  33.         GameObject* m_objects[kObjectsCountMax];
  34.         GameObject* m_player;
  35.         int m_diedEnemiesCount;
  36. };

  1. gameObject.cpp
  2. #include "gameObject.h"
  3. #include "level.h"
  4. GameObject::GameObject()
  5. {
  6.         m_game = 0;
  7.         m_type = GameObjectType_None;
  8.         m_x = 0.0;
  9.         m_y = 0.0;
  10.         m_xSpeed = 0.0;
  11.         m_ySpeed = 0.0;
  12.         m_width = 1;
  13.         m_height = 1;
  14.         m_health = 1;
  15.         m_destroyAfterDeath = true;
  16.         m_invulnerable = false;
  17.         m_physical = true;
  18.         m_direction = Direction_Up;
  19.         m_sprite = new sf::Sprite();
  20.         m_sprite->setTexture(*g_atlas00);
  21.         setTextureRect(sf::IntRect());
  22. }
  23. GameObject::~GameObject()
  24. {
  25.         if (m_sprite)
  26.                 delete m_sprite;
  27. }
  28. void GameObject::render(sf::RenderWindow* rw)
  29. {
  30.         if (m_sprite)
  31.         {
  32.                 int row = int(m_y);
  33.                 int column = int(m_x);
  34.                 m_sprite->setPosition(column * kPixels, row * kPixels);
  35.                 rw->draw(*m_sprite);
  36.         }
  37. }
  38. void GameObject::update(float dt)
  39. {
  40.         int oldRow = int(m_y);
  41.         int oldColumn = int(m_x);
  42.         float newY = m_y + m_ySpeed * dt;
  43.         float newX = m_x + m_xSpeed * dt;
  44.         int newRow = int(newY);
  45.         int newColumn = int(newX);
  46.         if (oldColumn != newColumn)
  47.                 m_game->moveObjectTo(this, newX, m_y);
  48.         else
  49.                 m_x = newX;
  50.         if (oldRow != newRow)
  51.                 m_game->moveObjectTo(this, m_x, newY);
  52.         else
  53.                 m_y = newY;
  54. }
  55. void GameObject::intersect(GameObject* object)
  56. {
  57. }
  58. void GameObject::doDamage(int damage)
  59. {
  60.         if (getInvulnerable())
  61.                 return;
  62.         if (m_health > damage)
  63.                 m_health -= damage;
  64.         else
  65.                 m_health = 0;
  66. }

  1. gameObject.h
  2. #pragma once
  3. #include "direction.h"
  4. #include "game.h"
  5. #include "gameObjectType.h"
  6. // педварительное объявление класса
  7. class Game;
  8. class GameObject
  9. {
  10. public:
  11.         GameObject();
  12.         virtual ~GameObject();
  13.         virtual void render(sf::RenderWindow* rw);
  14.         virtual void update(float dt);
  15.         virtual void intersect(GameObject* object);
  16.         GameObjectType getType() { return m_type; }
  17.         void setGame(Game* game) { m_game = game; }
  18.         void setX(float x) { m_x = x; }
  19.         float getX() { return m_x; }
  20.         void setY(float y) { m_y = y; }
  21.         float getY() { return m_y; }
  22.         void setXSpeed(float xSpeed) { m_xSpeed = xSpeed; }
  23.         float getXSpeed() { return m_xSpeed; }
  24.         void setYSpeed(float ySpeed) { m_ySpeed = ySpeed; }
  25.         float getYSpeed() { return m_ySpeed; }
  26.         void setWidth(int width) { m_width = width; }
  27.         int getWidth() { return m_width; }
  28.         void setHeight(int height) { m_height = height; }
  29.         int getHeight() { return m_height; }
  30.         void setHealth(int health) { m_health = health; }
  31.         int getHealth() { return m_health; }
  32.         void setDestroyAfterDeath(bool destroyAfterDeath) { m_destroyAfterDeath = destroyAfterDeath; }
  33.         bool getDestroyAfterDeath() { return m_destroyAfterDeath; }
  34.         void setInvulnerable(bool invulnerable) { m_invulnerable = invulnerable; }
  35.         bool getInvulnerable() { return m_invulnerable; }
  36.         void setPhysical(bool physical) { m_physical = physical; }
  37.         bool getPhysical() { return m_physical; }
  38.         void setDirection(Direction direction) { m_direction = direction; }
  39.         Direction getDirection() { return m_direction; }
  40.         void doDamage(int damage);
  41.         void setSpriteColor(sf::Color color) { m_sprite->setColor(color); }
  42.         void setTextureRect(sf::IntRect rect) { m_sprite->setTextureRect(rect); }
  43. protected:
  44.         Game* m_game;
  45.         GameObjectType m_type;
  46.         float m_x;
  47.         float m_y;
  48.         float m_xSpeed;
  49.         float m_ySpeed;
  50.         int m_width;
  51.         int m_height;
  52.         int m_health;
  53.         bool m_destroyAfterDeath;
  54.         bool m_invulnerable;
  55.         bool m_physical;
  56.         Direction m_direction;
  57.         sf::Sprite* m_sprite;
  58. };

  1. gameObjectType.h
  2. #pragma once
  3. enum GameObjectType
  4. {
  5.         GameObjectType_None,
  6.         GameObjectType_Ghost,
  7.         GameObjectType_GhostPlayer,
  8.         GameObjectType_GhostEnemy,
  9.         GameObjectType_Wall,
  10.         GameObjectType_Bullet,
  11.         GameObjectType_Enemy,
  12. };

  1. ghost.cpp
  2. #include "ghost.h"
  3. #include "bullet.h"
  4. Ghost::Ghost()
  5. {
  6.         m_type = GameObjectType_Ghost;
  7.         m_width = kGhostSize;
  8.         m_height = kGhostSize;
  9.         m_speed = 0;
  10.         m_recoveryTime = 0.0;
  11. }
  12. void Ghost::update(float dt)
  13. {
  14.         GameObject::update(dt);
  15.         if (m_recoveryTime > 0)
  16.                 m_recoveryTime -= dt;
  17. }
  18. void Ghost::render(sf::RenderWindow* rw)
  19. {
  20.         sf::IntRect texRect = kGhostImage;
  21.         texRect.left += m_width * kPixels * m_direction;
  22.         setTextureRect(texRect);
  23.         GameObject::render(rw);
  24. }
  25. void Ghost::move(Direction direction)
  26. {
  27.         setDirection(direction);
  28.         setXSpeed(0);
  29.         setYSpeed(0);
  30.         switch (m_direction)
  31.         {
  32.         case Direction_Left: setXSpeed(-m_speed); break;
  33.         case Direction_Right: setXSpeed(m_speed); break;
  34.         case Direction_Up: setYSpeed(-m_speed); break;
  35.         case Direction_Down: setYSpeed(m_speed); break;
  36.         }
  37. }
  38. void Ghost::fire()
  39. {
  40.         if (m_recoveryTime > 0)
  41.                 return;
  42.         m_recoveryTime = kGhostRecoveryTime;
  43.         float x = 0.0;
  44.         float y = 0.0;
  45.         float xSpeed = 0.0;
  46.         float ySpeed = 0.0;
  47.         calculateFrontCellPosition(&x, &y);
  48.         switch (m_direction)
  49.         {
  50.         case Direction_Left: xSpeed = -kBulletSpeed; break;
  51.         case Direction_Right: xSpeed = kBulletSpeed; break;
  52.         case Direction_Up: ySpeed = -kBulletSpeed; break;
  53.         case Direction_Down: ySpeed = kBulletSpeed; break;
  54.         }
  55.         Bullet* bullet = (Bullet*)m_game->createObject(GameObjectType_Bullet, x, y);
  56.         if (bullet)
  57.         {
  58.                 bullet->setOwnerType(m_type);
  59.                 bullet->setXSpeed(xSpeed);
  60.                 bullet->setYSpeed(ySpeed);
  61.         }
  62. }
  63. void Ghost::calculateFrontCellPosition(float* x, float* y)
  64. {
  65.         switch (m_direction)
  66.         {
  67.         case Direction_Left:
  68.                 (*x) = int(getX()) - 0.01;
  69.                 (*y) = int(getY()) + (getHeight() / 2.0);
  70.                 break;
  71.         case Direction_Right:
  72.                 (*x) = int(getX()) + getWidth() + 0.01;
  73.                 (*y) = int(getY()) + (getHeight() / 2.0);
  74.                 break;
  75.         case Direction_Up:
  76.                 (*y) = int(getY()) - 0.01;
  77.                 (*x) = int(getX()) + (getWidth() / 2.0);
  78.                 break;
  79.         case Direction_Down:
  80.                 (*y) = int(getY()) + getHeight() + 0.01;
  81.                 (*x) = int(getX()) + (getWidth() / 2.0);
  82.                 break;
  83.         }
  84. }

  1. ghost.h
  2. #pragma once
  3. #include "gameObject.h"
  4. #include "level.h"
  5. class Ghost
  6.         : public GameObject
  7. {
  8. public:
  9.         Ghost();
  10.         virtual void update(float dt);
  11.         virtual void render(sf::RenderWindow* rw);
  12.         void move(Direction direction);
  13.         void fire();
  14. protected:
  15.         void calculateFrontCellPosition(float* x, float* y);
  16. protected:
  17.         float m_recoveryTime;
  18.         float m_speed;
  19. };

  1. ghostEnemy.cpp
  2. #include "ghostEnemy.h"
  3. #include "utils.h"
  4. #include "wall.h"
  5. #include "bullet.h"
  6. GhostEnemy::GhostEnemy()
  7. {
  8.         m_type = GameObjectType_GhostEnemy;
  9.         m_analizeTime = kEnemyAIAnalizeTime;
  10.         m_analizeTimer = GetRandomFloat(0.0, m_analizeTime);
  11.         m_lastAnalizeX = 0.0;
  12.         m_lastAnalizeY = 0.0;
  13.         m_health = kEnemyHealth;
  14.         m_speed = kEnemySpeed;
  15.         setSpriteColor(sf::Color(0, 165, 226));
  16. }
  17. GhostEnemy::~GhostEnemy()
  18. {
  19.         m_game->increaseDiedEnemiesCount();
  20. }
  21. void GhostEnemy::update(float dt)
  22. {
  23.         Ghost::update(dt);
  24.         m_analizeTimer += dt;
  25.         if (m_analizeTimer >= m_analizeTime)
  26.         {
  27.                 m_analizeTimer = 0;
  28.                 analize();
  29.         }
  30. }
  31. void GhostEnemy::analize()
  32. {
  33.         float x = 0.0;
  34.         float y = 0.0;
  35.         calculateFrontCellPosition(&x, &y);
  36.         float xDelta = 0.0;
  37.         float yDelta = 0.0;
  38.         switch (m_direction)
  39.         {
  40.         case Direction_Left: xDelta = -1.0; break;
  41.         case Direction_Right: xDelta = 1.0; break;
  42.         case Direction_Up: yDelta = -1.0; break;
  43.         case Direction_Down: yDelta = 1.0; break;
  44.         }
  45.         // находит ближайшего врага и расстояние к нему
  46.         GameObject* object = 0;
  47.         int distance = 0;
  48.         do
  49.         {
  50.                 object = m_game->checkIntersects(x, y, 1, 1, 0);
  51.                 x += xDelta;
  52.                 y += yDelta;
  53.                 ++distance;
  54.         } while (object == 0);
  55.         // защита от пуль
  56.         if (object->getType() == GameObjectType_Bullet)
  57.         {
  58.                 if (((Bullet*)object)->getOwnerType() == GameObjectType_GhostPlayer)
  59.                         fire();
  60.                 return;
  61.         }
  62.         // атака
  63.         if (object->getType() == GameObjectType_GhostPlayer)
  64.         {
  65.                 fire();
  66.                 return;
  67.         }
  68.         // 20% смена направления
  69.         if (0 == rand() % 5)
  70.         {
  71.                 // движение в случайном направлении
  72.                 moveRandomDirection();
  73.                 return;
  74.         }
  75.         switch (object->getType())
  76.         {
  77.         case GameObjectType_Wall:
  78.                 if (((Wall*)object)->getInvulnerable() == false)
  79.                 {
  80.                         fire();
  81.                         return;
  82.                 }
  83.                 break;
  84.         }
  85.         // смена направления
  86.         if (distance == 1
  87.                 || ((int)m_lastAnalizeX == (int)getX() && (int)m_lastAnalizeY == (int)getY()))
  88.         {
  89.                 // движение в случайном направлении
  90.                 moveRandomDirection();
  91.                 return;
  92.         }
  93.         m_lastAnalizeX = getX();
  94.         m_lastAnalizeY = getY();
  95. }
  96. void GhostEnemy::moveRandomDirection()
  97. {
  98.         Direction prevDirection = getDirection();
  99.         Direction newDirection;
  100.         do
  101.         {
  102.                 newDirection = (Direction)(rand() % ((int)Direction_MAX));
  103.         } while (prevDirection == newDirection);
  104.         move(newDirection);
  105. }

  1. ghostEnemy.h
  2. #pragma once
  3. #include "ghost.h"
  4. class GhostEnemy
  5.         : public Ghost
  6. {
  7. public:
  8.         GhostEnemy();
  9.         ~GhostEnemy();
  10.         void update(float dt);
  11. protected:
  12.         void analize();
  13.         void moveRandomDirection();
  14. protected:
  15.         float m_analizeTimer;
  16.         float m_analizeTime;
  17.         float m_lastAnalizeX;
  18.         float m_lastAnalizeY;
  19. };

  1. ghostPlayer.cpp
  2. #include "ghostPlayer.h"
  3. #include "utils.h"
  4. GhostPlayer::GhostPlayer()
  5. {
  6.         m_type = GameObjectType_GhostPlayer;
  7.         m_keyLeft = 0;
  8.         m_keyRight = 0;
  9.         m_keyUp = 0;
  10.         m_keyDown = 0;
  11.         m_keyFire = 0;
  12.         m_health = kPlayerHealth;
  13.         m_speed = kPlayerSpeed;
  14.         m_destroyAfterDeath = false;
  15. }
  16. void GhostPlayer::update(float dt)
  17. {
  18.         Ghost::update(dt);
  19.         if (IsKeyDown(m_keyLeft))
  20.                 move(Direction_Left);
  21.         else
  22.                 if (IsKeyDown(m_keyRight))
  23.                         move(Direction_Right);
  24.                 else
  25.                         if (IsKeyDown(m_keyUp))
  26.                                 move(Direction_Up);
  27.                         else
  28.                                 if (IsKeyDown(m_keyDown))
  29.                                         move(Direction_Down);
  30.                                 else
  31.                                 {
  32.                                         setXSpeed(0);
  33.                                         setYSpeed(0);
  34.                                 }
  35.         if (IsKeyDown(m_keyFire))
  36.                 fire();
  37. }
  38. void GhostPlayer::setKeys(int keyLeft, int keyRight, int keyUp, int keyDown, int keyFire)
  39. {
  40.         m_keyLeft = keyLeft;
  41.         m_keyRight = keyRight;
  42.         m_keyUp = keyUp;
  43.         m_keyDown = keyDown;
  44.         m_keyFire = keyFire;
  45. }

  1. ghostPlayer.h
  2. #pragma once
  3. #include "ghost.h"
  4. class GhostPlayer
  5.         : public Ghost
  6. {
  7. public:
  8.         GhostPlayer();
  9.         void update(float dt);
  10.         void setKeys(int keyLeft, int keyRight, int keyUp, int keyDown, int keyFire);
  11. protected:
  12.         int m_keyLeft;
  13.         int m_keyRight;
  14.         int m_keyUp;
  15.         int m_keyDown;
  16.         int m_keyFire;
  17. };

  1. level.h
  2. #include
  3. #include "direction.h"
  4. // внешнее
  5. extern sf::Texture* g_atlas00;
  6. // данные уровеня
  7. const int kScreenRows = 40;
  8. const int kScreenColumns = 80;
  9. const int kLevelRows = kScreenRows;
  10. const int kLevelColumns = 70;
  11. const int kPixels = 15;  
  12. const unsigned char        CellSymbol_Player = '1';
  13. const unsigned char        CellSymbol_Ghost = 'T';
  14. const unsigned char        CellSymbol_BrickWall = '#';
  15. const unsigned char        CellSymbol_SteelWall = '@';
  16. const unsigned char        CellSymbol_Enemy = 'S';
  17. const unsigned char kLevelData0[kLevelRows][kLevelColumns + 1] =
  18. {
  19.         "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
  20.         "@S                                                                     @@                                                        S       @",
  21.         "@                                                                       @@                                                                 @",
  22.         "@                                                                       @@                                                                 @",
  23.         "@                                                                                           S           @@@@                         @",
  24.         "@                                                                                                        @                                    @",
  25.         "@                                                                                                        @                                    @",
  26.         "@@@@@@@@@@@@@@@@                                                 @                                    @",
  27.         "@                                                @                                                     @                                    @",
  28.         "@                                                @                                                     @                                    @",
  29.         "@                                                @                                                        @@@@@@               @",
  30.         "@                                                @                                                                                             @",
  31.         "@                                                 @@@@@                                                                             @",
  32.         "@                                        @                                                                                                     @",
  33.         "@                                        @                                                                                                     @",
  34.         "@                                        @                           @@@@@@@@@@@@@@@@@@@@@",
  35.         "@   S                                       @                                                          @                                  @",
  36.         "@                                            @                                                            @                                @",
  37.         "@                                            @                                          @                  @                            @",
  38.         "@@@@@@@@@@@@@@@@                       @        @                  @                            @",
  39.         "@                                                                              @                              @                            @",
  40.         "@                                                                              @                               @                           @",
  41.         "@                                                           @@@@@@                                 @@@@              @",
  42.         "@                                                           @                                                           @@              @",
  43.         "@                                                           @                                                                                @",
  44.         "@                                                           @                                                                  S            @",
  45.         "@@@@@@@@@@@@@@@@@@                         @@                                                @",
  46.         "@             @                                                                     @@                                                  @",
  47.         "@         1   @                                                                   @@                                                   @",
  48.         "@             @                                                                  @@               @@@                           @",
  49.         "@                                                                                 @@                @@@                            @",
  50.         "@                                                                               @@                @                                     @",
  51.         "@                                                                             @@                 @                                      @",
  52.         "@                                                                            @@                 @                                       @",
  53.         "@             @                                                         @@                   @                                       @",
  54.         "@             @                                                        @@                    @                                       @",
  55.         "@             @                                                     @@                   @                                           @",
  56.         "@             @                                                     @                      @                                            @",
  57.         "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
  58. };
  59. const sf::IntRect kBrickWallImage = sf::IntRect(0, 3 * kPixels, kPixels, kPixels);
  60. const sf::IntRect kSteelWallImage = sf::IntRect(kPixels, 3 * kPixels, kPixels, kPixels);
  61. // данные призрака
  62. const float kGhostRecoveryTime = 0.5; //FireCooldown воссстановление
  63. const int kGhostSize = 3; //размер призрака
  64. const sf::IntRect kGhostImage = sf::IntRect(0, 0, kGhostSize*kPixels, kGhostSize*kPixels);
  65. // данные игрока
  66. const int kPlayerHealth = 16; //здоровье
  67. const int kPlayerSpeed = 10; //скорость
  68. // данные врага
  69. const int kEnemiesLevel = 10;  //количество врагов    
  70. const int kEnemiesLevelInOneMoment = 6; //масимальное кооличество врагов в один момент  
  71. const int kEnemyHealth = 5; //здоровье врага
  72. const int kEnemySpeed = 5;  //скорость врагов
  73. const float kEnemyEmergenceTime = 10.0; // востанновление
  74. const float kEnemyAIAnalizeTime = 0.5;
  75. // данные пули
  76. const float kBulletSpeed = 30.0;
  77. const sf::IntRect kBulletImage = sf::IntRect(0, 4 * kPixels, kPixels, kPixels);

  1. main.cpp
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #include "game.h"
  4. #include
  5. // Чтобы убрать коносль в релизе
  6. #ifndef _DEBUG
  7. #        pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
  8. #endif
  9. int main()
  10. {
  11.         Game game;
  12.         game.setupSystem();
  13.         game.initialize();
  14.         
  15.         while (game.loop());
  16.         game.shutdown();
  17.         return 0;
  18. }

  1. utils.cpp
  2. #include "utils.h"
  3. #include
  4. bool IsKeyDown(int virtualKeyCode)
  5. {
  6.         short keyState = GetAsyncKeyState(virtualKeyCode);
  7.         return ((keyState & 0x8000) > 0);
  8. }
  9. int GetRandomInt(int min, int max)
  10. {
  11.         return min + rand() % (max - min + 1);
  12. }
  13. float GetRandomFloat(float min, float max)
  14. {
  15.         return (min + (max - min) * (rand() % 101 / 100.0));
  16. }

  1. utils.h
  2. #pragma once
  3. bool IsKeyDown(int virtualKeyCode);
  4. int GetRandomInt(int min, int max);
  5. float GetRandomFloat(float min, float max);

  1. wall.cpp
  2. #include "wall.h"
  3. Wall::Wall()
  4. {
  5.         m_type = GameObjectType_Wall;
  6. }
  7. void Wall::render(sf::RenderWindow* rw)
  8. {
  9.         GameObject::render(rw);
  10. }

  1. wall.h
  2. #pragma once
  3. #include "gameObject.h"
  4. #include "level.h"
  5. class Wall
  6.         : public GameObject
  7. {
  8. public:
  9.         Wall();
  10.         virtual void render(sf::RenderWindow* rw);
  11. private:
  12. };
  13. 3.2 Результаты тестирования
  14. Рисунок 1 — Запуск игры «Ghost’s city», призрак не стреляет[pic 1]
  15. Рисунок 2 — Запуск игры «Ghost’s city», призрак стреляет[pic 2]

  1. МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
  1. федеральное государственное автономное образовательное учреждение
    высшего профессионального образования
  1. «Санкт-Петербургский государственный университет
    аэрокосмического приборостроения»

  1. КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
  1. ПРОГРАММА
  1. Игра «Ghost’s city»
  1. Описание программы
  1. 44.4642.17-13
  1. РАБОТУ ВЫПОЛНИЛ
  1. СТУДЕНТ ГР.
  1. 4642
  1. Ю.Л.Ляпина
  1. подпись, дата
  1. инициалы, фамилия
  1. Санкт-Петербург
  2. 2017
  3. Аннотация
  4.  В документе приведены общие сведения  о  программе. Приведено общее описание функционирования программы , общие сведения о языке программирования. Описаны входные  и выходные данные, логика работы программы, даны сведения об используемых технических средствах.  

  1. Содержание
  2. 4.1 Общие сведения
  3. 4.2 Функциональное назначение
  4. 4.3 Описание логической структуры
  5. 4.4 Спецификация подпрограммы
  6. 4.5 Используемые технические средствах
  7. 4.6  Вызов и загрузка

  1. 4.1 Общие сведения
  2. Программа написана на языке С++  совместно с SFML, состоит из игрового окна и окна завершения. Программа «Ghost’s city» - предназначенная для одного пользователя. Суть программы убить всех своих врагов-призраков и выжить самому. От пользователя требуется наличие клавиатуры.
  3. 4.2 Функциональное назначение
  4. С помощью данной программы пользователь может хорошо провести время. Может повысить свои навыки ловкости.
  5. 4.3 Описание логической структуры
  6. Программа написана на языке С++  совместно с SFML. При открытии программы появляется окно с игровым полем, значит игра уже началась. После проигрыша ( смерть игрока-призрака ) игра автоматически перезапускается, после выигрыша — остается один игрок-призрак и экран начинает мигать синим цветом.
  7. Управление для пользователя:
  8. - W - движение вверх
  9. - A  - движение влево
  10. - S  - движение вниз
  11. - D  - движение вправо
  12. - SPACE ( клавиша «пробел») - выстрел
  13. 4.4 Спецификация подпрограммы
  14. 4.4.1 Функция initialize
  15. Назначение: задание начальных значений для логики игры (используется с классом Game)
  16. Имя: initialize
  17. Заголовок: void initialize(); void Game::initialize();
  18. 4.4.2 Функция loop
  19. Назначение: вычисление значения fps ( FramesTimeCounter)
  20. Имя: loop
  21. Заголовок: bool loop();bool Game::loop();
  22. 4.4.3 Функция main
  23. Назначение:  главная функция
  24. Имя: main
  25. Заголовок:  int main()
  26. 4.4.4 Функция render
  27. Назначение: осуществление гафического вывода основного цикла игры на экран (используется с классами: Game, Enemy,  Ghost, Bullet:, Wall,  GameObject)
  28. Имя: render
  29. Заголовок: void Wall::render(sf::RenderWindow* rw)
  30. 4.4.5 Функция update
  31. Назначение: алгоритм управления (используется с классами: Game, Enemy,  GameObject, Ghost,  GhostEnemy, GhostPlayer)
  32. Имя:  update
  33. Заголовок: void  update ( float dt);
  34. 4.4.6 Функция  IsKeyDown
  35. Назначение: проверка нажатия клавиши
  36. Имя: IsKeyDown
  37. Заголовок: bool IsKeyDown(int virtualKeyCode)
  38. 4.4.7 Функция setupSystem
  39. Назначение: действия насчет единоразовых настроек системы.Задание зерна генератору псевдослучайных чисел.
  40. Имя: setupSystem
  41. Заголовок: void setupSystem(); void Game::setupSystem();
  42. 4.4.8 Функция increaseDiedEnemiesCount
  43. Назначение:
  44. Имя:  increaseDiedEnemiesCount
  45. Заголовок: void Game::increaseDiedEnemiesCount();
  46. 4.4.9 Функция  destroyGameObject
  47. Назначение: удаление игрового объекта
  48. Имя: destroyGameObject
  49. Заголовок:  void Game::destroyObject(GameObject* object)
  50. 4.4.10 Функция getObjectsCount
  51. Назначение: подсчитывает количество объектов
  52. Имя: getObjectsCount
  53. Заголовок: int Game::getObjectsCount(GameObjectType type)
  54. 4.4.11 Функция moveObjectTo
  55. Назначение:  движение объектом
  56. Имя: moveObjectTo
  57. Заголовок: bool Game::moveObjectTo(GameObject* object, float x, float y)
  58. 4.4.12 Функция  intersect
  59. Назначение:  информаирование объекта, что он столкнулся с другим объектом. Также при столкновении наносит 1 единицу урона
  60. Имя: intersect
  61. Заголовок:  void Bullet::intersect(GameObject* object)
  62. 4.4.13 Функция  doDamage
  63. Назначение: нанесение урона
  64. Имя:  doDamage
  65. Заголовок: void GameObject::doDamage(int damage)
  66. 4.4.14 Функция move
  67. Назначение: движение
  68. Имя: move
  69. Заголовок: void Ghost::move(Direction direction)
  70. 4.4.15 Функция fire
  71. Назначение:  атака
  72. Имя: fire
  73. Заголовок:  void Ghost::fire()
  74. 4.4.16 Функция  calculateFrontCellPosition
  75. Назначение: возвращает координаты ячейки перед пистолетом призрака
  76. Имя:  calculateFrontCellPosition
  77. Заголовок:  void Ghost::calculateFrontCellPosition(float* x, float* y)
  78. 4.4.17 Функция  moveRandomDirection
  79. Назначение: движение в случайном направлении
  80. Имя:  moveRandomDirection
  81. Заголовок:  void GhostEnemy::moveRandomDirection()
  82. 4.4.18 Функция  analize
  83. Назначение: совершает анализ и выбирает какое действие ему совершить
  84. Имя:  analize
  85. Заголовок:  void GhostEnemy::analize()
  86. 4.4.19 Функция  setKeys
  87. Назначение: принимает значение нажатой клавиши
  88. Имя:  setKeys
  89. Заголовок:  void GhostPlayer::setKeys(int keyLeft, int keyRight, int keyUp, int keyDown, int keyFire)
  90. 4.4.20 Функция shutdown
  91. Назначение: задержка выполнения программы, по окончанию игры
  92. Имя: shutdown
  93. Заголовок: void Game::shutdown()
  94. 4.4.21 Функция  GetRandomFloat
  95. Назначение: дает случайное значение вещественного типа
  96. Имя:  GetRandomFloat
  97. Заголовок:  float GetRandomFloat(float min, float max)
  98. 4.4.22 Функция GetRandomInt
  99. Назначение: дает случайное значение целого типа
  100. Имя: GetRandomInt
  101. Заголовок:  int GetRandomInt(int min, int max)
  102. 4.5 Используемые технические средствах
  103. Для адекватного функционировании программы необходимо наличие ПК с ОС windows 7 и выше, необходимо наличие клавиатуры.
  104. 4.6  Вызов и загрузка
  105. Вызов  и загрузка программы осуществляется в следующей последовательности: нахождение файла программы «Ghost’s city.exe», запуск исполняемого файла, ожидание открытия программы.

  1. МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
  1. федеральное государственное автономное образовательное учреждение
    высшего профессионального образования
  1. «Санкт-Петербургский государственный университет
    аэрокосмического приборостроения»

  1. КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
  1. ПРОГРАММА
  1. Игра «Ghost’s city»
  1. Описание применения
  1. 44.4642.17-31
  1. РАБОТУ ВЫПОЛНИЛ
  1. СТУДЕНТ ГР.
  1. 4642
  1. Ю.Л.Ляпина
  1. подпись, дата
  1. инициалы, фамилия
  1. Санкт-Петербург
  2. 2017
  3. Аннотация
  4. В документе приводятся назначение программы , ее основные характеристики  и область применения. Приводятся общие  характеристики входной и выходной информации.

  1. Содержание
  2. 5.1 Назначение программы
  3. 5.2 Условия применения
  4. 5.3 Описание задачи
  5. 5.4 Характеристики

  1. 5.1 Назначение программы
  2. Программа «Ghost’s city»  предназначена для развлекательных целей.
  3. 5.2 Условия применения
  4. Программа написана на языке С++ , совмещенная с библиотекой SFML. Для адекватного функционировании программы необходимо наличие ПК с ОС windows 7 и выше, необходимо наличие клавиатуры. Для запуска программы также необходимо: нахождение файла программы «Ghost’s city.exe», запуск исполняемого файла, ожидание открытия программы.
  5. 5.3 Описание задачи
  6. Разработать программу, дающую возможность расслабиться и отдохнуть после тяжелого дня в игре «Ghost’s city».
  7. 5.4 Характеристики
  8. Файл «Ghost’s city.exe» - 552 КБ
  9. Файлы классов и библиотек — 105 МБ (из этого обычные С++ библиотеки, без библиотеки SFML, весят 35,8 КБ)
  10. Изображение (спрайты) — 23 КБ

  1. ЗАКЛЮЧЕНИЕ
  2. В данной курсовой работе реализована программа «Ghost’s city».
  3. В процессе работы над курсовым проектом были закреплены навыки программирования на языке С++ с подключением библиотеки SFML в среде Visual Studio.
  4. Получены умения по документированию программного обеспечения, согласно принятым государственным стандартам.

  1. СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
  2. 1. ГОСТ 19.701-90 Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения.
  3. 2. Курсы создания компьютерных игр на C/C++ [Электронный ресурс]. - Режим доступа: https://pikabu.ru/story/kursyi_sozdaniya_kompyuternyikh_igr_na_cc__chast_10__3848892, свободный.
  4. 3.Курсы создания компьютерных игр на SFML [Электронный ресурс]. - Режим доступа: http://kychka-pc.ru/category/sfml, свободный
  5. 4. Практический курс программирования на Си, автор К. Поляков [Электронный ресурс] -  Режим доступа:  http://kpolyakov.spb.ru/school/c.htm, свободный

...

Скачать:   txt (96.2 Kb)   pdf (364 Kb)   docx (132.7 Kb)  
Продолжить читать еще 208 страниц(ы) »
Доступно только на Essays.club