Lesson results commit
This commit is contained in:
parent
2c11d6d0dc
commit
0220d839e2
|
@ -43,6 +43,89 @@ class ShipField:
|
|||
|
||||
return None
|
||||
|
||||
def mark_killed(self, row, col):
|
||||
if row < 0 or row > ShipField.field_size:
|
||||
return
|
||||
if col < 0 or col > ShipField.field_size:
|
||||
return
|
||||
|
||||
self.mark_one_killed(row, col)
|
||||
|
||||
# check vertical
|
||||
for r in range(row + 1, ShipField.field_size):
|
||||
if self.check_damaged(r, col):
|
||||
self.mark_one_killed(r, col)
|
||||
else:
|
||||
break
|
||||
|
||||
for r in range(row - 1, -1, -1):
|
||||
if self.check_damaged(r, col):
|
||||
self.mark_one_killed(r, col)
|
||||
else:
|
||||
break
|
||||
|
||||
# check horizontal
|
||||
for c in range(col + 1, ShipField.field_size):
|
||||
if self.check_damaged(row, c):
|
||||
self.mark_one_killed(row, c)
|
||||
else:
|
||||
break
|
||||
|
||||
for c in range(col - 1, - 1, -1):
|
||||
if self.check_damaged(row, c):
|
||||
self.mark_one_killed(row, c)
|
||||
else:
|
||||
break
|
||||
|
||||
def check_killed(self, row, col):
|
||||
if row < 0 or row > ShipField.field_size:
|
||||
return
|
||||
if col < 0 or col > ShipField.field_size:
|
||||
return
|
||||
|
||||
# check vertical
|
||||
for r in range(row + 1, ShipField.field_size):
|
||||
if self.check_ship(r, col):
|
||||
return False
|
||||
|
||||
elif self.check_empty(r, col):
|
||||
break
|
||||
|
||||
for r in range(row - 1, -1, -1):
|
||||
if self.check_ship(r, col):
|
||||
return False
|
||||
|
||||
elif self.check_empty(r, col):
|
||||
break
|
||||
|
||||
# check horizontal
|
||||
for c in range(col + 1, ShipField.field_size):
|
||||
if self.check_ship(row, c):
|
||||
return False
|
||||
|
||||
elif self.check_empty(row, c):
|
||||
break
|
||||
|
||||
for c in range(col - 1, - 1, -1):
|
||||
if self.check_ship(row, c):
|
||||
return False
|
||||
|
||||
elif self.check_empty(row, c):
|
||||
break
|
||||
|
||||
return True
|
||||
|
||||
def mark_one_killed(self, row, col):
|
||||
self.field[row * ShipField.field_size + col] = 'X'
|
||||
for r in range(row - 1, row + 2):
|
||||
if r < 0 or r > ShipField.field_size:
|
||||
break
|
||||
for c in range(col - 1, col + 2):
|
||||
if c < 0 or c > ShipField.field_size:
|
||||
break
|
||||
if self.check_empty(r, c):
|
||||
self.field[r * ShipField.field_size + c] = '0'
|
||||
|
||||
def action(self, row, col):
|
||||
self.clear_marker()
|
||||
|
||||
|
@ -55,6 +138,10 @@ class ShipField:
|
|||
|
||||
elif self.field_mode == ShipMode.SHOOT:
|
||||
shoot_result = self.shoot(row, col)
|
||||
|
||||
if shoot_result == ShootResult.KILLED:
|
||||
self.mark_killed(row, col)
|
||||
|
||||
return shoot_result == ShootResult.EMPTY
|
||||
|
||||
return False
|
||||
|
@ -175,6 +262,8 @@ class ShipField:
|
|||
return ShootResult.EMPTY
|
||||
elif (self.field[index]).strip() == "1":
|
||||
self.field[index] = "\\"
|
||||
if self.check_killed(row, col):
|
||||
return ShootResult.KILLED
|
||||
return ShootResult.DAMAGED
|
||||
else:
|
||||
return ShootResult.UNDEFINED
|
||||
|
@ -182,6 +271,13 @@ class ShipField:
|
|||
def check_ship(self, row, col):
|
||||
return self.field[row * ShipField.field_size + col].strip() == '1'
|
||||
|
||||
def check_damaged(self, row, col):
|
||||
return self.field[row * ShipField.field_size + col].strip() == '\\'
|
||||
|
||||
def check_empty(self, row, col):
|
||||
cell = self.field[row * ShipField.field_size + col].strip()
|
||||
return cell == '0' or cell == ''
|
||||
|
||||
def check_end(self):
|
||||
return '1' not in self.field
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
{"shipField": {"field": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "1", "", "", " ", "1", "", "1", " ", " ", " ", "1", "", "", " ", "1", "", "1", " ", " ", " ", "1", "", "", " ", "1", "", "1", " ", "", " ", "1", "", "", " ", "", " ", " ", " ", " ", "", " ", "", "1", "1", "", "1", "1", "", " ", "1", "1", "", "", "", " ", "", " ", "", " ", "", "", "", "", " ", " ", " ", " ", "", " ", "", "1", "", "1", " ", "1", " ", "1", " ", " ", " ", " ", "", "", " ", " ", " ", " ", " ", " "], "ships": [], "field_mode": "PUT", "ship_size": 2, "ship_direction": "HORIZONTAL"}}
|
|
@ -49,6 +49,8 @@ def colorize(view):
|
|||
bg = 'pink'
|
||||
if field.field[i] == "\\":
|
||||
bg = 'grey'
|
||||
if field.field[i] == "X":
|
||||
bg = 'red'
|
||||
if field.field[i] == "0":
|
||||
bg = 'black'
|
||||
if field.field[i] == "p":
|
||||
|
@ -80,7 +82,7 @@ def left_button_click(view, row, col):
|
|||
# Ход соперника
|
||||
enemy_shoot_result = ShootResult.UNDEFINED
|
||||
while enemy_shoot_result != ShootResult.EMPTY:
|
||||
my_row = random.randint(0, ShipField.field_size)
|
||||
my_row = random.randint(0, ShipField.field_size - 1)
|
||||
my_col = random.randint(0, ShipField.field_size - 1)
|
||||
|
||||
enemy_shoot_result = my_view.ship_field.shoot(my_row, my_col)
|
||||
|
@ -161,6 +163,8 @@ def next_game_mode():
|
|||
game_mode = GameMode.BATTLE
|
||||
elif game_mode == GameMode.BATTLE:
|
||||
game_mode = GameMode.END
|
||||
elif game_mode == GameMode.END:
|
||||
game_mode = GameMode.MENU
|
||||
|
||||
update_game_mode()
|
||||
|
||||
|
@ -179,6 +183,7 @@ def update_game_mode():
|
|||
savebutton.grid_forget()
|
||||
loadbutton.grid_forget()
|
||||
|
||||
start_button.configure(text="START")
|
||||
start_button.grid(column=start_column_enemy_field, row=load_button_row, columnspan=4)
|
||||
load_game_button.grid(column=start_column_enemy_field, row=load_button_row + 1, columnspan=4)
|
||||
exit_button.grid(column=start_column_enemy_field, row=load_button_row + 2, columnspan=4)
|
||||
|
@ -189,6 +194,9 @@ def update_game_mode():
|
|||
elif game_mode == GameMode.PLAN:
|
||||
window.geometry('1020x640')
|
||||
|
||||
my_view.ship_field = ShipField()
|
||||
enemy_view.ship_field = ShipField()
|
||||
|
||||
load_field(enemy_view, "default.json")
|
||||
|
||||
my_view.ship_field.set_field_mode(ShipMode.PUT)
|
||||
|
@ -200,6 +208,7 @@ def update_game_mode():
|
|||
savebutton.grid(column=start_column_my_field, row=load_button_row, columnspan=4)
|
||||
loadbutton.grid(column=start_column_my_field + 6, row=load_button_row, columnspan=4)
|
||||
|
||||
start_button.configure(text="START")
|
||||
start_button.grid(column=start_column_my_field, row=load_button_row + 1, columnspan=4)
|
||||
load_game_button.grid_forget()
|
||||
exit_button.grid_forget()
|
||||
|
@ -238,7 +247,8 @@ def update_game_mode():
|
|||
savebutton.grid_forget()
|
||||
loadbutton.grid_forget()
|
||||
|
||||
start_button.grid_forget()
|
||||
start_button.configure(text="BACK TO MENU")
|
||||
start_button.grid(column=start_column_enemy_field, row=load_button_row, columnspan=4)
|
||||
load_game_button.grid_forget()
|
||||
exit_button.grid_forget()
|
||||
|
||||
|
|
Loading…
Reference in New Issue