from turtle import *
from math import *
from numpy import *
import sys
import random
setup(400,400)#Fixer une fenêtre de 400x400
def cadrejeu():#Tracé du cadre de jeu
up()
goto(-150,-150)
setheading(0)
down()
for i in range(4):
up()
goto(-150,-150+100*i)
down()
forward(300)
right(90)
for i in range(4):
up()
goto(150-100*i,150)
down()
forward(300)
def cercle(rayon):#tracé d'un cercle de centre et de rayon donnés
up()
forward(rayon)
left(90)
down()
circle(rayon)
right(90)
def croix(l):#tracé d'une croix de centre donné et de largeur 2l
up()
goto(position()[0]-l,position()[1]+l)
setheading(315)
down()
forward(2*l*sqrt(2))
left(135)
up()
forward(2*l)
left(135)
down()
forward(2*l*sqrt(2))
left(45)
hideturtle()#cache la tortue
speed(10)#augmente la vitesse à 10
seconde=Turtle()#création d'une nouvelle tortue
seconde.hideturtle()#cache la seconde tortue
seconde.speed(10)#augmente la vitesse de la seconde tortue à 10
ncoup=0#compte le nombre de coups joués
def calcul(x):#fonction de calcul
return 100*((x+50)//100)
tabl=array([[0,0,0],[0,0,0],[0,0,0]])#crée un tableau de 3 lignes et 3 colonnes ne contenant que des 0
def calcul2(x):#calcul du numéro de ligne ou de colonne correspondant
return int((x+50)//100+1)
def verification(tableau,n):#fonction permettant de vérifier si la partie est gagnée ou nulle
if tableau[2,0]==1 and tableau[1,1]==1 and tableau[0,2]==1:
vainqueur(1)
if tableau[2,0]==-1 and tableau[1,1]==-1 and tableau[0,2]==-1:
vainqueur(-1)
if tableau[0,0]==1 and tableau[1,1]==1 and tableau[2,2]==1:
vainqueur(1)
if tableau[0,0]==-1 and tableau[1,1]==-1 and tableau[2,2]==-1:
vainqueur(-1)
for k in range(3):
if tableau[k,0]==1 and tableau[k,1]==1 and tableau[k,2]==1:
vainqueur(1)
if tableau[k,0]==-1 and tableau[k,1]==-1 and tableau[k,2]==-1:
vainqueur(-1)
if tableau[0,k]==1 and tableau[1,k]==1 and tableau[2,k]==1:
vainqueur(1)
if tableau[0,k]==-1 and tableau[1,k]==-1 and tableau[2,k]==-1:
vainqueur(-1)
if tableau[0,0]==1 and tableau[1,1]==1 and tableau[2,2]==1:
vainqueur(1)
if tableau[0,0]==-1 and tableau[1,1]==-1 and tableau[2,2]==-1:
vainqueur(-1)
if n==9:
vainqueur(0)
def vainqueur(v):#fonction permettant d'afficher le résultat
global tabl,ncoup,test
up()
goto(-155,-16)
color("red")
if v==1:
write("Le joueur 1 a gagné !", font = ("Arial", 22, "bold"))
elif v==-1 :
write("Le joueur 2 a gagné !", font = ("Arial", 22, "bold"))
else :
write("La partie est nulle !", font = ("Arial", 22, "bold"))
if (textinput("Rejouer ?", "Rejouer ? Veuillez entrer 'oui' si c'est le cas.") == 'oui'):
color("black")
clear()
ncoup=0
test=True
tabl=array([[0,0,0],[0,0,0],[0,0,0]])
main()
else:
bye()
sys.exit(0)
test=True#variable booléenne permettant de ne pas lancé deux tracés simultanément
title("Jeu de morpion")#définit le titre de la fenêtre
def ia(tableau):
t=True
for k in range(3):
if tableau[0,k]+tableau[1,k]+tableau[2,k]==-2:
for l in range(3):
if tableau[l,k]==0:
t=False
return l,k
if tableau[k,0]+tableau[k,1]+tableau[k,2]==-2:
for l in range(3):
if tableau[k,l]==0:
t=False
return k,l
if tableau[0,0]+tableau[1,1]+tableau[2,2]==-2:
for l in range(3):
if tableau[l,l]==0:
t=False
return l,l
if tableau[2,0]+tableau[1,1]+tableau[0,2]==-2:
for l in range(3):
if tableau[2-l,l]==0:
t=False
return 2-l,l
for k in range(3):
if tableau[0,k]+tableau[1,k]+tableau[2,k]==2:
for l in range(3):
if tableau[l,k]==0:
t=False
return l,k
if tableau[k,0]+tableau[k,1]+tableau[k,2]==2:
for l in range(3):
if tableau[k,l]==0:
t=False
return k,l
if tableau[0,0]+tableau[1,1]+tableau[2,2]==2:
for l in range(3):
if tableau[l,l]==0:
t=False
return l,l
if tableau[2,0]+tableau[1,1]+tableau[0,2]==2:
for l in range(3):
if tableau[2-l,l]==0:
t=False
return 2-l,l
if tableau[1,1]==0:
t=False
return 1,1
while t :
xt=random.randint(0,2)
yt=random.randint(0,2)
if tableau[xt,yt]==0:
t=False
return xt,yt
def morpion5(x,y):#reprend la quatrième fonction avec ia
global tabl, ncoup, test
if x>-150 and y>-150 and x<150 and y<150 and test:
test=False
xnum=calcul2(x)
ynum=calcul2(y)
if tabl[xnum,ynum]==0:
up()
x=calcul(x)
y=calcul(y)
goto(x,y)
cercle(40)
tabl[xnum,ynum]=1
ncoup+=1
verification(tabl,ncoup)
xnum,ynum=ia(tabl)
up()
x=100*(xnum-1)
y=100*(ynum-1)
goto(x,y)
croix(40)
tabl[xnum,ynum]=-1
test=True
ncoup+=1
verification(tabl,ncoup)
def main():
cadrejeu()
onscreenclick(morpion5)
mainloop()
main()