Объектно ориентированное программирование. Простая игра

Автор работы: Пользователь скрыл имя, 24 Февраля 2013 в 05:40, курсовая работа

Описание

В качестве курсовой работы по объектно-ориентированному программированию было предложено написать простую игру. Основные требования к программе:
1. Наличие не менее десяти различных классов
2. Наличие различных типов связей между классами – наследование, агрегация и т.д.
3. Взаимодействие между классами в реальном времени.

Содержание

1. Постановка задачи 4
2. Список классов 5
2.1 Класс Object 5
2.2 Класс ObjectList 5
2.3 Класс Game 5
2.4 Класс Player 5
2.5 Класс Enemy 5
2.6 Класс Boss 5
2.7 Класс Bullet 5
2.8 Класс Sp_Bull 5
2.9 Класс Explosion 5
2.10 Класс Life 5
2.11 Класс Defense 6
3. Диаграмма классов 7
4. Описание классов. 8
4.1 Класс Object 8
4.1.1 Атрибуты класса 8
4.1.2 Методы класса 8
4.2 Класс ObjectList. 9
4.2.1 Атрибуты класса 9
4.2.2 Методы класса 9
4.3 Класс Game 9
4.3.1 Атрибуты класса 10
4.3.2 Методы класса 10
4.4 Класс Player 10
4.4.1 Атрибуты класса 10
4.4.2 Методы класса 11
4.5 Класс Enemy 11
4.5.1 Атрибуты класса 11
4.5.2 Методы класса 11
4.6 Класс Boss 11
4.6.1 Атрибуты класса 11
4.6.2 Методы класса 12
4.7 Класс Bullet 12
4.7.1 Атрибуты класса 12
4.7.2 Методы класса 12
4.8 Класс Sp_Bull 12
4.8.1 Атрибуты класса 12
4.8.2 Методы класса 12
4.9 Класс Explosion 13
4.9.1 Атрибуты класса 13
4.9.2 Методы класса 13
4.10 Класс Life 13
4.10.1 Атрибуты класса 13
4.10.2 Методы класса 13
4.11 Класс Defense 13
4.11.1 Атрибуты класса 13
4.11.2 Методы класса 14
5. Программная реализация классов 15
5.1 Реализация абстрактного класса Object. 15
5.2 Реализация класса ObjectList 15
5.3 Реализация класса Game 17
5.4 Реализация класса Player 18
5.5 Реализация класса Enemy 20
5.6 Реализация класса Boss 22
6. Основной модуль
7. Заключение

Работа состоит из  1 файл

КУРСОВАЯ.doc

— 526.00 Кб (Скачать документ)

ФЕДЕРАЛЬНОЕ АГЕНТСТВО  ПО ОБРАЗОВАНИЮ

 

Государственное образовательное учреждение

высшего профессионального образования

«Тихоокеанский государственный  университет»

Кафедра 
ПО ВТ и АС

Объектно-ориентированное программирование. 
Курсовая работа. 
060620080

Выполнила: студентка группы ПО-62 Разуваева Н.В.

Проверил: Пустынский И.С.

г. Хабаровск, 2008

Оглавление

 

1. Постановка задачи и описание программы

В качестве курсовой работы по объектно-ориентированному программированию было предложено написать простую игру. Основные требования к программе:

  1. Наличие не менее десяти различных классов
  2. Наличие различных типов связей между классами – наследование, агрегация и т.д.
  3. Взаимодействие между классами в реальном времени.

Описываемая ниже программа представляет собой игру под названием  Space Shooter. В игре космический корабль под управлением игрока отстреливается от космических кораблей противника. Противники делятся на простых врагов, наносящих урон в одну жизнь и погибающих с первого попадания, и боссов, которые обладают большим количеством жизней и наносят больший урон. Так же в игре существуют разрушаемые препятствия.

Передвижение в игре производится клавишами вверх, вниз, влево и  вправо. По нажатию пробела корабль игрока стреляет обычными пулями. По нажатию клавиши Right Alt производится выстрел улучшенными пулями, наносящими больший урон.

Внешний вид игры

Для реализации графической составляющей игры была использована библиотека SDL - Simple DirectMedia Layer. Это библиотека, которая обеспечивает низкоуровневый доступ к буферу видео, аудио выходу, мыши, клавиатуре и т.д. для большого количества операционных систем.

 

2. Список классов

2.1 Класс Object

Русское название класса – Объект. Является базовым классом для всех классов, имеющих визуальное отображение на экране. Объявление класса находится в Object.h, реализация класса находится в Object.cpp.

2.2 Класс ObjectList

Русское название – Список Объектов. Хранит в виде списка все визуально  отображаемые объекты, существующие в данные момент, и помогает реализовать взаимодействие между ними. Объявление класса находится в ObjectList.h, реализация класса находится в ObjectList.cpp.

