Автор работы: Пользователь скрыл имя, 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. Заключение
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение
высшего профессионального образования
«Тихоокеанский
Кафедра
ПО ВТ и АС
Объектно-ориентированное программирование.
Курсовая работа.
060620080
Выполнила: студентка группы ПО-62 Разуваева Н.В.
Проверил: Пустынский И.С.
г. Хабаровск, 2008
Оглавление
В качестве курсовой работы по объектно-ориентированному программированию было предложено написать простую игру. Основные требования к программе:
Описываемая ниже программа представляет собой игру под названием Space Shooter. В игре космический корабль под управлением игрока отстреливается от космических кораблей противника. Противники делятся на простых врагов, наносящих урон в одну жизнь и погибающих с первого попадания, и боссов, которые обладают большим количеством жизней и наносят больший урон. Так же в игре существуют разрушаемые препятствия.
Передвижение в игре производится клавишами вверх, вниз, влево и вправо. По нажатию пробела корабль игрока стреляет обычными пулями. По нажатию клавиши Right Alt производится выстрел улучшенными пулями, наносящими больший урон.
Внешний вид игры
Для реализации графической составляющей игры была использована библиотека SDL - Simple DirectMedia Layer. Это библиотека, которая обеспечивает низкоуровневый доступ к буферу видео, аудио выходу, мыши, клавиатуре и т.д. для большого количества операционных систем.
Русское название класса – Объект. Является базовым классом для всех классов, имеющих визуальное отображение на экране. Объявление класса находится в Object.h, реализация класса находится в Object.cpp.
Русское название – Список Объектов. Хранит в виде списка все визуально отображаемые объекты, существующие в данные момент, и помогает реализовать взаимодействие между ними. Объявление класса находится в ObjectList.h, реализация класса находится в ObjectList.cpp.
Русское название Игра. Служит для реализации графического интерфейса игры. Хранит в себе параметры окна, изображения для визуальных объектов и т.д. Объявление класса находится в Game.h, реализация класса находится в Game.cpp.
Русское название класса – Игрок. Класс, представляющий корабль, которым управляет игрок. Наследник класса Object. Объявление класса находится в Player .h, реализация класса находится в Player.cpp.
Русское название класса – Противник. Класс, представляющий собой корабль-противник. Наследник класса Object. Объявление класса находится в Enemy.h, реализация класса находится в Enemy.cpp.
Русское название класса – Босс. Класс, представляющий собой усиленный корабль противника. Наследник класса Enemy. Объявление класса находится в Boss.h, реализация класса находится в Boss.cpp.
Русское название класса – Пуля. Наносит урон объектам, находящимся на уровне. Наследник класса Object. Объявление класса находится в Bullet.h, реализация класса находится в Bullet.cpp.
Русское название класса – Улучшенная пуля. Наследник класса Bullet. Обладает повышенным уроном. Объявление класса находится в Sp_Bull.h, реализация класса находится в Sp_Bull.cpp.
Русское название класса – Взрыв. Служит для графического отображения взрывов при столкновении объектов и их уничтожении. Объявление класса находится в Explosion.h, реализация класса находится в Explosion.cpp.
Русское название класса – Жизнь. Класс, представляющий собой бонус, добавляющий жизни игроку. Объявление класса находится в Life.h, реализация класса находится в Life.cpp.
Русское название – Препятствие. Объявление
класса находится в Defense.h, реализация
класса находится в Defense.cpp.
Диаграмма классов, используемых в курсовой работе
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() {}
};
virtual int GetType() – виртуальная функция, возвращающая тип объекта. Тип объекта может быть следующим: OBJECTTYPE_PLAYER, OBJECTTYPE_BULLET, OBJECTTYPE_EXPLOSION, OBJECTTYPE_ENEMY, OBJECTTYPE_DEFENCE, OBJECTTYPE_BONUS, OBJECTTYPE_SBULL, OBJECTTYPE_BOSS, OBJECTTYPE_LIFE.
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;
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();
};
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();
};
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();
};
Функции Procces и Move по назначению аналогичны описанным выше и далее в описании методов упоминаться не будут.
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();
};
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();
};
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();
};
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();
};
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();
};
Информация о работе Объектно ориентированное программирование. Простая игра