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