Skip to content

Commit 82617ad

Browse files
committed
Added the 6/8 adjacency checking. Still need to implement test cases.
1 parent 5cf8dc1 commit 82617ad

File tree

2 files changed

+175
-1
lines changed

2 files changed

+175
-1
lines changed

include/GameBoard.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class GameBoard
2323
std::map<Coordinate, std::unique_ptr<GamePiece>> resources;
2424
std::vector<std::unique_ptr<const Road>> roads;
2525
void addResource(int x, int y, resourceType res, int val);
26+
bool checkRolls(int* rolls);
2627

2728
int constructBoardFromFile(std::ifstream &file);
2829
int constructFileFromBoard(std::ofstream &file);

src/GameBoard.cpp

Lines changed: 174 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,10 @@ void GameBoard::init_resources()
105105
random_shuffle(&resources[0], &resources[19]);
106106

107107
int rolls[] = {2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11};
108-
random_shuffle(&rolls[0], &rolls[18]);
108+
while !checkRolls(rolls)
109+
{
110+
random_shuffle(&rolls[0], &rolls[18]);
111+
}
109112

110113
int xcoords[] = {-2, 0, 2, -3, -1, 1, 3, -4, -2, 0, 2, 4, -3, -1, 1, 3, -2, 0, 2};
111114
int ycoords[] = { 2, 1, 0, 4, 3, 2, 1, 6, 5, 4, 3, 2, 7, 6, 5, 4, 8, 7, 6};
@@ -134,6 +137,7 @@ void GameBoard::PlaceSettlement(Coordinate location, Player& Owner){
134137

135138
/*
136139
* Adds a resource and roll tile combo to the board
140+
*
137141
* @param x The first coordinate
138142
* @param y The second coordinate
139143
* @param res The resource type to be added
@@ -144,3 +148,172 @@ void GameBoard::addResource(int x, int y, resourceType res, int val)
144148
this->resources[Coordinate(x,y)] = std::unique_ptr<GamePiece>(new ResourceTile(*this, Coordinate(x,y), res, val));
145149
}
146150

151+
/*
152+
* This method checks the array of roll tiles
153+
* and makes sure that there are no 6s or 8s next to eachother
154+
* for the placement scheme defined in init_resources.
155+
*
156+
* P.S. It's a giant clusterf...well, if you have any ideas on refactoring, please do
157+
*
158+
* @param rolls The array to check
159+
*/
160+
bool GameBoard::checkRolls(int* rolls)
161+
{
162+
if (rolls[0] == 6 || rolls[0] == 8)
163+
{
164+
if (rolls[1] == 6 || rolls[1] == 8)
165+
return false;
166+
if (rolls[3] == 6 || rolls[3] == 8)
167+
return false;
168+
if (rolls[4] == 6 || rolls[4] == 8)
169+
return false;
170+
}
171+
172+
if (rolls[1] == 6 || rolls[1] == 8)
173+
{
174+
if (rolls[2] == 6 || rolls[2] == 8)
175+
return false;
176+
if (rolls[4] == 6 || rolls[4] == 8)
177+
return false;
178+
if (rolls[5] == 6 || rolls[5] == 8)
179+
return false;
180+
}
181+
182+
if (rolls[2] == 6 || rolls[2] == 8)
183+
{
184+
if (rolls[5] == 6 || rolls[5] == 8)
185+
return false;
186+
if (rolls[6] == 6 || rolls[6] == 8)
187+
return false;
188+
}
189+
190+
if (rolls[3] == 6 || rolls[3] == 8)
191+
{
192+
if (rolls[7] == 6 || rolls[7] == 8)
193+
return false;
194+
if (rolls[8] == 6 || rolls[8] == 8)
195+
return false;
196+
if (rolls[4] == 6 || rolls[4] == 8)
197+
return false;
198+
}
199+
200+
if (rolls[4] == 6 || rolls[4] == 8)
201+
{
202+
if (rolls[8] == 6 || rolls[8] == 8)
203+
return false;
204+
if (rolls[9] == 6 || rolls[9] == 8)
205+
return false;
206+
if (rolls[5] == 6 || rolls[5] == 8)
207+
return false;
208+
}
209+
210+
if (rolls[5] == 6 || rolls[5] == 8)
211+
{
212+
if (rolls[9] == 6 || rolls[9] == 8)
213+
return false;
214+
if (rolls[10] == 6 || rolls[10] == 8)
215+
return false;
216+
if (rolls[6] == 6 || rolls[6] == 8)
217+
return false;
218+
}
219+
220+
if (rolls[6] == 6 || rolls[6] == 8)
221+
{
222+
if (rolls[10] == 6 || rolls[10] == 8)
223+
return false;
224+
if (rolls[11] == 6 || rolls[11] == 8)
225+
return false;
226+
}
227+
228+
if (rolls[7] == 6 || rolls[7] == 8)
229+
{
230+
if (rolls[12] == 6 || rolls[12] == 8)
231+
return false;
232+
if (rolls[8] == 6 || rolls[8] == 8)
233+
return false;
234+
}
235+
236+
if (rolls[8] == 6 || rolls[8] == 8)
237+
{
238+
if (rolls[12] == 6 || rolls[12] == 8)
239+
return false;
240+
if (rolls[13] == 6 || rolls[13] == 8)
241+
return false;
242+
if (rolls[9] == 6 || rolls[9] == 8)
243+
return false;
244+
}
245+
246+
if (rolls[9] == 6 || rolls[9] == 8)
247+
{
248+
if (rolls[13] == 6 || rolls[13] == 8)
249+
return false;
250+
if (rolls[14] == 6 || rolls[14] == 8)
251+
return false;
252+
if (rolls[10] == 6 || rolls[10] == 8)
253+
return false;
254+
}
255+
256+
if (rolls[10] == 6 || rolls[10] == 8)
257+
{
258+
if (rolls[14] == 6 || rolls[14] == 8)
259+
return false;
260+
if (rolls[15] == 6 || rolls[15] == 8)
261+
return false;
262+
if (rolls[11] == 6 || rolls[11] == 8)
263+
return false;
264+
}
265+
266+
if (rolls[11] == 6 || rolls[11] == 8)
267+
{
268+
if (rolls[15] == 6 || rolls[15] == 8)
269+
return false;
270+
}
271+
272+
if (rolls[12] == 6 || rolls[12] == 8)
273+
{
274+
if (rolls[16] == 6 || rolls[16] == 8)
275+
return false;
276+
if (rolls[13] == 6 || rolls[13] == 8)
277+
return false;
278+
}
279+
280+
if (rolls[13] == 6 || rolls[13] == 8)
281+
{
282+
if (rolls[16] == 6 || rolls[16] == 8)
283+
return false;
284+
if (rolls[17] == 6 || rolls[17] == 8)
285+
return false;
286+
if (rolls[14] == 6 || rolls[14] == 8)
287+
return false;
288+
}
289+
290+
if (rolls[14] == 6 || rolls[14] == 8)
291+
{
292+
if (rolls[17] == 6 || rolls[17] == 8)
293+
return false;
294+
if (rolls[18] == 6 || rolls[18] == 8)
295+
return false;
296+
if (rolls[15] == 6 || rolls[15] == 8)
297+
return false;
298+
}
299+
300+
if (rolls[15] == 6 || rolls[15] == 8)
301+
{
302+
if (rolls[18] == 6 || rolls[18] == 8)
303+
return false;
304+
}
305+
306+
if (rolls[16] == 6 || rolls[16] == 8)
307+
{
308+
if (rolls[17] == 6 || rolls[17] == 8)
309+
return false;
310+
}
311+
312+
if (rolls[17] == 6 || rolls[17] == 8)
313+
{
314+
if (rolls[18] == 6 || rolls[18] == 8)
315+
return false;
316+
}
317+
318+
return true;
319+
}

0 commit comments

Comments
 (0)