Jeu alquerque en python avec tkinter

Fermé
chainman - 1 févr. 2023 à 12:49
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 1 févr. 2023 à 14:27

Bonjour,

Je réalise un jeu d'alquerque en python mais je suis perdu quelqu'un peut-il m'aider?

from tkinter import *
from tkinter import messagebox
from math import *

class valeur:
    def __init__(self,value):
        self.__value=value
        
    def couleur_pion(self):
        if self.__value==0:
            return 'white'
        if self.__value==1:
            return '#c3daea'
        if self.__value==2:
            return '#2b4c07'
        if self.__value==3:
            return 'red'
        if self.__value==4:
            return 'green'
        
        
    def getnumber(self):
        return self.__value

    def setvaleur(self,x):
        self.__value = x
    
    def clic(self):
        if self==TRUE:
            return FALSE
        else :
            return TRUE    
    def color_case(self):
        if valeur.clic(self)==FALSE:
            return 'red' 
        else: 
            return 'white'   
class Plateau:
    def __init__(self,nbrows,nbcolumns):
        self.__j=jeu()
        self.fen = Tk()
        self.fen.title('Alquerque')
        self.fen.geometry('600x600')
        self.__dessin = Canvas(self.fen, width=500, height=500, bg='white')
        self.__dessin.pack(expand=YES)
        self.__dessin.bind('<Button>',self.verifclic)
        self.__nbrows = nbrows
        self.__nbcolumns = nbcolumns
        self.__grid = [[valeur(0)for i in range(self.__nbrows)]for j in range (self.__nbcolumns)]
        self.__board=[
                    [1,1,1,1,1],
                    [1,1,1,1,1],
                    [1,1,0,2,2],
                    [2,2,2,2,2],
                    [2,2,2,2,2]
                    ]
        
        self.initialisationgrille()
        self.create_case()
        self.create_pion()
            
    def initialisationgrille(self):
        for i in range(len(self.__board)):
            for j in range(len(self.__board)):
                self.__grid[i][j].setvaleur(self.__board[i][j])

    def create_case(self):
        x0=0
        y0=0
        x1=100
        y1=100
        stock_case=[]
        for j in range (self.__nbcolumns):
            for i in range(self.__nbrows):
                self.__dessin.create_rectangle(x0,y0,x1,y1,fill=valeur.color_case(self))
                stock_case.append(self.__dessin)
                x0+=100
                x1+=100
            x0=0
            y0+=100 
            x1=100
            y1+=100
            
       
    
    def create_pion(self):
        x0=5
        y0=5
        x1=95
        y1=95
        for j in range (5):
            for i in range(5):
                self.__dessin.create_oval(x0,y0,x1,y1,fill=self.__grid[i][j].couleur_pion())
                x0+=100
                x1+=100
            x0=5
            y0+=100
            x1=95
            y1+=100
    def verifclic(self,event):
        
        clicx=floor(event.x/100)
        clicy=floor(event.y/100)
        
        if self.__board[clicx][clicy]==self.__j.getplayer() :
            print(clicx,clicy)
            self.__board[clicx][clicy]=3
            self.boardupdate()
        for i in range(len(self.__j.possible())):
            self.__board.insert(self.__j.possible(clicx,clicy),4)
            
        

        
    def boardupdate(self):
        
        
        self.__grid = [[valeur(0)for i in range(self.__nbrows)]for j in range (self.__nbcolumns)]
        
        self.initialisationgrille()
        self.create_case()
        self.create_pion()
        
    # def newparty(self):
  	
    #     result=messagebox.askquestion("Nouvelle partie", "Voulez-vous faire une nouvelle partie ?",icon="info")
    #     if result == 'yes':
    #         jeu.gameturn()
    #     else:
    #         Plateau.fen.destroy()
        
# class party:
#      def __init__(self):
#         Plateau()    
    

class jeu:
    

    def __init__(self):
        self.__player=2
    def getplayer(self):
        return self.__player

    def getBoard(self, x, y):
        return self.__board[x][y]

    def setBoard(self, x, y, value ):
        self.__board[y][x] = value

    def saisieCoord(self):
        l = int(l)-1
        h = int(h)-1
        x= int(x)-1
        y= int(y)-1
        
        return l, h

    def possible(self, x, y, precx = None, precy = None):
        
        possibilities = []
        for i in range(y-1, y+2):
            for j in range(x-1, x+2):
                if 0 < x < len(Plateau.__board) and 0 < y < len(Plateau.__board):
                    if (i != y or j != x) or ((precx == None and precy == None) and (i != precy or j != precx)):
                        if Plateau.__board[i][j] == 0 and best < 2: 
                            best = 1
                            possibilities.append((j, i))
                        elif Plateau.__board[i][j] == self.__player%2+1 and Plateau.__board[i + (i-y)][j + (j-x)] == 0:
                            best = 2
                            possibilities.append((j, i))
                            new_possibilities, new_best = self.possible(i, j, x, y)
                            if new_best == 2:
                                best += 1
                                possibilities = possibilities + new_possibilities

        return possibilities
    def best():
        best=1
        return best
    def findepartie(self,possibilities):
        possibilities,best = self.possible()
        if best==0:
            return True 
        else:
            return False
        
    def again(self):
        compteur=0
        for i in range(len(Plateau.__board)):
            for j in range(len(Plateau.__board)):
                if self.getBoard(i,j)== self.__player:
                    compteur+=1

        if compteur>0:
            return True
        else :
            return False

    def gameturn(self):
    

        while (self.again()):
            jeu()
            clicx,clicy=Plateau.verifclic(self,event)
                        
            x=clicx
            y= clicy
            l, h  = self.saisieCoord()
            possibilities, best = self.possible(x,y)
            if (l,h) in possibilities and best ==1 :
                self.setBoard(l,h,self.__player)
                self.setBoard(x,y,0)
                
                self.__player = self.__player%2+1
            elif (l,h) in possibilities and best ==2 :
                self.setBoard(l,h,self.__player)
                self.setBoard(x,y,0)
                if (x,y)>(l,h):
                    self.setBoard(x-1,y-1,self.__player)
                else:
                    self.setBoard(x+1,y+1,self.__player)
                    
                
            else:
                self.setBoard(x,y,0)

                self.__player = self.__player%2+1

        else:
            print ("fin du jeu ")
           
Plateau(5,5)
mainloop()

Voici les règles:

  • Un pion peut se déplacer vers une case vide adjacente reliée par un trait.
  • Un pion peut capturer un pion adverse en passant par dessus et en retombant sur une case vide. Cela nécessite que les trois cases soit alignées, adjacentes et reliées par un trait.
  • Si une capture est possible elle doit obligatoirement être effectuée, sinon le pion en question est retiré du jeu.
  • Si après une capture un pion peut en effectuer une autre il doit nécessairement le faire (comme à la règle précédente).
  • Si plusieurs captures sont possibles, on doit choisir celle conduisant à l'élimination du plus de pions adverses.

Merci d'avance.

Windows / Chrome 109.0.0.0

A voir également:

1 réponse

Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
1 févr. 2023 à 14:27

Bonjour,

ca ressemble un peu au jeu de dames ton truc ...

"mais je suis perdu "

En quoi es tu perdu exactement ?

0