Skip to content

Commit 06bb9cc

Browse files
8 moved map implementation into source file, simplified map class (#12)
Co-authored-by: Kacu <kacper.kaleta@scythe-studio.com>
1 parent 09391a3 commit 06bb9cc

File tree

3 files changed

+41
-47
lines changed

3 files changed

+41
-47
lines changed

shm/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ project(SHM)
1010

1111
# set executables
1212
set(THIS_PROJECT_SRC_DIRECTORIES
13+
source/Map.cpp
1314
)
1415
set(THIS_PROJECT_TESTS_DIRECTORIES
1516
)
@@ -18,7 +19,7 @@ set(THIS_PROJECT_TESTS_DIRECTORIES
1819
set(THIS_PROJECT_FLAGS
1920
-Wall
2021
-Werror
21-
-Weffc++
22+
#-Weffc++
2223
-Wextra
2324
-pedantic
2425
-Wconversion

shm/source/Map.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include "Map.hpp"
2+
3+
4+
Map::Map():
5+
horizonLimit_(100),
6+
islands_(generateIslands(10)),
7+
currentPosition_()
8+
{}
9+
10+
Island* Map::getIsland(const Island::Coordinates& coordinate) {
11+
auto result = std::find_if(islands_.begin(), islands_.end(), [coordinate](const Island& island){ return island.getPosition() == coordinate; });
12+
if (result != islands_.end()) {
13+
return &(*result);
14+
}
15+
return nullptr;
16+
}
17+
18+
std::vector<Island> Map::generateIslands(const size_t numberOfIslands) const {
19+
if (numberOfIslands < 1) {
20+
return {};
21+
}
22+
auto xyPositions = generateRandomPositions(numberOfIslands * 2);
23+
std::vector<Island> islands;
24+
islands.reserve(xyPositions.size() / 2);
25+
for (size_t i = 1; i < xyPositions.size(); i += 2) {
26+
islands.emplace_back(Island::Coordinates(xyPositions.at(i - 1), xyPositions.at(i)));
27+
}
28+
return islands;
29+
}
30+
31+
std::vector<int> Map::generateRandomPositions(const size_t numberOfPositions) const {
32+
auto positions = Fortune::getNumbersEvenlyDistributed(0, static_cast<int>(horizonLimit_), static_cast<int>(numberOfPositions));
33+
Fortune::shuffle(positions);
34+
return positions;
35+
}

shm/source/Map.hpp

Lines changed: 4 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -11,53 +11,11 @@ class Map {
1111
Island* currentPosition_;
1212

1313
public:
14-
Map():
15-
horizonLimit_(100),
16-
islands_(generateIslands(10)),
17-
currentPosition_()
18-
{}
14+
Map();
1915

20-
Map(const Map& map):
21-
horizonLimit_(map.horizonLimit_),
22-
islands_(map.islands_),
23-
currentPosition_(map.currentPosition_)
24-
{}
25-
26-
Map& operator=(const Map& map) {
27-
horizonLimit_ = map.horizonLimit_;
28-
islands_ = map.islands_;
29-
currentPosition_ = currentPosition_;
30-
return *this;
31-
}
32-
33-
Island* getIsland(const Island::Coordinates& coordinate) {
34-
for (auto& island : islands_) {
35-
if (island.getPosition() == coordinate) {
36-
return &island;
37-
}
38-
}
39-
return nullptr;
40-
}
16+
Island* getIsland(const Island::Coordinates& coordinate);
4117

4218
private:
43-
std::vector<Island> generateIslands(const size_t numberOfIslands) const {
44-
if (numberOfIslands < 1) {
45-
return {};
46-
}
47-
auto xyPositions = generateRandomPositions(numberOfIslands);
48-
std::vector<Island> islands;
49-
islands.reserve(xyPositions.size() / 2);
50-
for (size_t i = 1; i < xyPositions.size(); i += 2) {
51-
islands.emplace_back(Island::Coordinates(xyPositions.at(i - 1), xyPositions.at(i)));
52-
}
53-
return islands;
54-
}
55-
56-
std::vector<int> generateRandomPositions(const size_t n) const {
57-
auto positions = Fortune::getNumbersEvenlyDistributed(0, static_cast<int>(horizonLimit_), static_cast<int>(n));
58-
auto yPositions = Fortune::getNumbersEvenlyDistributed(0, static_cast<int>(horizonLimit_), static_cast<int>(n));
59-
positions.insert(positions.end(), yPositions.begin(), yPositions.end());
60-
Fortune::shuffle(positions);
61-
return positions;
62-
}
19+
std::vector<Island> generateIslands(const size_t numberOfIslands) const;
20+
std::vector<int> generateRandomPositions(const size_t n) const;
6321
};

0 commit comments

Comments
 (0)