@@ -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