"""Programme par HAVARD Nathan et CROS-GRISONI Aurele annee 2022-2023"""

from turtle import*
liste=[]
x=False
joueur1=[0]
rook_blanc=[]
rook_noir=[]
def pion(x,y):
     """Cree un pion aux coordonees x,y. (de couleur noir par default)
    Syntaxe : pion(x,y) avec x,y des entiers qui representent les coordonnees"""
     goto(x,y)
     write('\u265F', font=('Arial Unicode MS', 55))

#===============================================================================


def cavalier(x,y):
     """Cree un pion aux coordonees x,y. (de couleur noir par default)
    Syntaxe : cavalier(x,y) avec x,y des entiers qui representent les coordonnees"""
     goto(x,y)
     write('\u265E', font=('Arial Unicode MS', 55))

#===============================================================================


def fou(x,y):
     """Cree un pion aux coordonnees x,y. (de couleur noir par default)
    Syntaxe : fou(x,y) avec x,y des entiers qui representent les coordonnees"""
     goto(x,y)
     write('\u265D', font=('Arial Unicode MS', 55))

#===============================================================================


def tour(x,y):
     """Creer un pion aux coordonnees x,y. (de couleur noir par default)
    Syntaxe : tour(x,y) avec x,y des entiers qui representent les coordonnees"""
     goto(x,y)
     write('\u265C', font=('Arial Unicode MS', 55))

#===============================================================================


def roi(x,y):
      """Creer un pion aux coordonnees x,y. (de couleur noir par default)
    Syntaxe : roi(x,y) avec x,y des entiers qui representent les coordonnees"""
      goto(x,y)
      write('\u265A', font=('Arial Unicode MS', 55))

#===============================================================================

def dame(x,y):
     """Creer un pion aux coordonnees x,y. (de couleur noir par default)
    Syntaxe : reine(x,y) avec x,y des entiers qui representent les coordonnees"""
     goto(x,y)
     write('\u265B', font=('Arial Unicode MS', 55))

