From a3d98941fa46442521c9dad18ed1a5882d28154e Mon Sep 17 00:00:00 2001 From: weberma73121 <weberma73121@th-nuernberg.de> Date: Sat, 16 Jan 2021 17:20:11 +0100 Subject: [PATCH] Enum Direction --- Bomber.cpp | 20 ++++++++++---------- Bomber.hpp | 2 +- Enemy.cpp | 36 ++++++++++++++++++------------------ Enemy.hpp | 4 ++-- Enemyprojectile.cpp | 12 ++++++------ Enemyprojectile.hpp | 2 +- Level.cpp | 6 +++--- Position.hpp | 1 + Projectile.cpp | 4 ++-- Projectile.hpp | 4 ++-- Tank.cpp | 30 +++++++++++++++--------------- Tank.hpp | 2 +- Trooper.cpp | 30 +++++++++++++++--------------- Trooper.hpp | 2 +- main.cpp | 16 ++++++++-------- player.cpp | 32 ++++++++++++++++---------------- player.hpp | 2 +- playerprojectile.cpp | 12 ++++++------ playerprojectile.hpp | 2 +- 19 files changed, 110 insertions(+), 109 deletions(-) diff --git a/Bomber.cpp b/Bomber.cpp index 4c3e5e9..5dcbf5c 100644 --- a/Bomber.cpp +++ b/Bomber.cpp @@ -1,6 +1,6 @@ #include "Bomber.hpp" -Bomber::Bomber(float x, float y, int direction, int animationstep) - : Enemy(5,x,y,direction,animationstep) +Bomber::Bomber(float x, float y, enum direction dir, int animationstep) + : Enemy(5,x,y,dir,animationstep) { } int Bomber::getScore() @@ -118,15 +118,15 @@ static StaticPixelBuffer<23,11> constexpr left[2] = { const PixelBuffer& Bomber::getSprite() { - switch ( direcion ) { + switch (dir) { - case 1: + case direction::BACK: return back[animationstep]; break; - case 2: + case direction::LEFT: return left[animationstep]; break; - case 3: + case direction::RIGHT: return right[animationstep]; break; @@ -147,14 +147,14 @@ void Bomber::move(FloatSeconds const & Frametime, [[maybe_unused]] Level &level) animationtimer += Frametime.count(); } /*replace with Pathfinding*/ - switch ( this->direcion ) { - case 1: //front + switch ( this->dir ) { + case direction::FRONT: //front this->topleft.Y -= 10*Frametime.count(); break; - case 2: //left + case direction::LEFT: //left this->topleft.X -= 10*Frametime.count(); break; - case 3: //right + case direction::RIGHT: //right this->topleft.X += 10*Frametime.count(); break; default: diff --git a/Bomber.hpp b/Bomber.hpp index 2e4fa6f..4b3cbc6 100644 --- a/Bomber.hpp +++ b/Bomber.hpp @@ -7,7 +7,7 @@ class Level; class Bomber: public Enemy { public: - Bomber(float x, float y, int direction, int animationstep); + Bomber(float x, float y, enum direction dir, int animationstep); void doStep(float PlayerX, float PlayerY, FloatSeconds const & Frametime, Level &level) override; int getScore() override; diff --git a/Enemy.cpp b/Enemy.cpp index c452904..f3a4b28 100644 --- a/Enemy.cpp +++ b/Enemy.cpp @@ -1,11 +1,11 @@ #include "Enemy.hpp" #include "Level.hpp" #include "Enemyprojectile.hpp" -Enemy::Enemy(int health,float x, float y, int direction, int animationstep) +Enemy::Enemy(int health,float x, float y, enum direction dir, int animationstep) { this->hitpoints = health; this->topleft = { x, y }; - this->direcion = direction; + this->dir = dir; this->animationstep = animationstep; } @@ -14,20 +14,20 @@ void Enemy::shoot(Level &level) const auto &sprite = this->getSprite(); if(timetillreload<0) { - switch ( this->direcion ) { - case 1: //Up + switch ( this->dir ) { + case direction::FRONT: //Up { - level.addEnemyProjectile({this->topleft.X+sprite.w()/2-1,this->topleft.Y-sprite.h()/2,direcion}); + level.addEnemyProjectile({this->topleft.X+sprite.w()/2-1,this->topleft.Y-sprite.h()/2,dir}); break; } - case 2: //left - level.addEnemyProjectile({this->topleft.X,this->topleft.Y+sprite.h()/2-1,direcion}); + case direction::LEFT: //left + level.addEnemyProjectile({this->topleft.X,this->topleft.Y+sprite.h()/2-1,dir}); break; - case 3: //right - level.addEnemyProjectile({this->topleft.X,this->topleft.Y+sprite.h()/2-1,direcion}); + case direction::RIGHT: //right + level.addEnemyProjectile({this->topleft.X,this->topleft.Y+sprite.h()/2-1,dir}); break; default: //Down - level.addEnemyProjectile({this->topleft.X+sprite.w()/2-1,this->topleft.Y+(sprite.h()/2),direcion}); + level.addEnemyProjectile({this->topleft.X+sprite.w()/2-1,this->topleft.Y+(sprite.h()/2),dir}); break; } timetillreload = 5; @@ -125,15 +125,15 @@ bool Enemy::lookright(float PlayerX, Level &level) bool Enemy::lookAtPlayer(float PlayerX, float PlayerY, Level &level) { - switch ( direcion ) { - case 1: //back + switch (dir) { + case direction::BACK: //back return lookup(PlayerY, level); break; - case 2: //left + case direction::LEFT: //left return lookleft(PlayerX, level); break; - case 3: //right + case direction::RIGHT: //right return lookright(PlayerX, level); break; default: @@ -148,12 +148,12 @@ bool Enemy::playerdetected(float PlayerX, float PlayerY, Level &level) { if(lookdown(PlayerY, level)) { - direcion = 0; + dir = direction::BACK; return true; } else if(lookup(PlayerY, level)) { - direcion = 1; + dir = direction::FRONT; return true; } else @@ -165,12 +165,12 @@ bool Enemy::playerdetected(float PlayerX, float PlayerY, Level &level) { if(lookleft(PlayerX, level)) { - direcion = 2; + dir = direction::LEFT; return true; } else if(lookright(PlayerX, level)) { - direcion = 3; + dir = direction::RIGHT; return true; } else diff --git a/Enemy.hpp b/Enemy.hpp index cc21381..55b37e8 100644 --- a/Enemy.hpp +++ b/Enemy.hpp @@ -15,11 +15,11 @@ class Level; class Enemy : public Entity { public: - Enemy(int Health, float x, float y, int direction, int animationstep); + Enemy(int Health, float x, float y, enum direction dir, int animationstep); virtual int getScore() = 0; protected: - int direcion; + direction dir; float timetillreload = 0; float animationtimer = 0; //Kann nicht copy diff --git a/Enemyprojectile.cpp b/Enemyprojectile.cpp index 88108a6..9f53cb3 100644 --- a/Enemyprojectile.cpp +++ b/Enemyprojectile.cpp @@ -2,8 +2,8 @@ #include "Platform.hpp" #include "Level.hpp" -EnemyProjectile::EnemyProjectile(float x, float y, int direction) - : Projectile(x,y,direction) +EnemyProjectile::EnemyProjectile(float x, float y, enum direction dir) + : Projectile(x,y,dir) { }; static StaticPixelBuffer<3,3> constexpr Psprite= { @@ -20,9 +20,9 @@ bool EnemyProjectile::move(FloatSeconds const & Frametime, Level &level) { int speed = 15; const auto &sprite = this->getSprite(); - switch (this->direction) + switch (this->dir) { - case 1: //down + case direction::BACK: //down if(!level.checkCollision(this->x, this->y - 3*Frametime.count(), sprite.w(), sprite.h())) { this->y -= speed*Frametime.count(); @@ -40,7 +40,7 @@ bool EnemyProjectile::move(FloatSeconds const & Frametime, Level &level) break; break; - case 2: + case direction::LEFT: if(!level.checkCollision(this->x - 3*Frametime.count(), this->y, sprite.w(), sprite.h())) { this->x -= speed*Frametime.count(); @@ -58,7 +58,7 @@ bool EnemyProjectile::move(FloatSeconds const & Frametime, Level &level) break; break; - case 3: + case direction::RIGHT: if(!level.checkCollision(this->x + 3*Frametime.count(),this->y, sprite.w(), sprite.h())) { this->x += speed*Frametime.count(); diff --git a/Enemyprojectile.hpp b/Enemyprojectile.hpp index 87a5372..0df7112 100644 --- a/Enemyprojectile.hpp +++ b/Enemyprojectile.hpp @@ -6,7 +6,7 @@ Color constexpr ENEMY_PROJECTILE_COLOR = _2; class EnemyProjectile: public Projectile { public: - EnemyProjectile(float x, float y, int direction); + EnemyProjectile(float x, float y, enum direction dir); bool doStep(FloatSeconds const & Frametime, Level &level) override; PixelBuffer const& getSprite() override; protected: diff --git a/Level.cpp b/Level.cpp index cec0902..6a4d9fc 100644 --- a/Level.cpp +++ b/Level.cpp @@ -95,10 +95,10 @@ void Level::addEnemy(std::unique_ptr<Enemy> enemy_) void Level::fillTrooperSpawner(float posX, float posY, unsigned int nmbrEnemies) { - int direction = 2; + direction dir = direction::LEFT; for(unsigned int i = 0; i <= nmbrEnemies; ++i){ - trooperSpawner.push_back(std::make_unique<Trooper>(Trooper(posX,posY,direction,0))); - direction = rand() % 4; + trooperSpawner.push_back(std::make_unique<Trooper>(Trooper(posX,posY,dir,0))); + dir=direction(rand()%4); } } // kruegerzo72182> diff --git a/Position.hpp b/Position.hpp index bc52918..7891185 100644 --- a/Position.hpp +++ b/Position.hpp @@ -26,5 +26,6 @@ public: return { static_cast<int>(X), static_cast<int>(Y) }; } }; +enum class direction {BACK, FRONT, RIGHT, LEFT}; #endif // POSITION_HPP diff --git a/Projectile.cpp b/Projectile.cpp index c9a6665..1af2a50 100644 --- a/Projectile.cpp +++ b/Projectile.cpp @@ -1,10 +1,10 @@ #include "Projectile.hpp" -Projectile::Projectile(float x, float y, int direction) +Projectile::Projectile(float x, float y, enum direction dir) { this->x = x; this->y = y; - this->direction=direction; + this->dir=dir; } Projectile::~Projectile() { diff --git a/Projectile.hpp b/Projectile.hpp index efc685d..a7368f4 100644 --- a/Projectile.hpp +++ b/Projectile.hpp @@ -7,14 +7,14 @@ class Level; class Projectile { public: - Projectile(float x, float y, int direction); + Projectile(float x, float y, enum direction dir); virtual ~Projectile(); float getX(); float getY(); virtual const PixelBuffer& getSprite() = 0; virtual bool doStep(FloatSeconds const & Frametime, Level &level) = 0; protected: - int direction; + direction dir; float x; float y; virtual bool move(FloatSeconds const & Frametime, Level &level) = 0; diff --git a/Tank.cpp b/Tank.cpp index 3adaee8..1909666 100644 --- a/Tank.cpp +++ b/Tank.cpp @@ -1,6 +1,6 @@ #include "Tank.hpp" -Tank::Tank(float x, float y, int direction, int animationstep) - : Enemy(3,x,y,direction,animationstep) +Tank::Tank(float x, float y, enum direction dir, int animationstep) + : Enemy(3,x,y,dir,animationstep) { } @@ -126,15 +126,15 @@ static StaticPixelBuffer<17,11> constexpr left[2] = { }; const PixelBuffer& Tank::getSprite() { - switch ( direcion ) { + switch (dir) { - case 1: + case direction::BACK: return back[animationstep]; break; - case 2: + case direction::LEFT: return left[animationstep]; break; - case 3: + case direction::RIGHT: return right[animationstep]; break; @@ -149,24 +149,24 @@ const PixelBuffer& Tank::getSprite() void Tank::changeDirection() { - this->direcion = rand() % 4; + dir=direction(rand()%4); }; bool Tank::checkmove(FloatSeconds const & Frametime, Level &level) { - switch (this->direcion) + switch (this->dir) { - case 1: //down + case direction::BACK: //down if(!level.checkCollision(this->topleft.X, this->topleft.Y - 3*Frametime.count(), this->getSprite().w(), this->getSprite().h())) {this->topleft.Y -= 3*Frametime.count(); return false;} else return true; break; - case 2: + case direction::LEFT: if(!level.checkCollision(this->topleft.X - 3*Frametime.count(), this->topleft.Y, this->getSprite().w(), this->getSprite().h())) {this->topleft.X -= 3*Frametime.count(); return false;} else return true; break; - case 3: + case direction::RIGHT: if(!level.checkCollision(this->topleft.X + 3*Frametime.count(),this->topleft.Y, this->getSprite().w(), this->getSprite().h())) {this->topleft.X += 3*Frametime.count(); return false;} else return true; @@ -202,22 +202,22 @@ void Tank::turnToPlayer(float PlayerX, float PlayerY) { if(this->topleft.Y > PlayerY) { - direcion = 1; //up + dir=direction::FRONT; //up } else { - direcion = 0; //down + dir=direction::BACK; //down } } else { if(this->topleft.X > PlayerX) { - direcion = 2; + dir=direction::RIGHT; } else { - direcion = 3; + dir=direction::LEFT; } } }; diff --git a/Tank.hpp b/Tank.hpp index 32e2267..c82700a 100644 --- a/Tank.hpp +++ b/Tank.hpp @@ -6,7 +6,7 @@ class Tank: public Enemy // Fight the Power! { public: - Tank(float x, float y, int direction, int animationstep); + Tank(float x, float y, enum direction dir, int animationstep); //~Tank() override; void doStep(float PlayerX, float PlayerY, FloatSeconds const & Frametime, Level &level) override; diff --git a/Trooper.cpp b/Trooper.cpp index a9e95b6..5fbb151 100644 --- a/Trooper.cpp +++ b/Trooper.cpp @@ -1,8 +1,8 @@ #include "Level.hpp" #include "Trooper.hpp" -Trooper::Trooper(float x, float y, int direction, int animationstep) - : Enemy(1,x,y,direction,animationstep) +Trooper::Trooper(float x, float y, enum direction dir, int animationstep) + : Enemy(1,x,y,dir,animationstep) { animationtimer = 0; } @@ -109,15 +109,15 @@ static StaticPixelBuffer<5,9> constexpr right[2] = { }; const PixelBuffer& Trooper::getSprite() { - switch ( direcion ) { + switch (dir) { - case 1: + case direction::BACK: return back[animationstep]; break; - case 2: + case direction::LEFT: return left[animationstep]; break; - case 3: + case direction::RIGHT: return right[animationstep]; break; @@ -134,25 +134,25 @@ const PixelBuffer& Trooper::getSprite() void Trooper::changeDirection() { - this->direcion = rand() % 4; + dir=direction(rand()%4); }; bool Trooper::checkmove(FloatSeconds const & Frametime, Level &level) { const auto &sprite = this->getSprite(); - switch (this->direcion) + switch (this->dir) { - case 1: //down + case direction::BACK: //down if(!level.checkCollision(this->topleft.X, this->topleft.Y - 3*Frametime.count(), sprite.w(), sprite.h())) {this->topleft.Y -= 3*Frametime.count(); return false;} else return true; break; - case 2: + case direction::LEFT: if(!level.checkCollision(this->topleft.X - 3*Frametime.count(), this->topleft.Y, sprite.w(), sprite.h())) {this->topleft.X -= 3*Frametime.count(); return false;} else return true; break; - case 3: + case direction::RIGHT: if(!level.checkCollision(this->topleft.X + 3*Frametime.count(), this->topleft.Y, sprite.w(), sprite.h())) {this->topleft.X += 3*Frametime.count(); return false;} else return true; @@ -188,22 +188,22 @@ void Trooper::turnToPlayer(float PlayerX, float PlayerY) { if(this->topleft.Y > PlayerY) { - direcion = 1; //up + dir=direction::FRONT; //up } else { - direcion = 0; //down + dir=direction::BACK; //down } } else { if(this->topleft.X > PlayerX) { - direcion = 2; + dir=direction::RIGHT; } else { - direcion = 3; + dir=direction::LEFT; } } }; diff --git a/Trooper.hpp b/Trooper.hpp index 32b7048..458b0a2 100644 --- a/Trooper.hpp +++ b/Trooper.hpp @@ -12,7 +12,7 @@ class Level; class Trooper: public Enemy { public: - Trooper(float x, float y, int direction, int animationstep); + Trooper(float x, float y, enum direction dir, int animationstep); void doStep(float PlayerX, float PlayerY, FloatSeconds const & Frametime, Level &level) override; int getScore() override; diff --git a/main.cpp b/main.cpp index d9f5f85..2839622 100644 --- a/main.cpp +++ b/main.cpp @@ -82,20 +82,20 @@ public: //Spawn bombers from different directions endlessly bomberTimer = bomberTimer + frame_time.count(); if(bomberTimer > 30.0f){ - int direction = rand() % 4; + direction dir=direction(rand()%4); float bombX; float bombY; int offset = 20; - switch ( direction ) { - case 1: //Up + switch (dir) { + case direction::FRONT: //Up bombX = player_.getTopLeft().X; bombY = static_cast<float>(screenHeigth + offset); break; - case 2: //left + case direction::LEFT: //left bombX = static_cast<float>(screenWidth + offset); bombY = player_.getTopLeft().Y; break; - case 3: //right + case direction::RIGHT: //right bombX = static_cast<float>(-offset); bombY = player_.getTopLeft().Y; break; @@ -104,7 +104,7 @@ public: bombY = static_cast<float>(-offset); break; } - level.enemyVector_PushBack(std::make_unique<Bomber>(Bomber(bombX, bombY, direction, 0))); + level.enemyVector_PushBack(std::make_unique<Bomber>(Bomber(bombX, bombY, dir, 0))); bomberTimer = 0.0f; } // kruegerzo72182> @@ -187,8 +187,8 @@ int run(Platform &platform) level1.addScenery(245, 25, SceneryType::Bush); // add enemies to the level - level1.addEnemy(std::make_unique<Tank>(Tank(50, 150, 0, 0))); - level1.addEnemy(std::make_unique<Tank>(Tank(200, 160, 2, 0))); + level1.addEnemy(std::make_unique<Tank>(Tank(50, 150, direction::BACK, 0))); + level1.addEnemy(std::make_unique<Tank>(Tank(200, 160, direction::LEFT, 0))); level1.fillTrooperSpawner(120, 170, 4); // kruegerzo72182> // <hoffmanncl72341 diff --git a/player.cpp b/player.cpp index 91656dc..ceb32c7 100644 --- a/player.cpp +++ b/player.cpp @@ -127,15 +127,15 @@ static StaticPixelBuffer<PLAYER_W, PLAYER_H> constexpr left[2] = { PixelBuffer const& Player::getSprite() { - switch ( direction ) { + switch ( dir ) { - case 1: + case direction::BACK: return back[animationstep]; break; - case 2: + case direction::LEFT: return left[animationstep]; break; - case 3: + case direction::RIGHT: return right[animationstep]; break; @@ -155,22 +155,22 @@ void Player::move(Platform &p, FloatSeconds const & Frametime, Level &level) { case 'W': case 'w': { - direction=1; + dir=direction::BACK; deltaY-= speed*Frametime.count(); break; } case 'A': case 'a': { - direction=2; + dir=direction::LEFT; deltaX-= speed*Frametime.count(); break; } case 'S': case 's': { - direction=0; + dir=direction::FRONT; deltaY+= speed*Frametime.count(); break; } case 'D': case 'd': { - direction=3; + dir=direction::RIGHT; deltaX+= speed*Frametime.count(); break; } case ' ': @@ -198,20 +198,20 @@ void Player::shoot(Level &level) if(timetillreload<0) { auto const &sprite = this->getSprite(); - switch ( this->direction ) { - case 1: //front + switch ( this->dir ) { + case direction::FRONT: //front { - level.addPlayerProjectile({this->topleft.X+sprite.w()/2-1,this->topleft.Y-sprite.h()/2,direction}); + level.addPlayerProjectile({this->topleft.X+sprite.w()/2-1,this->topleft.Y+sprite.h()/2,dir}); break; } - case 2: //left - level.addPlayerProjectile({this->topleft.X,this->topleft.Y+(sprite.h()/2-1),direction}); + case direction::LEFT: //left + level.addPlayerProjectile({this->topleft.X,this->topleft.Y+(sprite.h()/2-1),dir}); break; - case 3: //right - level.addPlayerProjectile({this->topleft.X,this->topleft.Y+(sprite.h()/2-1),direction}); + case direction::RIGHT: //right + level.addPlayerProjectile({this->topleft.X,this->topleft.Y+(sprite.h()/2-1),dir}); break; default: //back - level.addPlayerProjectile({this->topleft.X+sprite.w()/2-1,this->topleft.Y+(sprite.h()/2),direction}); + level.addPlayerProjectile({this->topleft.X+sprite.w()/2-1,this->topleft.Y-(sprite.h()/2),dir}); break; } timetillreload = 1; diff --git a/player.hpp b/player.hpp index 3e4a81f..c37d0df 100644 --- a/player.hpp +++ b/player.hpp @@ -13,7 +13,7 @@ class Player : public Entity { protected: int speed=48; - int direction=0; + direction dir=direction::BACK; int animationstep=0; float timetillreload=0.0f; float animationtimer=0.0f; diff --git a/playerprojectile.cpp b/playerprojectile.cpp index 49ea513..914c114 100644 --- a/playerprojectile.cpp +++ b/playerprojectile.cpp @@ -2,8 +2,8 @@ #include "Platform.hpp" #include "Level.hpp" -PlayerProjectile::PlayerProjectile(float x, float y, int direction) - : Projectile(x,y,direction) +PlayerProjectile::PlayerProjectile(float x, float y, enum direction dir) + : Projectile(x,y,dir) { }; static StaticPixelBuffer<3,3> constexpr Psprite= { @@ -20,9 +20,9 @@ bool PlayerProjectile::move(FloatSeconds const & Frametime, Level &level) { int speed = 15; const auto &sprite = this->getSprite(); - switch (this->direction) + switch (this->dir) { - case 1: //down + case direction::BACK: //down if(!level.checkCollision(this->x, this->y - 3*Frametime.count(), sprite.w(), sprite.h())) { this->y -= speed*Frametime.count(); @@ -40,7 +40,7 @@ bool PlayerProjectile::move(FloatSeconds const & Frametime, Level &level) break; break; - case 2: + case direction::LEFT: if(!level.checkCollision(this->x - 3*Frametime.count(), this->y, sprite.w(), sprite.h())) { this->x -= speed*Frametime.count(); @@ -58,7 +58,7 @@ bool PlayerProjectile::move(FloatSeconds const & Frametime, Level &level) break; break; - case 3: + case direction::RIGHT: if(!level.checkCollision(this->x + 3*Frametime.count(),this->y, sprite.w(), sprite.h())) { this->x += speed*Frametime.count(); diff --git a/playerprojectile.hpp b/playerprojectile.hpp index fdcb29b..d936446 100644 --- a/playerprojectile.hpp +++ b/playerprojectile.hpp @@ -6,7 +6,7 @@ Color constexpr PLAYER_PROJECTILE_COLOR = _6; class PlayerProjectile: public Projectile { public: - PlayerProjectile(float x, float y, int direction); + PlayerProjectile(float x, float y, enum direction dir); bool doStep(FloatSeconds const & Frametime, Level &level) override; PixelBuffer const& getSprite() override; protected: -- GitLab