Skip to content

Commit 891e43e

Browse files
arturos-inaitCDaffyJr
authored andcommitted
replace of initialize_enemyFLeet() to get random-and-valid positions
1 parent d5cf85b commit 891e43e

File tree

1 file changed

+60
-19
lines changed

1 file changed

+60
-19
lines changed

torpydo/battleship.py

Lines changed: 60 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
212267
def 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

239280
def check_position_input(msg: str):
240281
string = input(msg)

0 commit comments

Comments
 (0)