@@ -209,32 +209,73 @@ def initialize_myFleet():
209209 i += 1
210210 TelemetryClient .trackEvent ('Player_PlaceShipPosition' , {'custom_dimensions' : {'Position' : position_input , 'Ship' : ship .name , 'PositionInShip' : i }})
211211
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+
212267def initialize_enemyFleet ():
213268 global enemyFleet
214269
215270 enemyFleet = GameController .initialize_ships ()
216271
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 ()
231276
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 ))
235277
236- enemyFleet [4 ].positions .append (Position (Letter .C , 5 ))
237- enemyFleet [4 ].positions .append (Position (Letter .C , 6 ))
278+ # print(enemyFleet)
238279
239280def check_position_input (msg : str ):
240281 string = input (msg )
0 commit comments