cirno-puzzle/src/level.h

48 lines
894 B
C++

#ifndef LEVEL_H
#define LEVEL_H
#include <array>
enum class CellType
{
Water = '.',
Ground = '-',
Charge = '$',
Bridge = char(177),
Hero = '@',
Exit = '#'
};
using coordinate = unsigned int;
constexpr coordinate side = 32;
using Row = std::array<CellType, side>;
using Map = std::array<Row, side>;
/// Abstraction over 2D array to quickly get access to level cells
class Level
{
private:
Map map;
public:
Level();
/// Place a bridge cell
void placeBridge(coordinate x, coordinate y);
/// Get the 2D array of level map
Map& mapArray();
/// Returns type of requested map cell
CellType cellOfType(coordinate x, coordinate y) const;
/// Replace a charge cell with a ground cell
void removeCharge(coordinate x, coordinate y);
/// Set new map for the level
void setMap(const Map& new_map);
};
#endif // LEVEL_H