-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathboard.py
141 lines (113 loc) · 5.61 KB
/
board.py
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
"""Handles the board"""
from view import View
# board.py
class Board:
"""Handles the board"""
# define gameBoard
# a dictionary which contains all moves of the players
def __init__(self):
self.game_board = {}
self.view = View()
def clear(self):
"""set the game-board to default"""
letters = ["a", "b", "c"]
# game-board must contain a1, b1 c1, a2, b2, c2, a3, b3, c3
for i in range(3):
for letter in letters:
self.game_board[letter + str(i + 1)] = [" ", None]
def get_board(self):
"""returns the board"""
return self.game_board
def set_board(self, board):
"""sets the board"""
self.game_board = board
def show_board(self):
"""shows the game-board"""
# prints on every position the related symbol in self.gameBoard
# either X or O if a Player moved to this position
# of " " if none of the players have moved to this
output = " \n" \
" {} | {} | {} 3\n" \
"-----|-----|-----\n" \
" {} | {} | {} 2\n" \
"-----|-----|-----\n" \
" {} | {} | {} 1\n\n" \
" a b c".format(self.game_board["a3"][0],
self.game_board["b3"][0],
self.game_board["c3"][0],
self.game_board["a2"][0],
self.game_board["b2"][0],
self.game_board["c2"][0],
self.game_board["a1"][0],
self.game_board["b1"][0],
self.game_board["c1"][0])
return output
def is_winning(self):
"""check if a player wins"""
letters = ["a", "b", "c"]
red = '\033[91m'
end = '\033[0m'
# for horizontal lines
for letter in range(1, 4):
# if the field xi (for example a1, b1, c1) contains X or O
# and if the related fields are filled with X or O (depends on the player)
if self.game_board["a" + str(letter)][1] is not None \
and self.game_board["a" + str(letter)][1] == \
self.game_board["b" + str(letter)][1] and \
self.game_board["b" + str(letter)][1] == self.game_board["c" + str(letter)][1]:
# returns the player number
self.game_board["a" + str(letter)][0] = \
red + self.game_board["a" + str(letter)][0] + end
self.game_board["b" + str(letter)][0] = \
red + self.game_board["b" + str(letter)][0] + end
self.game_board["c" + str(letter)][0] = \
red + self.game_board["c" + str(letter)][0] + end
return str(self.game_board["a" + str(letter)][1])
# for Vertical lines
for letter in letters:
# if the field ix (for example a1, a2, a3) contains X or O
# and if the related fields are filled with X or O (depends on the player)
if self.game_board[letter + str(1)][1] is not None \
and self.game_board[letter + str(1)][1] == \
self.game_board[letter + str(2)][1] and \
self.game_board[letter + str(2)][1] == self.game_board[letter + str(3)][1]:
# returns the player number
self.game_board[letter + str(1)][0] = \
red + self.game_board[letter + str(1)][0] + end
self.game_board[letter + str(2)][0] = \
red + self.game_board[letter + str(2)][0] + end
self.game_board[letter + str(3)][0] = \
red + self.game_board[letter + str(3)][0] + end
return str(self.game_board[letter + str(1)][1])
# for diagonal lines
# if the fields a1, b2, c3 got the same symbol (X or O)
if self.game_board["a1"][1] is not None \
and self.game_board["a1"][1] == self.game_board["b2"][1] and \
self.game_board["b2"][1] == self.game_board["c3"][1]:
# returns the player number
self.game_board["a1"][0] = red + self.game_board["a1"][0] + end
self.game_board["b2"][0] = red + self.game_board["b2"][0] + end
self.game_board["c3"][0] = red + self.game_board["c3"][0] + end
return str(self.game_board["a1"][1])
# if the fields c1, b2, a3 got the same symbol (X or O)
if self.game_board["c1"][1] is not None \
and self.game_board["c1"][1] == self.game_board["b2"][1] and \
self.game_board["b2"][1] == self.game_board["a3"][1]:
# returns the player number
self.game_board["c1"][0] = red + self.game_board["c1"][0] + end
self.game_board["b2"][0] = red + self.game_board["b2"][0] + end
self.game_board["a3"][0] = red + self.game_board["a3"][0] + end
return str(self.game_board["c1"][1])
# check if the game board is full
full = True
# for all positions in the game board
for letter in letters:
for integer in range(1, 4):
# if there's a field which is free, set full to False
if self.game_board[letter + str(integer)][0] == " ":
full = False
# if the game board is full, return -1
if full:
return -1
# if none of the players won, return False
return False