From 05a26bd99db0ad3df6411d79c186bad491a8603b Mon Sep 17 00:00:00 2001 From: G-Aleixo Date: Thu, 5 Dec 2024 17:39:58 -0300 Subject: [PATCH] Move drawing functions into static class --- src/game.py | 86 ++++++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/src/game.py b/src/game.py index 4b23816..5bb7270 100644 --- a/src/game.py +++ b/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)] +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: def __init__(self, board_size: int, enemy_amount: int = 5) -> None: 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 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: - self.draw_ships() - self.draw_shots() - self.draw_board() + DrawerHelper.draw_ships(self.my_drawn_board, self.my_ships) + DrawerHelper.draw_shots(self.my_drawn_board, self.hit_ships) + DrawerHelper.draw_board(self.my_drawn_board) def hit(self, x: int, y: int, state: int) -> None: self.hit_ships[x][y] = state def shoot(self, x: int, y: int) -> int: """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 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() \ No newline at end of file