def cliquer_gauche(x,y):
    """Revoie la case dans laquelle se trouve le curseur"""
    # Ligne 8 (haut) ===========================================================
    if -300<x<-225 and 225<y<301:
        print('Case a8')
        mouvement(-300,300,0,0,2)

    if -226<x<-150 and 225<y<301:
        print("Case b8")
        mouvement(-225,300,0,1,1)

    if -151<x<-75 and 225<y<301:
        print("Case c8")
        mouvement(-150,300,0,2,2)


    if -76<x<0 and 225<y<301:
        print("Case d8")
        mouvement(-75,300,0,3,1)

    if -1<x<75 and 225<y<301:
        print("Case e8")
        mouvement(0,300,0,4,2)

    if 74<x<150 and 225<y<301:
        print("Case f8")
        mouvement(75,300,0,5,1)

    if 149<x<225 and 225<y<301:
        print("Case g8")
        mouvement(150,300,0,6,2)

    if 224<x<300 and 225<y<301:
        print("Case h8")
        mouvement(225,300,0,7,1)

    # Ligne 7 ==================================================================
    if -300<x<-225 and 150<y<226:
        print('Case a7')
        mouvement(-300,225,1,0,1)

    if -226<x<-150 and 150<y<226:
        print("Case b7")
        mouvement(-225,225,1,1,2)

    if -151<x<-75 and 150<y<226:
        print("Case c7")
        mouvement(-150,225,1,2,1)

    if -76<x<0 and 150<y<226:
        print("Case d7")
        mouvement(-75,225,1,3,2)

    if -1<x<75 and 150<y<226:
        print("Case e7")
        mouvement(0,225,1,4,1)

    if 74<x<150 and 150<y<226:
        print("Case f7")
        mouvement(75,225,1,5,2)

    if 149<x<225 and 150<y<226:
        print("Case g7")
        mouvement(150,225,1,6,1)

    if 224<x<300 and 150<y<226:
        print("Case h7")
        mouvement(225,225,1,7,2)

    # Ligne 6 ==================================================================
    if -300<x<-225 and 75<y<151:
        print('Case a6')
        mouvement(-300,150,2,0,2)

    if -226<x<-150 and 75<y<151:
        print('Case b6')
        mouvement(-225,150,2,1,1)

    if -151<x<-75 and 75<y<151:
        print("Case c6")
        mouvement(-150,150,2,2,2)

    if -76<x<0 and 75<y<151:
        print("Case d6")
        mouvement(-75,150,2,3,1)

    if -1<x<75 and 75<y<151:
        print("Case e6")
        mouvement(0,150,2,4,2)

    if 74<x<150 and 75<y<151:
        print("Case f6")
        mouvement(75,150,2,5,1)

    if 149<x<225 and 75<y<151:
        print("Case g6")
        mouvement(150,150,2,6,2)

    if 224<x<300 and 75<y<151:
        print("Case h6")
        mouvement(225,150,2,7,1)

    # Ligne 5 ==================================================================
    if -300<x<-225 and 0<y<76:
        print('Case a5')
        mouvement(-300,75,3,0,1)

    if -226<x<-150 and 0<y<76:
        print("Case b5")
        mouvement(-225,75,3,1,2)

    if -151<x<-75 and 0<y<76:
        print("Case c5")
        mouvement(-150,75,3,2,1)

    if -76<x<0 and 0<y<76:
        print("Case d5")
        mouvement(-75,75,3,3,2)

    if -1<x<75 and 0<y<76:
        print("Case e5")
        mouvement(0,75,3,4,1)

    if 74<x<150 and 0<y<76:
        print("Case f5")
        mouvement(75,75,3,5,2)

    if 149<x<225 and 0<y<76:
        print("Case g5")
        mouvement(150,75,3,6,1)

    if 224<x<300 and 0<y<76:
        print("Case h5")
        mouvement(225,75,3,7,2)

    # Ligne 4 ==================================================================
    if -300<x<-225 and -75<y<1:
        print('Case a4')
        mouvement(-300,0,4,0,2)

    if -226<x<-150 and -75<y<1:
        print("Case b4")
        mouvement(-225,0,4,1,1)

    if -151<x<-75 and -75<y<1:
        print("Case c4")
        mouvement(-150,0,4,2,2)

    if -76<x<0 and -75<y<1:
        print("Case d4")
        mouvement(-75,0,4,3,1)

    if -1<x<75 and -75<y<1:
        print("Case e4")
        mouvement(0,0,4,4,2)

    if 74<x<150 and -75<y<1:
        print("Case f4")
        mouvement(75,0,4,5,1)

    if 149<x<225 and -75<y<1:
        print("Case g4")
        mouvement(150,0,4,6,2)

    if 224<x<300 and -75<y<1:
        print("Case h4")
        mouvement(225,0,4,7,1)

    # Ligne 3 ==================================================================
    if -300<x<-225 and -150<y<-74:
        print('Case a3')
        mouvement(-300,-75,5,0,1)

    if -226<x<-150 and -150<y<-74:
        print("Case b3")
        mouvement(-225,-75,5,1,2)

    if -151<x<-75 and -150<y<-74:
        print("Case c3")
        mouvement(-150,-75,5,2,1)

    if -76<x<0 and -150<y<-74:
        print("Case d3")
        mouvement(-75,-75,5,3,2)

    if -1<x<75 and -150<y<-74:
        print("Case e3")
        mouvement(0,-75,5,4,1)

    if 74<x<150 and -150<y<-74:
        print("Case f3")
        mouvement(75,-75,5,5,2)

    if 149<x<225 and -150<y<-74:
        print("Case g3")
        mouvement(150,-75,5,6,1)

    if 224<x<300 and -150<y<-74:
        print("Case h3")
        mouvement(225,-75,5,7,2)

    # Ligne 2 ==================================================================
    if -300<x<-225 and -225<y<-149:
        print('Case a2')
        mouvement(-300,-150,6,0,2)

    if -226<x<-150 and -225<y<-149:
        print("Case b2")
        mouvement(-225,-150,6,1,1)

    if -151<x<-75 and -225<y<-149:
        print("Case c2")
        mouvement(-150,-150,6,2,2)

    if -76<x<0 and -225<y<-149:
        print("Case d2")
        mouvement(-75,-150,6,3,1)

    if -1<x<75 and -225<y<-149:
        print("Case e2")
        mouvement(0,-150,6,4,2)

    if 74<x<150 and -225<y<-149:
        print("Case f2")
        mouvement(75,-150,6,5,1)

    if 149<x<225 and -225<y<-149:
        print("Case g2")
        mouvement(150,-150,6,6,2)

    if 224<x<300 and -225<y<-149:
        print("Case h2")
        mouvement(225,-150,6,7,1)

    # Ligne 1 ==================================================================
    if -300<x<-225 and -300<y<-224:
        print('Case a1')
        mouvement(-300,-225,7,0,1)

    if -226<x<-150 and -300<y<-224:
        print("Case b1")
        mouvement(-225,-225,7,1,2)

    if -151<x<-75 and -300<y<-224:
        print("Case c1")
        mouvement(-150,-225,7,2,1)

    if -76<x<0 and -300<y<-224:
        print("Case d1")
        mouvement(-75,-225,7,3,2)

    if -1<x<75 and -300<y<-224:
        print("Case e1")
        mouvement(0,-225,7,4,1)

    if 74<x<150 and -300<y<-224:
        print("Case f1")
        mouvement(75,-225,7,5,2)

    if 149<x<225 and -300<y<-224:
        print("Case g1")
        mouvement(150,-225,7,6,1)

    if 224<x<300 and -300<y<-224:
        print("Case h1")
        mouvement(225,-225,7,7,2)


