Skip to content

Instantly share code, notes, and snippets.

@bessalahAmar
Created May 22, 2018 18:04
Show Gist options
  • Save bessalahAmar/74020532456143d4b3083f34218df760 to your computer and use it in GitHub Desktop.
Save bessalahAmar/74020532456143d4b3083f34218df760 to your computer and use it in GitHub Desktop.
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