2.3 Класс Game

Русское название Игра. Служит для  реализации графического интерфейса игры. Хранит в себе параметры окна, изображения для визуальных объектов и т.д. Объявление класса находится в Game.h, реализация класса находится в Game.cpp.

2.4 Класс Player

Русское название класса – Игрок. Класс, представляющий корабль, которым управляет игрок. Наследник класса Object. Объявление класса находится в Player .h, реализация класса находится в Player.cpp.

2.5 Класс Enemy

Русское название класса – Противник. Класс, представляющий собой корабль-противник. Наследник класса Object. Объявление класса находится в Enemy.h, реализация класса находится в Enemy.cpp.

2.6 Класс Boss

Русское название класса – Босс. Класс, представляющий собой усиленный корабль противника. Наследник класса Enemy. Объявление класса находится в Boss.h, реализация класса находится в Boss.cpp.

2.7 Класс Bullet

Русское название класса – Пуля. Наносит урон объектам, находящимся на уровне. Наследник класса Object. Объявление класса находится в Bullet.h, реализация класса находится в Bullet.cpp.

2.8 Класс Sp_Bull

Русское название класса – Улучшенная пуля. Наследник класса Bullet. Обладает повышенным уроном. Объявление класса находится в Sp_Bull.h, реализация класса находится в Sp_Bull.cpp.

2.9 Класс Explosion

Русское название класса – Взрыв. Служит для графического отображения взрывов при столкновении объектов и их уничтожении. Объявление класса находится в Explosion.h, реализация класса находится в Explosion.cpp.

2.10 Класс Life

Русское название класса – Жизнь. Класс, представляющий собой бонус, добавляющий жизни игроку. Объявление класса находится в Life.h, реализация класса находится в Life.cpp.

2.11 Класс Defense

Русское название – Препятствие. Объявление класса находится в Defense.h, реализация класса находится в Defense.cpp. 

3. Диаграмма классов

Диаграмма классов, используемых в курсовой работе

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. Описание классов.

4.1 Класс Object

class Object 

{

protected: 

SDL_Rect clip[ 8 ];

bool   bAnim

bool   bDie

int   Counter

SDL_Surface* nsSurface;

Game* pGame; 

public: 

SDL_Rect box;

int   Frame, xVel, yVel;

Object() {}

void Init(int x, int y, int width, int height);

void Kill() { bDie = true; }

bool Collision(Object* pObject);

virtual int GetType() = 0;

virtual void Process(Object* pObject) = 0;

virtual bool Move() = 0;

void Blit();

virtual ~Object() {}

};

4.1.1 Атрибуты класса

    1. SDL_Rect box – окружающий объект прямоугольник.
    2. bool bAnim – логическая переменная, принмающая 1, если объект движущийся и 0, если нет.
    3. bool bDie – логичекая переменная, принимающая 0, если объект не погиб, и 1 в противном случае.
    4. int Counter – счетчик для кадр ов.
    5. int Frame – текущий кадр изображения объекта.
    6. int xVel – скорость объекта по оси X/
    7. int yVel – скорость объекта по оси Y/
    8. SDL_Rect clip[ 8 ] – массив прямоугольников для вычленения изображений из спрайтовой таблицы.
    9. SDL_Surface* nsSurface – ссылка на объект типа SDL_Surface (встроенный класс библиотеки SDL для работы с графикой), хранящий изображение объекта.
    10. Game* pGame – ссылка на объект класса Game.

4.1.2 Методы класса

    1. Object() {} – пустой конструктор.
    2. void Init(int x, int y, int width, int height) – инициализирует основные атрибуты класса – координаты, высоту и ширину прямоугольника box.
    3. void Kill() – «убивает» объект.
    4. bool Collision(Object* pObject) – проверят не столконулись ли объекты.

virtual int GetType() – виртуальная функция, возвращающая тип объекта. Тип объекта может быть следующим: OBJECTTYPE_PLAYER, OBJECTTYPE_BULLET, OBJECTTYPE_EXPLOSION, OBJECTTYPE_ENEMY, OBJECTTYPE_DEFENCE, OBJECTTYPE_BONUS, OBJECTTYPE_SBULL, OBJECTTYPE_BOSS, OBJECTTYPE_LIFE.

    1. void Process(Object* pObject) – виртуальная функция, обеспецивающая взаимодействие между объектами.
    2. virtual bool Move() – виртуальная функция, реализующая передвижение объектов.
    3. void Blit() – функция, реализующая визуальное отображение объекта.
    4. virtual ~Object() {} – деструктор.

4.2 Класс ObjectList.

class ObjectList 

{

private:

Game* pGame;

public:

OBJECTLIST Objects;

ObjectList(Game* game);

void AddObject(Object* pObject);

void BlitObjects();

void ProcessObjects();

virtual ~ObjectList();

};

Класс использует стандартный класс list, посволяющий работать со списками.

typedef std::list<POBJECT> OBJECTLIST;

4.2.1 Атрибуты класса

    1. Game* pGame – ссылка на объект класса Game.
    2. OBJECTLIST Objects – список объктов класса Object.

4.2.2 Методы класса

    1. void AddObject(Object* pObject) – добавляет объект pObject к списку.
    2. void BlitObjects() – функция, реализующая отображение всех объектов, хранящихся в списке.
    3. void ProcessObjects() – функция, реализующая взаимодействие между объектами в списке.
    4. virtual ~ObjectList() – деструктор класса.

4.3 Класс Game

class Game 

{

public:

SDL_Rect camera;

SDL_Surface* nsPlayer;

SDL_Surface* nsEnemy;

SDL_Surface* nsBullet;

SDL_Surface* nsExplosion;

SDL_Surface* nsLive;

SDL_Surface* nsDefence;

SDL_Surface* nsSpBull;

SDL_Surface* nsGameOver;

SDL_Surface* backgr;

SDL_Surface* nsBoss;

SDL_Surface* nsSb;

SDL_Surface* nsLifeBonus;

int NumLives;

SDL_Event event;

SDL_Surface* screen;

Game();

void MoveCam(int y);

void FlipScreen();

void ClearScreen();

void DrawStatus();

bool IsGameOver() { return (NumLives == 0);}

virtual ~Game();

};

4.3.1 Атрибуты класса

    1. SDL_Surface* nsPlayer – поверхность с изображением игрока.
    2. SDL_Surface* nsEnemy – поверхность с изображением врага.
    3. SDL_Surface* nsBullet – поверхность с изображением пули.
    4. SDL_Surface* nsExplosion – поверхность с изображением взрыва.
    5. SDL_Surface* nsLive – поверхность с изображением жизни для интерфейса.
    6. SDL_Surface* nsDefence – поверхность с изображением препятствия.
    7. SDL_Surface* nsSpBull – поверхность с изображением улучшенной пули.
    8. SDL_Surface* nsGameOver – поверхность с сообщением о проигрыше.
    9. SDL_Surface* backgr – поверхность с изображением заднего фона.
    10. SDL_Surface* nsBoss – поверхность с изображением босса.
    11. SDL_Surface* nsSb – поверхность с изображением улучшенной пули для интерфейса.
    12. SDL_Surface* nsLifeBonus – поверхность с изображением бонуса-жизни.
    13. int NumLives – количество жизней игрока.
    14. SDL_Event event – объект класса SDL_Event, позволяющий обрабатывать такие события, как нажатие клавиш, закрытие окна и т.д.
    15. SDL_Surface* screen – поверхность, представляющая собой собственно окно.
    16. SDL_Rect camera – объект класса SDL_Rect, позволяющий прокручивать задний фон.

4.3.2 Методы класса

    1. Game() – конструктор.
    2. void MoveCam(int y) – функция, передвигающая объект camera, изменяя его координату по оси Y на величину у.
    3. void FlipScreen() – обновление экрана.
    4. void ClearScreen() – очистка экрана.
    5. void DrawStatus() – выводит на экран количество жизней игрока или сообщение о проигрыше, если их число равно 0.
    6. bool IsGameOver() – возвращает true, если число жизней равно 0.
    7. virtual ~Game() – деструктор.

4.4 Класс Player

class Player : public Object 

{

private:

ObjectList* pList;

int Ammo;

public:

Player(Game* game, ObjectList* list);

int GetType()     { return OBJECTTYPE_PLAYER; }

void Process(Object* pObject);

void Show_Am();

bool Move();

void handle_input();

virtual ~Player();

};

4.4.1 Атрибуты класса

    1. ObjectList* pList – указатель на объект класса ObjectList.
    2. int Ammo – число улучшенных пуль.

4.4.2 Методы класса

    1. Player(Game* game, ObjectList* list) – конструктор.
    2. int GetType() – возвращает тип объекта OBJECTTYPE_PLAYER.
    3. void Process(Object* pObject) – реализует взаимодействие объекта класса Player с объектами других классов.
    4. void Show_Am() – выводит информацию о количестве улучшенных пуль на экран.
    5. bool Move() – функция, реализующая передвижение объекта.
    6. void handle_input() – обрабатывает внешние события, такие как нажатие клавиш.
    7. virtual ~Player() – деструктор.

4.5 Класс Enemy

class Enemy : public Object

