Othello, besoin d'aide

[Fermé]
Signaler
Messages postés
1
Date d'inscription
mercredi 22 mai 2019
Statut
Membre
Dernière intervention
22 mai 2019
-
Bonjour,
J'ai codé un Othello en python, mais je ne comprends pas pourquoi il fonctionne pas.
Je pense que le problème vient des ligne 352-353 car mon clic droit ne marche pas mais je n'en suis pas sûr
Si quelqu'un peu éclairer ma lanterne et me corriger je lui serait vraiment très reconnaissant
(c'est relativement urgent)

from tkinter import *

def affichePion(ligne,colonne):
    x = (colonne-1) * 60 + 30
    y = (ligne-1) * 60 + 30
    can.selObject = can.find_closest(x, y)
    if tjeu[ligne][colonne] == 1:
        can.itemconfig(can.selObject,fill ="white", outline ="black")
    elif tjeu[ligne][colonne] == 2:
        can.itemconfig(can.selObject,fill ="black", outline ="black")

def traceGrille():
    global tjeu
    for ligne in range(8):
        for colonne in range(8):
            if tjeu[ligne][colonne] > 0:
                affichePion(ligne,colonne)
    comptePions()

def initJeu():
    " Initialisation de l'état du jeu "
    global tjeu
    tjeu =[]
    for i in range(11):
        tjeu.append([9]*10)
    for y in range(1,9):
        for x in range(1,9):
            tjeu[y][x] = 0
    tjeu[4][4] = 1
    tjeu[4][5] = 2
    tjeu[5][4] = 2
    tjeu[5][5] = 1
    can.delete(ALL)
    # A la création de la grille de jeu on affiche sur le canvas 8x8 carrés.
    # Dans chaque carré on dessine un pion; ce pion est de la même couleur
    # que le fond, ce qui le rend invisible. Pour afficher un pion il faut
    # juste modifier sa couleur.
    y = 1
    for ligne in range(1,9):
        x = 1
        for colonne in range(1,9):
            can.create_rectangle(x,y,x+59,y+59)
            can.create_oval(x+5,y+5,x+53,y+53, fill = "green", outline="green")
            x += 60
        y += 60
    traceGrille()

def nouveauJeu():
    initJeu()
    traceGrille()

def comptePions():
    global blanc,noir,rst
    blanc,noir = 0,0
    for ligne in range(1,9):
        for colonne in range(1,9):
            if tjeu[ligne][colonne] == 1:
                blanc += 1
            elif tjeu[ligne][colonne] == 2:
                noir += 1
    rst = 64 - blanc - noir
    nbb.configure(text = ("Blancs : "+ str(blanc)))
    nbn.configure(text = ("Noirs : "+ str(noir)))
    nbr.configure(text = ("Reste : "+ str(rst)))

def mouseClicB(event):
    " Gestion du clic de la souris "
    global npa,jr
    ty, tx = int(event.y/59)+1, int(event.x/59)+1
    b = 0
    if tjeu[ty][tx] > 0:
        mess.configure(text = ("Coup non valide"))
    else:
        if tjeu[ty][tx+1] == 1:               # à droite
            nx = tx+1
            while tjeu[ty][nx] == 1:
                nx += 1
            if tjeu[ty][nx] == 2:
                b = 1
                nx = tx+1
                while tjeu[ty][nx] == 1:
                    tjeu[ty][nx] = 2
                    affichePion(ty,nx)
                    nx += 1
        if tjeu[ty+1][tx+1] == 1:           # à droite, en bas
            ny, nx = ty+1, tx+1
            while tjeu[ny][nx] == 1:
                ny += 1
                nx += 1
            if tjeu[ny][nx] == 2:
                b = 1
                ny, nx = ty+1, tx+1
                while tjeu[ny][nx] == 1:
                    tjeu[ny][nx] = 2
                    affichePion(ny,nx)
                    ny += 1
                    nx += 1
        if tjeu[ty+1][tx] == 1:             # en bas
            ny = ty+1
            while tjeu[ny][tx] == 1:
                ny += 1
            if tjeu[ny][tx] == 2:
                b = 1
                ny = ty+1
                while tjeu[ny][tx] == 1:
                    tjeu[ny][tx] = 2
                    affichePion(ny,tx)
                    ny += 1
        if tjeu[ty+1][tx-1] == 1:           # en bas, à gauche
            ny, nx = ty+1, tx-1
            while tjeu[ny][nx] == 1:
                ny += 1
                nx -= 1
            if tjeu[ny][nx] == 2:
                b = 1
                ny, nx = ty+1, tx-1
                while tjeu[ny][nx] == 1:
                    tjeu[ny][nx] = 2
                    affichePion(ny,nx)
                    ny += 1
                    nx -= 1
        if tjeu[ty][tx-1] == 1:             # à gauche
            nx = tx-1
            while tjeu[ty][nx] == 1:
                nx -= 1
            if tjeu[ty][nx] == 2:
                b = 1
                nx = tx-1
                while tjeu[ty][nx] == 1:
                    tjeu[ty][nx] = 2
                    affichePion(ty,nx)
                    nx -= 1
        if tjeu[ty-1][tx-1] == 1:           # à gauche, en haut
            ny, nx = ty-1, tx-1
            while tjeu[ny][nx] == 1:
                ny -= 1
                nx -= 1
            if tjeu[ny][nx] == 2:
                b = 1
                ny, nx = ty-1, tx-1
                while tjeu[ny][nx] == 1:
                    tjeu[ny][nx] = 2
                    affichePion(ny,nx)
                    ny -= 1
                    nx -= 1
        if tjeu[ty-1][tx] == 1:             # en haut
            ny = ty-1
            while tjeu[ny][tx] == 1:
                ny -= 1
            if tjeu[ny][tx] == 2:
                b = 1
                ny = ty-1
                while tjeu[ny][tx] == 1:
                    tjeu[ny][tx] = 2
                    affichePion(ny,tx)
                    ny -= 1
        if tjeu[ty-1][tx+1] == 1:           # en haut, à droite
            ny, nx = ty-1, tx+1
            while tjeu[ny][nx] == 1:
                ny -= 1
                nx += 1
            if tjeu[ny][nx] == 2:
                b = 1
                ny, nx = ty-1, tx+1
                while tjeu[ny][nx] == 1:
                    tjeu[ny][nx] = 2
                    affichePion(ny,nx)
                    ny -= 1
                    nx += 1
        if b == 0:
            mess.configure(text = ("Coup non valide"))
        else:
            tjeu[ty][tx] = 2
            affichePion(ty,tx)
            comptePions()
            f = testFin()
            if f == 1:
                finJeu()

def mouseClic(event):
    " Gestion du clic de la souris pour le joueur 1"
    global npa,jr
    ty, tx = int(event.y/59)+1, int(event.x/59)+1
    b = 0
    if tjeu[ty][tx] > 0:
        mess.configure(text = ("Coup non valide"))
    else:
        if tjeu[ty][tx+1] == 2:               # à droite
            nx = tx+1
            while tjeu[ty][nx] == 2:
                nx += 1
            if tjeu[ty][nx] == 1:
                b = 1
                nx = tx+1
                while tjeu[ty][nx] == 2:
                    tjeu[ty][nx] = 1
                    affichePion(ty,nx)
                    nx += 1
        if tjeu[ty+1][tx+1] == 2:           # à droite, en bas
            ny, nx = ty+1, tx+1
            while tjeu[ny][nx] == 2:
                ny += 1
                nx += 1
            if tjeu[ny][nx] == 1:
                b = 1
                ny, nx = ty+1, tx+1
                while tjeu[ny][nx] == 2:
                    tjeu[ny][nx] = 1
                    affichePion(ny,nx)
                    ny += 1
                    nx += 1
        if tjeu[ty+1][tx] == 2:             # en bas
            ny = ty+1
            while tjeu[ny][tx] == 2:
                ny += 1
            if tjeu[ny][tx] == 1:
                b = 1
                ny = ty+1
                while tjeu[ny][tx] == 2:
                    tjeu[ny][tx] = 1
                    affichePion(ny,tx)
                    ny += 1
        if tjeu[ty+1][tx-1] == 2:           # en bas, à gauche
            ny, nx = ty+1, tx-1
            while tjeu[ny][nx] == 2:
                ny += 1
                nx -= 1
            if tjeu[ny][nx] == 1:
                b = 1
                ny, nx = ty+1, tx-1
                while tjeu[ny][nx] == 2:
                    tjeu[ny][nx] = 1
                    affichePion(ny,nx)
                    ny += 1
                    nx -= 1
        if tjeu[ty][tx-1] == 2:             # à gauche
            nx = tx-1
            while tjeu[ty][nx] == 2:
                nx -= 1
            if tjeu[ty][nx] == 1:
                b = 1
                nx = tx-1
                while tjeu[ty][nx] == 2:
                    tjeu[ty][nx] = 1
                    affichePion(ty,nx)
                    nx -= 1
        if tjeu[ty-1][tx-1] == 2:           # à gauche, en haut
            ny, nx = ty-1, tx-1
            while tjeu[ny][nx] == 2:
                ny -= 1
                nx -= 1
            if tjeu[ny][nx] == 1:
                b = 1
                ny, nx = ty-1, tx-1
                while tjeu[ny][nx] == 2:
                    tjeu[ny][nx] = 1
                    affichePion(ny,nx)
                    ny -= 1
                    nx -= 1
        if tjeu[ty-1][tx] == 2:             # en haut
            ny = ty-1
            while tjeu[ny][tx] == 2:
                ny -= 1
            if tjeu[ny][tx] == 1:
                b = 1
                ny = ty-1
                while tjeu[ny][tx] == 2:
                    tjeu[ny][tx] = 1
                    affichePion(ny,tx)
                    ny -= 1
        if tjeu[ty-1][tx+1] == 2:           # en haut, à droite
            ny, nx = ty-1, tx+1
            while tjeu[ny][nx] == 2:
                ny -= 1
                nx += 1
            if tjeu[ny][nx] == 1:
                b = 1
                ny, nx = ty-1, tx+1
                while tjeu[ny][nx] == 2:
                    tjeu[ny][nx] = 1
                    affichePion(ny,nx)
                    ny -= 1
                    nx += 1
        if b == 0:
            mess.configure(text = ("Coup non valide"))
        else:
            tjeu[ty][tx] = 1
            affichePion(ty,tx)
            comptePions()
            f = testFin()
            if f == 1:
                finJeu()

def aide():
    msg = Toplevel()
    Message(msg, bg ="white",fg ="black",width = 480, font ="Arial 12",
        text ="           * Règles du jeu *\n"\
        "Othello est un jeu de strategie a deux joueurs : Noir et Blanc "\
        "se jouant sur un plateau de 64 cases (8x8) "\
        "on prend les pions adverses en les entourant de nos pions.\n"\
        "Au départ, 2 pions de chaque couleur sont posés sur les 4 cases "\
        "centrales. A tour de rôle, chacun pose un pion avec l'obligation "\
        "de retourner au moins un pion adverse."\
        "Un pion peut prendre simultanément dans les direction horizontales, "\
        "veritcales et diagonales.\n"\
        "La partie se termine quand tous le jetons sont posés, ou quand aucun "\
        "joueur ne peut plus jouer.\n"\
        "Le vainqueur est celui qui possède le plus de pions de sa couleur "\
        "sur le plateau.\n"\
        " \n"\
        "Comment jouer :\n"\
        "Pour poser un pion, cliquez sur une cases.\n"\
        "en cas d'impossinilité de jeu, cliquez sur le bouton 'Passer'.\n")\
        .pack(padx =10, pady =10)

def testFin():
    fn = 0
    if rst == 0 or blanc == 0 or noir == 0 :
        fn = 1
    return fn


def finJeu():
    if blanc > noir:
        ms = "Blanc, vous avez gagné!"
        bk = "yellow"
        fc = "navy"
    elif noir > blanc:
        ms = "Noir, vous avez gagné!"
        bk = "red"
        fc = "yellow"
    else:
        ms = "Match nul!!!"
        bk = "grey"
        fc = "white"
    msg = Toplevel()
    msg.configure(background = "green")
    Message(msg, bg =bk,fg =fc,width = 200, font ="Arial 12",text = ms).pack(padx =10, pady =10)

fen = Tk()
fen.title('OTHELLO')
fen.configure(background = "green")

fr1 =Frame(fen,bd =2, bg = "green")
b1 = Button(fr1,text="Nouvelle partie",font="Arial 12",width =15, command = nouveauJeu)
b1.pack(side = LEFT, padx =10, pady = 5)
b2 = Button(fr1,text="Aide",font="Arial 12",width =15, command = aide)
b2.pack(side = LEFT, padx =10, pady = 5)
fr1.pack()

can = Canvas(fen, bg="green", width=476, height=476, bd=2, relief=SOLID)
can.bind("<Button-1>", mouseClic)
can.bind("<Button-2>", mouseClicB)
can.pack(padx=5, pady=5)

fr2 =Frame(fen,bd =2, bg = "green")
mess = Label(fr2, width=40, bg = "white", font="Arial 12")
mess.pack(side=LEFT, padx=5, pady=5)
fr2.pack()

fr3 =Frame(fen,bd =2, bg = "green")
nbb = Label(fr3, text="Blancs : 2", width = 16, bg = "white", font="Arial 12")
nbb.pack(side=LEFT, padx=6, pady=5)
nbn = Label(fr3, text="Noirs : 2", width = 16, bg = "white",font="Arial 12")
nbn .pack(side=LEFT, padx=6, pady=5)
nbr = Label(fr3, text="Reste : 60", width = 17, bg = "white",font="Arial 12")
nbr.pack(side=LEFT, padx=6, pady=5)
fr3.pack()

tjeu =[]    # tableau du jeu
blanc,noir,rst = 2,2,60  # nbre de pions blancs, noirs et restant à jouer

fen.mainloop()



Configuration: Windows / Chrome 74.0.3729.169