@@ -209,32 +209,73 @@ def initialize_myFleet():
209
209
i += 1
210
210
TelemetryClient .trackEvent ('Player_PlaceShipPosition' , {'custom_dimensions' : {'Position' : position_input , 'Ship' : ship .name , 'PositionInShip' : i }})
211
211
212
+
213
+ def overlaps (positions , fleet :List [Ship ]):
214
+ for ship in fleet :
215
+ for ship_pos in ship .positions :
216
+ if ship_pos in positions :
217
+ return True
218
+ return False
219
+
220
+ def set_forward_rear (ship_size , init_value , max_size ) -> int :
221
+ if init_value + ship_size - 1 > max_size :
222
+ if init_value - ship_size + 1 > 0 :
223
+ return - 1
224
+ else :
225
+ return 0
226
+ else :
227
+ return 1
228
+
229
+
230
+ def set_direction (random_position :Position ) -> Tuple [str ,int ]:
231
+ if random_position .row % 2 :
232
+ axis = "horizontal"
233
+ st_value = random_position .column .value
234
+ else :
235
+ axis = "vertical"
236
+ st_value = random_position .row
237
+ return axis , st_value
238
+
239
+ def place_this_ship (ship :Ship , st_point :Position , enemyFleet :List [Ship ]):
240
+ # Take a direction: either vertical or horizontal:
241
+ positions = []
242
+ positions .append (st_point )
243
+
244
+ axis , st_value = set_direction (st_point )
245
+ factor = set_forward_rear (ship .size , st_value , 8 )
246
+
247
+ if factor :
248
+ for i in range (1 ,ship .size ):
249
+ if axis == "horizontal" :
250
+ column = Letter (st_point .column .value + (i * factor ))
251
+ row = st_point .row
252
+ else :
253
+ column = st_point .column
254
+ row = st_point .row + (i * factor )
255
+ positions .append (Position (row = row ,column = column ))
256
+ else :
257
+ return False
258
+
259
+ if not overlaps (positions ,enemyFleet ):
260
+ # insert positions into the ship
261
+ for p in positions :
262
+ ship .positions .append (p )
263
+ return True
264
+ else :
265
+ return False
266
+
212
267
def initialize_enemyFleet ():
213
268
global enemyFleet
214
269
215
270
enemyFleet = GameController .initialize_ships ()
216
271
217
- enemyFleet [0 ].positions .append (Position (Letter .B , 4 ))
218
- enemyFleet [0 ].positions .append (Position (Letter .B , 5 ))
219
- enemyFleet [0 ].positions .append (Position (Letter .B , 6 ))
220
- enemyFleet [0 ].positions .append (Position (Letter .B , 7 ))
221
- enemyFleet [0 ].positions .append (Position (Letter .B , 8 ))
222
-
223
- enemyFleet [1 ].positions .append (Position (Letter .E , 6 ))
224
- enemyFleet [1 ].positions .append (Position (Letter .E , 7 ))
225
- enemyFleet [1 ].positions .append (Position (Letter .E , 8 ))
226
- enemyFleet [1 ].positions .append (Position (Letter .E , 9 ))
227
-
228
- enemyFleet [2 ].positions .append (Position (Letter .A , 3 ))
229
- enemyFleet [2 ].positions .append (Position (Letter .B , 3 ))
230
- enemyFleet [2 ].positions .append (Position (Letter .C , 3 ))
272
+ for ship in enemyFleet :
273
+ ship_strating_point = get_random_position ()
274
+ while not place_this_ship (ship ,ship_strating_point , enemyFleet ):
275
+ ship_strating_point = get_random_position ()
231
276
232
- enemyFleet [3 ].positions .append (Position (Letter .F , 8 ))
233
- enemyFleet [3 ].positions .append (Position (Letter .G , 8 ))
234
- enemyFleet [3 ].positions .append (Position (Letter .H , 8 ))
235
277
236
- enemyFleet [4 ].positions .append (Position (Letter .C , 5 ))
237
- enemyFleet [4 ].positions .append (Position (Letter .C , 6 ))
278
+ # print(enemyFleet)
238
279
239
280
def check_position_input (msg : str ):
240
281
string = input (msg )
0 commit comments