-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame.py
More file actions
62 lines (55 loc) · 2.26 KB
/
Copy pathgame.py
File metadata and controls
62 lines (55 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from board import GameBoard
from board_renderer import GameBoardRenderer
from player_manager import PlayerManager
from game_rule import GameRule
from game_mode import GameMode
from io_controller import IOController
class Game:
def __init__(self) -> None:
self.game_mode = self.select_mode()
self.player_manager = PlayerManager(self.game_mode)
self.board = GameBoard()
def play(self):
self.player_manager.set_players()
self.display_initial_text()
while True:
try:
player = self.player_manager.get_current_player()
print(f"{player.get_name()}'s turn\n")
#player.make_move(self.board)
row, column = player.get_mark_position(self.board)
if self.board.is_empty(row, column):
self.board.set_mark(row, column, player.get_mark())
else:
raise ValueError("The position is already marked. Please choose an empty cell.")
GameBoardRenderer(self.board).render()
if GameRule.is_over(self.board):
break
self.player_manager.move_to_next_player()
except ValueError or IndexError as e:
print(str(e))
continue
except Exception as e:
print(f"Unexpected Error {e}")
exit(1)
if GameRule.has_winner(self.board):
print(f"{player.name} win")
return
elif GameRule.is_draw(self.board):
print("draw game")
return
def display_initial_text(self):
print("TicTacToe Game START!\n")
GameBoardRenderer(self.board).render()
def select_mode(self) -> GameMode:
while True:
try:
game_mode = [str(mode.name) +": "+ str(mode.value) for mode in GameMode]
user_input = IOController.get_integer_input(
str(game_mode) + "\n Select Game mode: "
)
mode_range = range(1, len(GameMode) + 1)
if IOController.validate_input_range(user_input, mode_range):
return GameMode(int(user_input))
except ValueError as e:
print(str(e))