|
1 | 1 | #include "GameBoard.h" |
2 | 2 |
|
| 3 | + |
3 | 4 | #include <map> |
4 | 5 | #include <memory> |
5 | 6 |
|
6 | 7 | using std::map; |
7 | 8 | using std::unique_ptr; |
8 | 9 |
|
| 10 | +#define ADD_RESOURCE(x, y, res, val) (resources[Coordinate(x,y)] = \ |
| 11 | +std::unique_ptr<GamePiece>(new ResourceTile(*this, Coordinate(x,y), res, val))) |
| 12 | +#define DUMMY_BOARD //define to instantiate dummy board for debugging |
| 13 | + |
9 | 14 | GameBoard::GameBoard() { |
10 | | - pieces.emplace(Coordinate(0, 0), unique_ptr<GamePiece>(new ResourceTile(*this, ResourceTile::WOOD, 2))); |
11 | | - pieces.emplace(Coordinate(1, 1), unique_ptr<GamePiece>(new ResourceTile(*this, ResourceTile::SHEEP, 2))); |
12 | | - pieces.emplace(Coordinate(-1, -1), unique_ptr<GamePiece>(new ResourceTile(*this, ResourceTile::BRICK, 2))); |
13 | | - pieces.emplace(Coordinate(2, -1), unique_ptr<GamePiece>(new ResourceTile(*this, ResourceTile::ORE, 2))); |
14 | | - pieces.emplace(Coordinate(-2, 1), unique_ptr<GamePiece>(new ResourceTile(*this, ResourceTile::DESERT, 2))); |
15 | | - pieces.emplace(Coordinate(1, -2), unique_ptr<GamePiece>(new ResourceTile(*this, ResourceTile::GRAIN, 2))); |
16 | | - pieces.emplace(Coordinate(-1, 2), unique_ptr<GamePiece>(new ResourceTile(*this, ResourceTile::BRICK, 2))); |
| 15 | + init_resources(); |
17 | 16 | } |
18 | 17 |
|
19 | 18 | GameBoard::~GameBoard() { |
@@ -66,6 +65,60 @@ int GameBoard::constructFileFromBoard(std::ofstream &file){ |
66 | 65 | return 0; |
67 | 66 | } |
68 | 67 |
|
69 | | -const map<Coordinate, unique_ptr<GamePiece>>& GameBoard::getPieces() const { |
70 | | - return pieces; |
| 68 | +const map<Coordinate, unique_ptr<GamePiece>>& GameBoard::getResources() const { |
| 69 | + return resources; |
| 70 | +} |
| 71 | + |
| 72 | +std::vector<Settlement*> GameBoard::GetNeighboringSettlements(Coordinate location) { |
| 73 | + static Coordinate adjacentCoordDiffs[] = {Coordinate(0, 1), Coordinate(1, 0), Coordinate(1, -1), Coordinate(0, -1), Coordinate(-1, 0), Coordinate(-1, 1)}; |
| 74 | + std::vector<Settlement*> v; |
| 75 | + for(unsigned int i = 0; i < 6; i++) { |
| 76 | + const Coordinate& diff = adjacentCoordDiffs[i]; |
| 77 | + Coordinate adjacentPoint(location.first + diff.first, location.second + diff.second); |
| 78 | + auto it = resources.find(adjacentPoint); |
| 79 | + if(it != resources.end()) { |
| 80 | + GamePiece* piece = it->second.get(); |
| 81 | + if(dynamic_cast<Settlement*>(piece)) { |
| 82 | + v.push_back(static_cast<Settlement*>(piece)); |
| 83 | + } |
| 84 | + } |
| 85 | + } |
| 86 | + return v; |
71 | 87 | } |
| 88 | + |
| 89 | +/* initialize board with a set of resources. Right now, just creates a static tile arrangement to test |
| 90 | +URL: http://images.fanpop.com/images/image_uploads/Differents-Boards-settlers-of-catan-521934_1157_768.jpg*/ |
| 91 | + |
| 92 | +void GameBoard::init_resources() |
| 93 | +{ |
| 94 | + |
| 95 | + |
| 96 | + #ifdef DUMMY_BOARD |
| 97 | + ADD_RESOURCE(0, 1, BRICK, 2); |
| 98 | + ADD_RESOURCE(-2, 2, SHEEP, 5); |
| 99 | + ADD_RESOURCE(2, 0, WOOD, 6); |
| 100 | + ADD_RESOURCE(-3, 3, DESERT, 0); |
| 101 | + ADD_RESOURCE(-1, 3, SHEEP, 10); |
| 102 | + ADD_RESOURCE(1, 2, WHEAT, 9); |
| 103 | + ADD_RESOURCE(3, 1, WHEAT, 3); |
| 104 | + ADD_RESOURCE(-4, 6, WOOD, 8); |
| 105 | + ADD_RESOURCE(-2, 5, SHEEP, 3); |
| 106 | + ADD_RESOURCE(0, 4, STONE, 11); |
| 107 | + ADD_RESOURCE(2, 3, STONE, 4); |
| 108 | + ADD_RESOURCE(4, 2, SHEEP, 8); |
| 109 | + ADD_RESOURCE(-3, 7, BRICK, 4); |
| 110 | + ADD_RESOURCE(-1, 6, WHEAT, 6); |
| 111 | + ADD_RESOURCE(1, 5, WOOD, 5); |
| 112 | + ADD_RESOURCE(3, 4, BRICK, 10); |
| 113 | + ADD_RESOURCE(-2, 8, WOOD, 11); |
| 114 | + ADD_RESOURCE(0, 7, STONE, 12); |
| 115 | + ADD_RESOURCE(2, 6, WHEAT, 9); |
| 116 | + #endif |
| 117 | + |
| 118 | + |
| 119 | +} |
| 120 | + |
| 121 | +void GameBoard::PlaceSettlement(Coordinate location, Player& Owner){ |
| 122 | + corners[location] = std::unique_ptr<GamePiece>(new Settlement(*this, location, Owner)); |
| 123 | +} |
| 124 | + |
0 commit comments