def dessiner_plateau():
    #dessine le plateau avec les couleurs
    penup()
    goto(-300,300)
    pendown()
    right(90)
    x=-300
    y=300
    for k in range(4):
        for i in range(4):
            begin_fill()
            color(234,183,151)
            for n in range(4):
                forward(75)
                left(90)
            end_fill()
            x=x+75
            goto(x,y)
            color(106,60,32)
            begin_fill()
            for n in range(4):
                forward(75)
                left(90)
            end_fill()
            x=x+75
            goto(x,y)
        penup()
        x=-300
        y=y-75
        goto(x,y)
        pendown()
        for i in range(4):
            begin_fill()
            color(106,60,32)
            for n in range(4):
                forward(75)
                left(90)
            end_fill()
            x=x+75
            goto(x,y)
            color(234,183,151)
            begin_fill()
            for n in range(4):
                forward(75)
                left(90)
            end_fill()
            x=x+75
            goto(x,y)
        penup()
        x=-300
        y=y-75
        goto(x,y)
        pendown()
    penup()
    color(0,0,0)
    goto(-275,-330)
    write('a')


def dessiner_pieces():
    #dessine les pieces a leur places
    color(0,0,0)
    penup()
    y=222
    for i in range(2):
        tour(-298,y)
        cavalier(-223,y)
        fou(-148,y)
        dame(-73,y)
        roi(2,y)
        fou(77,y)
        cavalier(154,y)
        tour(229,y)
        y=-303
        color(255,255,255)
    x=-298
    color(0,0,0)
    for i in range(8):
        pion(x,147)
        x=x+75
    x=-298
    color(255,255,255)
    for i in range(8):
        pion(x,-228)
        x=x+75

def remplire_case(x,y,couleur):
    #permet d'effacer une piece lorsque celle si change de case
    penup()
    goto(x,y)
    if couleur==1:
        color(106,60,32)

    if couleur==2:
        color(234,183,151)
    pendown()
    begin_fill()
    for n in range(4):
        forward(75)
        left(90)
    end_fill()

def redessiner_piece(nombre,x,y):
    #dessine la piece sur sa nouvelle case avec la bonne couleur
    penup()
    x=x+2
    y=y-3
    color(255,255,255)
    if nombre%2==1:
        color(0,0,0)

    if nombre==1 or nombre==2:
        tour(x,y)
    if nombre==3 or nombre==4:
        cavalier(x,y)
    if nombre==5 or nombre==6:
        fou(x,y)
    if nombre==7 or nombre==8:
        dame(x,y)
    if nombre==9 or nombre ==10:
        roi(x,y)
    if nombre==11 or nombre == 12:
        pion(x,y)