{

protected:

ObjectList* pList;

int MoveCounter;

int FireCounter;

public:

Enemy(Game* game, ObjectList* list, int x, int y);

int GetType()     { return OBJECTTYPE_ENEMY; }

void Process(Object* pObject);

bool Move();

virtual ~Enemy();

};

4.5.1 Атрибуты класса

    1. ObjectList* pList – указатель на объект класса ObjectList.
    2. int MoveCounter – счётчик передвижений.
    3. int FireCounter – счётчик огня.

4.5.2 Методы класса

    1. Enemy(Game* game, ObjectList* list, int x, int y) – конструктор. x и y – координаты объекта.
    2. int GetType() – возвращает тип объекта OBJECTTYPE_ENEMY.
    3. virtual ~Enemy() – деструктор.

Функции Procces и Move по назначению аналогичны описанным выше и далее в описании методов упоминаться не будут.

4.6 Класс Boss

class Boss : public Enemy

int damg;

int lives;

public: 

Boss(Game* game, ObjectList* list, int x, int y, int l, int d);

int GetType()     { return OBJECTTYPE_BOSS; }

void Process(Object* pObject);

bool Move();

virtual ~Boss();

};

4.6.1 Атрибуты класса

    1. int damg – урон, наносимый боссом.
    2. int lives – жизни босса.

4.6.2 Методы класса

    1. Boss(Game* game, ObjectList* list, int x, int y, int l, int d) – конструктор. x и y – координаты объекта, l – количество жизней, d – наносимый урон.
    2. int GetType() – возвращает тип объекта OBJECTTYPE_BOSS.
    3. virtual ~Boss() – деструктор.

4.7 Класс Bullet

class Bullet : public Object

{

protected:

ObjectList* pList;

bool pl;

public:

void set_sr(bool b) {pl=b;}

bool get_sr() {return pl;}

Bullet(Game* game, ObjectList* list, int x, int y, int v);

int GetType()     { return OBJECTTYPE_BULLET; }

void Process(Object* pObject);

bool Move();

virtual ~Bullet();

};

4.7.1 Атрибуты класса

    1. ObjectList* pList – указатель на объект класса ObjectList.
    2. bool pl – логическая переменная, определяющая, была ли пуля выпущена игроком или противником.

4.7.2 Методы класса

    1. void set_sr(bool b) – устанавливает значение pl.
    2. bool get_sr() – возвращает значение pl.
    3. Bullet(Game* game, ObjectList* list, int x, int y, int v) – конструктор. x и y – координаты объекта, v – скорость пули.
    4. int GetType() – возвращает тип объекта OBJECTTYPE_BULLET.
    5. virtual ~Bullet() – деструктор.

4.8 Класс Sp_Bull

class Sp_Bull : public Bullet

{

int Damage;

public:

int Get_Dm() { return Damage;}

Sp_Bull(Game* game, ObjectList* list, int x, int y, int v, int d);

int GetType() { return OBJECTTYPE_SBULL; }

void Process(Object* pObject);

bool Move();

virtual ~Sp_Bull();

};

4.8.1 Атрибуты класса

    1. int Damage – урон, наносимый боссом.

4.8.2 Методы класса

    1. int Get_Dm() – возвращает значение переменной damage.
    2. Sp_Bull(Game* game, ObjectList* list, int x, int y, int v, int d) – конструктор. x и y – координаты объекта, v – скорость пули, d – наносимый урон.
    3. int GetType() – возвращает тип объекта OBJECTTYPE_SBULL.
    4. virtual ~Sp_Bull() – конструктор.

4.9 Класс Explosion

class Explosion : public Object

{

ObjectList* pList;

public:

Explosion(Game* game, ObjectList* list, int x, int y);

int GetType()     { return OBJECTTYPE_EXPLOSION; }

void Process(Object* pObject);

bool Move();

virtual ~Explosion();

};

4.9.1 Атрибуты класса

    1. ObjectList* pList - указатель на объект класса ObjectList.

4.9.2 Методы класса

    1. Explosion(Game* game, ObjectList* list, int x, int y) – конструктор.
    2. int GetType() - возвращает тип объекта OBJECTTYPE_EXPLOSION.
    3. virtual ~Explosion() – деструктор.

4.10 Класс Life

class Life : public Object

{

ObjectList* pList;

int bonus;

public:

Life(Game* game, ObjectList* list, int x, int y, int b);

int GetType(){ return OBJECTTYPE_LIFE; }

void Process(Object* pObject);

bool Move();

virtual ~Life();

};

4.10.1 Атрибуты класса

    1. ObjectList* pList - указатель на объект класса ObjectList.
    2. int bonus – число, на которое увеличится число жизней при получении бонуса.

Информация о работе Объектно ориентированное программирование. Простая игра