Created
May 22, 2018 18:04
-
-
Save bessalahAmar/74020532456143d4b3083f34218df760 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import copy | |
import sys | |
def print_nod(node): | |
for i in range(0,3): | |
print(node[i]) | |
def children(node, player): | |
tab =[] | |
for i in range(0,3): | |
for j in range(0,3): | |
if(node[i][j]==0): | |
temp = copy.deepcopy(node) | |
temp[i][j]=player | |
tab.append(temp) | |
return tab | |
def minimax(node, player): | |
if(win_node(node,1)) : | |
return [1,[]] | |
else: | |
if(win_node(node,-1)): | |
return [-1,[]] | |
else: | |
if(full_matrix(node)): | |
return [0,[]] | |
if(player==1): | |
bestValue = -sys.maxsize | |
enfants = children(node,player) | |
for child in enfants: | |
v = minimax(child,-1)[0] | |
if(v>bestValue): | |
bestValue = v | |
bestChild = child | |
return [bestValue,bestChild] | |
else: | |
bestValue = sys.maxsize | |
enfants = children(node, player) | |
for child in enfants: | |
v = minimax(child, 1)[0] | |
if (v < bestValue): | |
bestValue = v | |
bestChild = child | |
return [bestValue, bestChild] | |
def win_node(node,sign): | |
if (node[0][0] == sign and node[0][1] == sign and node[0][2] == sign): return True | |
if (node[1][0] == sign and node[1][1] == sign and node[1][2] == sign): return True | |
if (node[2][0] == sign and node[2][1] == sign and node[2][2] == sign): return True | |
if (node[0][0] == sign and node[1][0] == sign and node[2][0] == sign): return True | |
if (node[0][1] == sign and node[1][1] == sign and node[2][1] == sign): return True | |
if (node[0][2] == sign and node[1][2] == sign and node[2][2] == sign): return True | |
if (node[0][0] == sign and node[1][1] == sign and node[2][2] == sign): return True | |
if (node[0][2] == sign and node[1][1] == sign and node[2][0] == sign): return True | |
return False | |
def full_matrix(node): | |
for i in range(0,2): | |
for j in range(0, 2): | |
if(node[i][j]==0): | |
return False | |
return True | |
node = [[0,0,0],[0,0,0],[0,0,0]] | |
while(not(win_node(node,1)) and not(win_node(node,-1))): | |
print_nod(node) | |
val = input("entrez coordonné(x,y) : ") | |
x , y = str(val).split(",") | |
node[int(x)][int(y)]=1 | |
print_nod(node) | |
print("=>") | |
node = minimax(node,-1)[1] | |
print_nod(node) | |
print_nod(node[0],"WON !!") | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment