forked from 20241144010013/20241144010013
Move drawing functions into static class
This commit is contained in:
parent
0ee1082c6d
commit
05a26bd99d
86
src/game.py
86
src/game.py
|
@ -2,6 +2,43 @@ def make_board(size: int, filler = 0) -> list:
|
||||||
return [[filler for _ in range(size)] for _ in range(size)]
|
return [[filler for _ in range(size)] for _ in range(size)]
|
||||||
|
|
||||||
|
|
||||||
|
class DrawerHelper:
|
||||||
|
@staticmethod
|
||||||
|
def draw_columnsnrows(board) -> None:
|
||||||
|
max_num_len = len(str(len(board) - 1))
|
||||||
|
|
||||||
|
# Currently inserts the columns and rows into the board
|
||||||
|
for i in range(len(board)):
|
||||||
|
for j in range(len(board[i])):
|
||||||
|
if i == 0 and j == 0:
|
||||||
|
board[i][j] = " " * max_num_len
|
||||||
|
elif i == 0:
|
||||||
|
board[i][j] = chr(j + 64)
|
||||||
|
elif j == 0:
|
||||||
|
board[i][j] = str(i).rjust(max_num_len)
|
||||||
|
else:
|
||||||
|
board[i][j] = " "
|
||||||
|
|
||||||
|
def draw_ships(board, ships) -> None:
|
||||||
|
for i in range(len(ships)):
|
||||||
|
for j in range(len(ships[i])):
|
||||||
|
if ships[i][j] == 1:
|
||||||
|
board[i + 1][j + 1] = "B"
|
||||||
|
|
||||||
|
def draw_shots(board, hit_ships) -> None:
|
||||||
|
for i in range(len(hit_ships)):
|
||||||
|
for j in range(len(hit_ships[i])):
|
||||||
|
if hit_ships[i][j] == 1:
|
||||||
|
board[i + 1][j + 1] = "X"
|
||||||
|
if hit_ships[i][j] == -1:
|
||||||
|
board[i + 1][j + 1] = "O"
|
||||||
|
|
||||||
|
def draw_board(board) -> None:
|
||||||
|
for i in range(len(board)):
|
||||||
|
for j in range(len(board[i])):
|
||||||
|
print(board[i][j], end=" ")
|
||||||
|
print()
|
||||||
|
|
||||||
class Game:
|
class Game:
|
||||||
def __init__(self, board_size: int, enemy_amount: int = 5) -> None:
|
def __init__(self, board_size: int, enemy_amount: int = 5) -> None:
|
||||||
self.my_ships = make_board(board_size)
|
self.my_ships = make_board(board_size)
|
||||||
|
@ -18,58 +55,25 @@ class Game:
|
||||||
# Get the enemy amount based on the amount of ships that are not hit in the hit ships var
|
# Get the enemy amount based on the amount of ships that are not hit in the hit ships var
|
||||||
return self.total_enemy_amount - sum([row.count(1) for row in self.hit_ships])
|
return self.total_enemy_amount - sum([row.count(1) for row in self.hit_ships])
|
||||||
|
|
||||||
def setup_drawn_board(self) -> None:
|
|
||||||
max_num_len = len(str(len(self.my_drawn_board) - 1))
|
|
||||||
|
|
||||||
# Currently inserts the columns and rows into the board
|
|
||||||
for i in range(len(self.my_drawn_board)):
|
|
||||||
for j in range(len(self.my_drawn_board[i])):
|
|
||||||
if i == 0 and j == 0:
|
|
||||||
self.my_drawn_board[i][j] = " " * max_num_len
|
|
||||||
elif i == 0:
|
|
||||||
self.my_drawn_board[i][j] = chr(j + 64)
|
|
||||||
elif j == 0:
|
|
||||||
self.my_drawn_board[i][j] = str(i).rjust(max_num_len)
|
|
||||||
else:
|
|
||||||
self.my_drawn_board[i][j] = " "
|
|
||||||
|
|
||||||
def draw_ships(self) -> None:
|
|
||||||
for i in range(len(self.ships)):
|
|
||||||
for j in range(len(self.ships[i])):
|
|
||||||
if self.ships[i][j] == 1:
|
|
||||||
self.my_drawn_board[i + 1][j + 1] = "B"
|
|
||||||
|
|
||||||
def draw_shots(self) -> None:
|
|
||||||
for i in range(len(self.hit_ships)):
|
|
||||||
for j in range(len(self.hit_ships[i])):
|
|
||||||
if self.hit_ships[i][j] == 1:
|
|
||||||
self.my_drawn_board[i + 1][j + 1] = "O"
|
|
||||||
if self.hit_ships[i][j] == -1:
|
|
||||||
self.my_drawn_board[i + 1][j + 1] = "X"
|
|
||||||
|
|
||||||
def draw_board(self) -> None:
|
|
||||||
for i in range(len(self.my_drawn_board)):
|
|
||||||
for j in range(len(self.my_drawn_board[i])):
|
|
||||||
print(self.my_drawn_board[i][j], end=" ")
|
|
||||||
print()
|
|
||||||
|
|
||||||
def draw(self) -> None:
|
def draw(self) -> None:
|
||||||
self.draw_ships()
|
DrawerHelper.draw_ships(self.my_drawn_board, self.my_ships)
|
||||||
self.draw_shots()
|
DrawerHelper.draw_shots(self.my_drawn_board, self.hit_ships)
|
||||||
self.draw_board()
|
DrawerHelper.draw_board(self.my_drawn_board)
|
||||||
|
|
||||||
def hit(self, x: int, y: int, state: int) -> None:
|
def hit(self, x: int, y: int, state: int) -> None:
|
||||||
self.hit_ships[x][y] = state
|
self.hit_ships[x][y] = state
|
||||||
|
|
||||||
def shoot(self, x: int, y: int) -> int:
|
def shoot(self, x: int, y: int) -> int:
|
||||||
"""Shot at own board and return hit or not hit"""
|
"""Shot at own board and return hit or not hit"""
|
||||||
if self.ships[x][y] == 1:
|
if self.my_ships[x][y] == 1:
|
||||||
return 1
|
return 1
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
na = Game(5)
|
na = Game(5)
|
||||||
na.setup_drawn_board()
|
DrawerHelper.draw_columnsnrows(na.my_drawn_board)
|
||||||
|
|
||||||
na.ships[2][2] = 1
|
na.my_ships[2][2] = 1
|
||||||
|
|
||||||
|
na.hit(1, 2, na.shoot(1, 2))
|
||||||
|
|
||||||
na.draw()
|
na.draw()
|
Loading…
Reference in New Issue