From 98ba22e7064db57316dfff1ae127feb3dceeb73e Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Thu, 31 Jul 2014 13:58:22 +0200 Subject: Initial commit --- source/data/LevelReader.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 source/data/LevelReader.cpp (limited to 'source/data/LevelReader.cpp') diff --git a/source/data/LevelReader.cpp b/source/data/LevelReader.cpp new file mode 100644 index 0000000..e5364d8 --- /dev/null +++ b/source/data/LevelReader.cpp @@ -0,0 +1,54 @@ +#include "LevelReader.h" + +LevelReader::LevelReader(string filename) + :_filename(filename) +{} + +void LevelReader::readLevel(Maze& maze, list& players, list& enemies, list& checkpoints, list& rocks) +{ + ifstream file(_filename.c_str()); + if (!file) + { + al_show_native_message_box(NULL, "Fatal error", "Fatal error", "The requested level file could not be opened.", NULL, ALLEGRO_MESSAGEBOX_ERROR); + throw FileOpenError(); + } + + int maxX = 0; + int maxY = 0; + + string line; + char element; + int y = 0; + vector > walls; + + while (!file.eof()) + { + getline (file, line); + + for (int x = 0; x < static_cast(line.length()); ++x) + { + element = line.at(x); + switch (element) + { + case PLAYER_CHAR: players.push_back(PlayerCar(x,y)); + break; + case ENEMY_CHAR: enemies.push_back (EnemyCar(x,y)); + break; + case CHECKPOINT_CHAR: checkpoints.push_back(Checkpoint(x,y)); + break; + case ROCK_CHAR: rocks.push_back(Rock(x,y)); + break; + case WALL_CHAR: walls.push_back (make_pair(x,y)); + break; + } + if (maxX < x) maxX = x; + if (maxY < y) maxY = y; + } + + ++y; + } + + maze.generateMaze (walls, maxX, maxY); + + file.close(); +} -- cgit v1.2.3