chainman
-
1 févr. 2023 à 12:49
Phil_1857
Messages postés1872Date d'inscriptionlundi 23 mars 2020StatutMembreDernière intervention28 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
defcouleur_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'defgetnumber(self):return self.__value
defsetvaleur(self,x):
self.__value = x
defclic(self):if self==TRUE:return FALSE
else:return TRUE
defcolor_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 inrange(self.__nbrows)]for j inrange(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()definitialisationgrille(self):for i inrange(len(self.__board)):for j inrange(len(self.__board)):
self.__grid[i][j].setvaleur(self.__board[i][j])defcreate_case(self):
x0=0
y0=0
x1=100
y1=100
stock_case=[]for j inrange(self.__nbcolumns):for i inrange(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+=100defcreate_pion(self):
x0=5
y0=5
x1=95
y1=95for j inrange(5):for i inrange(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+=100defverifclic(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 inrange(len(self.__j.possible())):
self.__board.insert(self.__j.possible(clicx,clicy),4)defboardupdate(self):
self.__grid =[[valeur(0)for i inrange(self.__nbrows)]for j inrange(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=2defgetplayer(self):return self.__player
defgetBoard(self, x, y):return self.__board[x][y]defsetBoard(self, x, y, value ):
self.__board[y][x]= value
defsaisieCoord(self):
l =int(l)-1
h =int(h)-1
x=int(x)-1
y=int(y)-1return l, h
defpossible(self, x, y, precx = None, precy = None):
possibilities =[]for i inrange(y-1, y+2):for j inrange(x-1, x+2):if0< x <len(Plateau.__board)and0< 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]==0and best <2:
best =1
possibilities.append((j, i))elif Plateau.__board[i][j]== self.__player%2+1and 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
defbest():
best=1return best
deffindepartie(self,possibilities):
possibilities,best = self.possible()if best==0:return True
else:return False
defagain(self):
compteur=0for i inrange(len(Plateau.__board)):for j inrange(len(Plateau.__board)):if self.getBoard(i,j)== self.__player:
compteur+=1if compteur>0:return True
else:return False
defgameturn(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+1elif(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+1else: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.