diff options
Diffstat (limited to 'src/game_state.cpp')
-rw-r--r-- | src/game_state.cpp | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/src/game_state.cpp b/src/game_state.cpp index 48a9e42..340bcd3 100644 --- a/src/game_state.cpp +++ b/src/game_state.cpp @@ -1,27 +1,48 @@ #include "game_state.h" #include <iostream> +#include <fstream> +#include <limits> const int OPENING_LINES = 6; const int GAME_AREA_LINES = 25; -GameState::GameState(std::istream& file) +GameState::GameState(std::string mapFilename) { + std::ifstream mapFile(mapFilename); for (int i=0; i<OPENING_LINES; ++i) { - file.ignore(numeric_limits<streamsize>::max(), '\n'); + mapFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } - int x = -1; int y = 0; - char nextChar = ' '; - while (char nextChar = file.get()) + + for (int x=-1; y <= GAME_AREA_LINES; ++x) { - ++x; + char nextChar = mapFile.get(); + if (nextChar == EOF) + { + break; + } + switch (nextChar) { - case Alien.MAP_CHAR: + case Alien::MAP_CHAR: aliens.push_back(Alien(x,y)); break; + case EnemyBullet::ALIEN_MAP_CHAR: + case EnemyBullet::ENEMY_MISSILE_MAP_CHAR: + bullets.push_back(EnemyBullet(x,y)); + break; + case PlayerMissile::MAP_CHAR: + missiles.push_back(PlayerMissile(x,y)); + break; + case Shield::MAP_CHAR: + shields.push_back(Shield(x,y)); + break; + case Spaceship::ENEMY_MAP_CHAR: + case Spaceship::PLAYER_MAP_CHAR: + spaceships.push_back(Spaceship(x,y)); + break; case '\n': ++y; x = -1; |