You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
			
		
		
		
		
			
		
			
				
					
					
						
							105 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							105 lines
						
					
					
						
							3.4 KiB
						
					
					
				| #include "cell.h" | |
|  | |
| #include <stdexcept> | |
| #include <algorithm> | |
|  | |
| std::ostream &operator<<(std::ostream &os, const cell &c) { | |
|   os << static_cast<char>(c.type) << static_cast<char>(c.color); | |
|   os <<  " at (" << c.column << "," << c.row << ")"; | |
|   return os; | |
| } | |
| 
 | |
| coordinates cell::getCoordinates() const { | |
|   return std::make_pair(column, row); | |
| } | |
| 
 | |
| cell cell::getNorth(const std::vector<cell> &grid) const { | |
|   auto north = std::find_if(grid.begin(), grid.end(), [this](const cell &c) { | |
|         return this->row - 1 == c.row && this->column == c.column; | |
|       }); | |
|   if(north == grid.end()) { | |
|     throw std::logic_error{ "Cannot get cell north of (" + std::to_string(row) + "," + std::to_string(column) + ")"}; | |
|     std::exit(EXIT_FAILURE); | |
|   } | |
|   return *north; | |
| } | |
| 
 | |
| cell cell::getEast(const std::vector<cell> &grid) const { | |
|   auto east = std::find_if(grid.begin(), grid.end(), [this](const cell &c) { | |
|         return this->row == c.row && this->column + 1 == c.column; | |
|       }); | |
|   if(east == grid.end()) { | |
|     throw std::logic_error{ "Cannot get cell east of (" + std::to_string(row) + "," + std::to_string(column) + ")"}; | |
|     std::exit(EXIT_FAILURE); | |
|   } | |
|   return *east; | |
| } | |
| 
 | |
| cell cell::getSouth(const std::vector<cell> &grid) const { | |
|   auto south = std::find_if(grid.begin(), grid.end(), [this](const cell &c) { | |
|         return this->row + 1 == c.row && this->column == c.column; | |
|       }); | |
|   if(south == grid.end()) { | |
|     throw std::logic_error{ "Cannot get cell south of (" + std::to_string(row) + "," + std::to_string(column) + ")"}; | |
|     std::exit(EXIT_FAILURE); | |
|   } | |
|   return *south; | |
| } | |
| 
 | |
| cell cell::getWest(const std::vector<cell> &grid) const { | |
|   auto west = std::find_if(grid.begin(), grid.end(), [this](const cell &c) { | |
|         return this->row == c.row && this->column - 1 == c.column; | |
|       }); | |
|   if(west == grid.end()) { | |
|     throw std::logic_error{ "Cannot get cell west of (" + std::to_string(row) + "," + std::to_string(column) + ")"}; | |
|     std::exit(EXIT_FAILURE); | |
|   } | |
|   return *west; | |
| } | |
| 
 | |
| std::string cell::getColor() const { | |
|   switch(color) { | |
|     case Color::Red:    return "red"; | |
|     case Color::Green:  return "green"; | |
|     case Color::Blue:   return "blue"; | |
|     case Color::Purple: return "purple"; | |
|     case Color::Yellow: return "yellow"; | |
|     case Color::None:   return "transparent"; | |
|     default: return ""; | |
|     //case Color::Grey   = 'G', | |
|   } | |
| } | |
| 
 | |
| std::string cell::getType() const { | |
|   switch(type) { | |
|     case Type::Wall:         return "Wall"; | |
|     case Type::Floor:        return "Floor"; | |
|     case Type::Door:         return "Door"; | |
|     case Type::LockedDoor:    return "LockedDoor"; | |
|     case Type::Key:          return "Key"; | |
|     case Type::Ball:          return "Ball"; | |
|     case Type::Box:           return "Box"; | |
|     case Type::Goal:          return "Goal"; | |
|     case Type::Lava:          return "Lava"; | |
|     case Type::Agent:         return "Agent"; | |
|     case Type::Adversary:     return "Adversary"; | |
|     case Type::SlipperyNorth: return "SlipperyNorth"; | |
|     case Type::SlipperySouth: return "SlipperySouth"; | |
|     case Type::SlipperyEast:  return "SlipperyEast"; | |
|     case Type::SlipperyWest:  return "SlipperyWest"; | |
|     default: return ""; | |
|   } | |
| } | |
| 
 | |
| std::string getColor(Color color) { | |
|   switch(color) { | |
|     case Color::Red:    return "red"; | |
|     case Color::Green:  return "green"; | |
|     case Color::Blue:   return "blue"; | |
|     case Color::Purple: return "purple"; | |
|     case Color::Yellow: return "yellow"; | |
|     case Color::None:   return "transparent"; | |
|     default: return ""; | |
|     //case Color::Grey   = 'G', | |
|   } | |
| }
 |