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
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):
if row < 0 or row > ShipField.field_size:
return
@ -71,20 +114,25 @@ class ShipField:
# проверим горизонталь
for c in range(col + 1, ShipField.field_size):
if self.check_ship(row, c):
ship_direction = ShipDirection.HORIZONTAL
else:
return False
elif self.check_empty(row, c):
break
for c in range(col + 1, ShipField.field_size):
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 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):
self.clear_marker()
@ -100,6 +148,7 @@ class ShipField:
shoot_result = self.shoot(row, col)
if shoot_result == ShootResult.KILLED:
self.mark_killed(row, col)
self.fill_empty_killed(row, col)
return shoot_result == ShootResult.EMPTY

View File

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