-
Notifications
You must be signed in to change notification settings - Fork 0
/
game_handler.py
130 lines (102 loc) · 3.81 KB
/
game_handler.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
import random_ai
from time import sleep
class game_handler():
def __init__(self, board, zobrist, red, yellow, delay, print):
self.board = board
self.zobrist = zobrist
self.red = red # red (X)
self.yellow = yellow # yellow (O)
self.delay = delay
self.print = print
self.first = False
def play_round(self):
if self.print and not self.first:
print("----NEW GAME----")
print(self.board)
elif self.print:
print(self.board)
self.first = True
winner = ''
while True:
# Sentinel value
column_choice = -1
if self.print:
print("Red's turn! (X)")
#column_choice = input("Enter column: ")
if not self.board.find_empty_columns():
if self.print:
print("WE HAVE TIED")
winner = "T"
break
column_choice = self.red.get_answer(self.board.find_empty_columns(), self.board, self.zobrist)
if self.print:
print("RED'S CHOICE IS:", column_choice)
if not self.board.find_empty_columns():
if self.print:
print("WE HAVE TIED")
winner = "T"
break
self.board.add_piece("X", column_choice, self.zobrist)
self.board.last_column = column_choice
if self.print:
print(self.board)
# Now check if there is a win, if so it must be red cause they just placed a piece
# if self.board.check_win():
# if self.print:
# print("Red (X) won!")
# winner = 'X'
# break
# TODO: Add the check win to the bots, specifically make it so this only gets called if
# minimax knows it has won
if self.board.check_win_optimized(column_choice):
if self.print:
print("Red (X) won!")
winner = 'X'
break
# Delay for easier viewing
if self.delay != 0:
sleep(self.delay)
# Same as above, just yellow's turn now
if self.print:
print("Yellow's turn! (O)")
if not self.board.find_empty_columns():
if self.print:
print("WE HAVE TIED")
winner = "T"
break
#column_choice = input("Enter column: ")
column_choice = self.yellow.get_answer(self.board.find_empty_columns(), self.board, self.zobrist)
if self.print:
print("YELLOW'S CHOICE IS:", column_choice)
if column_choice == -1:
if self.print:
print("WE HAVE TIED")
winner = "T"
break
else:
self.board.add_piece("O", column_choice, self.zobrist)
self.board.last_column = column_choice
if self.print:
print(self.board)
# if self.board.check_win():
# if self.print:
# print("Yellow (O) won!")
# winner = 'O'
# break
if self.board.check_win_optimized(column_choice):
if self.print:
print("Yellow (O) won!")
winner = 'O'
break
# Delay for easier viewing
if self.delay != 0:
sleep(self.delay)
if self.print:
if winner == "X":
print("RED WON")
elif winner == "O":
print("YELLOW WON")
else:
print("TIEEEEEE")
print(self.board)
return winner