#==============================================================================================
def mouvement(coorx,coory,indi1,indi2,couleur_case):
    #c'est au joeur blanc de jouer
    if joueur1[-1]==0:

        #pour le rook des blancs
        if len(liste)!=0:
            if plateau[liste[3]][liste[4]]==10 and plateau[indi1][indi2]==2 and rook_blanc==[]:
                #grand rook
                if indi1==7 and indi2==0 and plateau[7][1]==0 and plateau[7][2]==0 and plateau[7][3]==0 :
                    remplire_case(liste[1],liste[2],liste[5])
                    remplire_case(coorx,coory,couleur_case)
                    redessiner_piece(liste[0],coorx+150,coory-75)
                    redessiner_piece(plateau[indi1][indi2],coorx+225,coory-75)
                    plateau[7][0]=0
                    plateau[7][4]=0
                    plateau[7][2]=10
                    plateau[7][3]=2
                    for i in range(6):
                        liste.pop()
                    for i in range(8):
                        print(plateau[i])
                    rook_blanc.append(1)
                    joueur1.append(1)
                #petit rook
                if indi1==7 and indi2==7 and plateau[7][5]==0 and plateau[7][6]==0:
                    remplire_case(liste[1],liste[2],liste[5])
                    remplire_case(coorx,coory,couleur_case)
                    redessiner_piece(liste[0],coorx-75,coory-75)
                    redessiner_piece(plateau[indi1][indi2],coorx-150,coory-75)
                    plateau[7][7]=0
                    plateau[7][4]=0
                    plateau[7][6]=10
                    plateau[7][5]=2
                    for i in range(6):
                        liste.pop()
                    for i in range(8):
                        print(plateau[i])
                    rook_blanc.append(1)
                    joueur1.append(1)



        #si on a deja choisi une piece et qu'on reclique sur une autre piece de meme couleur on enregistre en parametre la nouvelle piece selectionner
        if len(liste)!=0 and plateau[indi1][indi2]!=0 and liste[0]%2==plateau[indi1][indi2]%2:
                for i in range(6):
                    liste.pop()
                liste.append(plateau[indi1][indi2])
                liste.append(coorx)
                liste.append(coory)
                liste.append(indi1)
                liste.append(indi2)
                liste.append(couleur_case)

        #permet de manger une piece
        elif len(liste)!=0 and plateau[indi1][indi2]!=0:
            remplire_case(liste[1],liste[2],liste[5])
            remplire_case(coorx,coory,couleur_case)
            redessiner_piece(liste[0],coorx,coory-75)
            temp=plateau[liste[3]][liste[4]]
            plateau[liste[3]][liste[4]]=0
            plateau[indi1][indi2]=temp
            for i in range(6):
                liste.pop()
            for i in range(8):
                print(plateau[i])
            joueur1.append(1)

        #si on a deja cliquer sur une piece et qu'on reclique sur une autre casse, permet d'effacer la case et de redessiner la piece sur la nouvelle case
        elif len(liste)!=0:
            remplire_case(liste[1],liste[2],liste[5])
            redessiner_piece(liste[0],coorx,coory-75)
            temp=plateau[liste[3]][liste[4]]
            plateau[liste[3]][liste[4]]=plateau[indi1][indi2]
            plateau[indi1][indi2]=temp
            for i in range(6):
                liste.pop()
            for i in range(8):
                print(plateau[i])
            joueur1.append(1)

        #permet de sauvegarder la case cliquer lorsque c'est le premier clique si elle a une piece dessus
        elif len(liste)==0 and plateau[indi1][indi2]!=0 and plateau[indi1][indi2]%2==0:
            liste.append(plateau[indi1][indi2])
            liste.append(coorx)
            liste.append(coory)
            liste.append(indi1)
            liste.append(indi2)
            liste.append(couleur_case)

    #c'est au joueur noir de jouer
    if joueur1[-1]==1:

        #pour rook noir
        if len(liste)!=0:
            if plateau[liste[3]][liste[4]]==9 and plateau[indi1][indi2]==1 and rook_noir==[]:
                #grand rook
                if indi1==0 and indi2==0 and plateau[0][1]==0 and plateau[0][2]==0 and plateau[0][3]==0 :
                    remplire_case(liste[1],liste[2],liste[5])
                    remplire_case(coorx,coory,couleur_case)
                    redessiner_piece(liste[0],coorx+150,coory-75)
                    redessiner_piece(plateau[indi1][indi2],coorx+225,coory-75)
                    plateau[0][0]=0
                    plateau[0][4]=0
                    plateau[0][2]=9
                    plateau[0][3]=1
                    for i in range(6):
                        liste.pop()
                    for i in range(8):
                        print(plateau[i])
                    rook_noir.append(1)
                    joueur1.append(0)
                #petit rook
                if indi1==0 and indi2==7 and plateau[0][5]==0 and plateau[0][6]==0:
                    remplire_case(liste[1],liste[2],liste[5])
                    remplire_case(coorx,coory,couleur_case)
                    redessiner_piece(liste[0],coorx-75,coory-75)
                    redessiner_piece(plateau[indi1][indi2],coorx-150,coory-75)
                    plateau[0][7]=0
                    plateau[0][4]=0
                    plateau[0][6]=9
                    plateau[0][5]=1
                    for i in range(6):
                        liste.pop()
                    for i in range(8):
                        print(plateau[i])
                    rook_noir.append(1)
                    joueur1.append(0)
        #si on a deja choisi une piece et qu'on reclique sur une autre piece de meme couleur on enregistre en parametre la nouvelle piece selectionner
        if len(liste)!=0 and plateau[indi1][indi2]!=0 and liste[0]%2==plateau[indi1][indi2]%2:
                for i in range(6):
                    liste.pop()
                liste.append(plateau[indi1][indi2])
                liste.append(coorx)
                liste.append(coory)
                liste.append(indi1)
                liste.append(indi2)
                liste.append(couleur_case)

        #permet de manger une piece
        elif len(liste)!=0 and plateau[indi1][indi2]!=0:
            remplire_case(liste[1],liste[2],liste[5])
            remplire_case(coorx,coory,couleur_case)
            redessiner_piece(liste[0],coorx,coory-75)
            temp=plateau[liste[3]][liste[4]]
            plateau[liste[3]][liste[4]]=0
            plateau[indi1][indi2]=temp
            for i in range(6):
                liste.pop()
            for i in range(8):
                print(plateau[i])
            joueur1.append(0)

        #si on a deja cliquer sur une piece et qu'on reclique sur une autre casse, permet d'effacer la case et de redessiner la piece sur la nouvelle case
        elif len(liste)!=0:
            remplire_case(liste[1],liste[2],liste[5])
            redessiner_piece(liste[0],coorx,coory-75)
            temp=plateau[liste[3]][liste[4]]
            plateau[liste[3]][liste[4]]=plateau[indi1][indi2]
            plateau[indi1][indi2]=temp
            for i in range(6):
                liste.pop()
            for i in range(8):
                print(plateau[i])
            joueur1.append(0)

        #permet de sauvegarder la case cliquer lorsque c'est le premier clique si elle a une piece dessus
        elif len(liste)==0 and plateau[indi1][indi2]!=0 and plateau[indi1][indi2]%2==1:
            liste.append(plateau[indi1][indi2])
            liste.append(coorx)
            liste.append(coory)
            liste.append(indi1)
            liste.append(indi2)
            liste.append(couleur_case)




speed(0)
colormode(255)
dessiner_plateau()
dessiner_pieces()
onscreenclick(cliquer_gauche,1)
listen()


plateau =  [[1,3,5,7,9,5,3,1],
            [11,11,11,11,11,11,11,11],
            [0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0],
            [12,12,12,12,12,12,12,12],
            [2,4,6,8,10,6,4,2]]





done()







