add kill check & kill marker

This commit is contained in:
ehermakov 2024-07-21 20:40:04 +03:00
parent 112b9a1394
commit feb25bb48f
20 changed files with 1125 additions and 1074 deletions

BIN
.DS_Store vendored

Binary file not shown.

BIN
HNS/.DS_Store vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -44,6 +44,49 @@ 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.field[row * ShipField.field_size + col] = 'x'
self.fill_empty_killed(row, col)
#check vertical
for r in range(row + 1, ShipField.field_size):
if self.check_damaged(r, col):
self.field[r * ShipField.field_size + col] = 'x'
self.fill_empty_killed(r, col)
else:
break
for r in range(row - 1, -1, -1):
if self.check_damaged(r, col):
self.field[r * ShipField.field_size + col] = 'x'
self.fill_empty_killed(r, col)
else:
break
# проверим горизонталь
for c in range(col + 1, ShipField.field_size):
if self.check_damaged(row, c):
self.field[row * ShipField.field_size + c] = 'x'
self.fill_empty_killed(row, c)
else:
break
for c in range(col - 1, -1, -1):
if self.check_damaged(row, c):
self.field[row * ShipField.field_size + c] = 'x'
self.fill_empty_killed(row, c)
else:
break
def check_killed(self, row, col): def check_killed(self, row, col):
if row < 0 or row > ShipField.field_size: if row < 0 or row > ShipField.field_size:
return return
@ -71,20 +114,25 @@ class ShipField:
# проверим горизонталь # проверим горизонталь
for c in range(col + 1, ShipField.field_size): for c in range(col + 1, ShipField.field_size):
if self.check_ship(row, c): if self.check_ship(row, c):
ship_direction = ShipDirection.HORIZONTAL return False
else:
elif self.check_empty(row, c):
break break
for c in range(col + 1, ShipField.field_size): for c in range(col - 1, -1, -1):
if self.check_ship(row, c): if self.check_ship(row, c):
return False return False
elif self.check_empty(row, c): elif self.check_empty(row, c):
break break
return True return True
def fill_empty_killed(self, row, col): def fill_empty_killed(self, row, col):
pass for r in range(row - 1, row + 2):
for c in range(col - 1, col + 2):
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()
@ -100,6 +148,7 @@ class ShipField:
shoot_result = self.shoot(row, col) shoot_result = self.shoot(row, col)
if shoot_result == ShootResult.KILLED: if shoot_result == ShootResult.KILLED:
self.mark_killed(row, col)
self.fill_empty_killed(row, col) self.fill_empty_killed(row, col)
return shoot_result == ShootResult.EMPTY return shoot_result == ShootResult.EMPTY

View File

@ -48,6 +48,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":