-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.py
116 lines (108 loc) · 3.51 KB
/
test.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
def check(board,turn):
for row in range(3) :
if (board[row][0] == board[row][1] and board[row][1] == board[row][2]) :
if board[row][0]!="_":
if turn==1:
return "player"
else:
return "computer"
for col in range(3) :
if (board[0][col] == board[1][col] and board[1][col] == board[2][col]) :
if board[0][col]!="_":
if turn==1:
return "player"
else:
return "computer"
if (board[0][0] == board[1][1] and board[1][1] == board[2][2]) :
if board[0][0]!="_":
if turn==1:
return "player"
else:
return "computer"
if (board[0][2] == board[1][1] and board[1][1] == board[2][0]) :
if board[1][1]!="_":
if turn==1:
return "player"
else:
return "computer"
for i in range(3):
for j in range(3):
if board[i][j]=="_":
return None
return "draw"
def minimax(board, depth, turn):
score=evaluate(board,turn)
if score==10:
return score
if score==-10:
return score
if check(board,turn)=="draw":
return 0
if turn==1:
bestVal=-1000
for i in range(3):
for j in range(3):
if board[i][j]=="_":
board[i][j]="x"
value=minimax(board,depth+1,1-turn)
bestVal=max(bestVal,value)
board[i][j]="_"
return bestVal
else:
bestVal=1000
for i in range(3):
for j in range(3):
if board[i][j]=="_":
board[i][j]="o"
value=minimax(board,depth+1,1-turn)
bestVal=min(bestVal,value)
board[i][j]="_"
return bestVal
def evaluate(board,turn):
for row in range(3) :
if (board[row][0] == board[row][1] and board[row][1] == board[row][2]) :
if board[row][0]!="_":
if turn==0:
return 10
else:
return -10
for col in range(3) :
if (board[0][col] == board[1][col] and board[1][col] == board[2][col]) :
if board[0][col]!="_":
if turn==0:
return 10
else:
return -10
if (board[0][0] == board[1][1] and board[1][1] == board[2][2]) :
if board[0][0]!="_":
if turn==0:
return 10
else:
return -10
if (board[0][2] == board[1][1] and board[1][1] == board[2][0]) :
if board[1][1]!="_":
if turn==0:
return 10
else:
return -10
return 0
def best_move(board):
bestMove=None
bestVal=-1000
for i in range(3):
for j in range(3):
if board[i][j]=="_":
board[i][j]="x"
value=minimax(board,0,0)
print(value)
board[i][j]="_"
if value>bestVal:
bestMove=str(i)+str(j)
bestVal=value
return bestMove
board=[
['_','x','x'],
['o','_','o'],
['_','o','_']
]
print(best_move(board))