begin process at 2012 05 24 17:18:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Python

 > 

Divers

 > 

Aide et documentation

 > 

aide pour Jeu puissance 4


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

aide pour Jeu puissance 4

mardi 7 décembre 2010 à 11:25:37 | aide pour Jeu puissance 4

soso586

bonjour,
j'aimerai modifier ce code python pour que le jeu ne s'arrete pas lorsque le joueur à fait un alignement de 4 pions , mais 3 alignements.


# -------------------------------------- Jeu de puissance 4 ---------------------------------- #
# Lepecheur #
# -------------------------------------------------------------------------------------------- #

# Interface

from Tkinter import *

# Classe du jeu

class Can(Canvas):


def __init__(self):

#Variables

self.cases = [] # Cases déjà remplies
self.listerouge = [] # Liste des cases rouges
self.listejaune = [] # Liste des cases jaunes
self.dgagnantes = [] # Cases déjà gagnantes et donc ne peuvent plus l"être à nouveau (cf "Continuer")
self.running = 1 # Type de partie en cours
self.couleur = ["Rouges", "Jaunes"]
self.color = ["red", "#EDEF3A"]

#Interface

self.clair = "light blue"
self.fonce = "navy blue"
self.police1 = "Times 17 normal"
self.police2 = "Arial 10 normal"
self.police3 = "Times 15 bold"
self.can = Canvas.__init__(self, width =446, height = 430, bg=self.fonce, bd=0)

self.grid(row=1, columnspan =5)

# Joueur en cours

self.joueur = 1
self.create_rectangle(20,400,115,425,fill=self.clair)
self.create_text(35, 405, text ="Joueur :", anchor = NW, fill = self.fonce, font= self.police2)
self.indiccoul = self.create_oval(85, 405, 100, 420, fill = self.color[1])

#Bouton Nouveau Jeu

self.create_rectangle(330,400,420,425,fill=self.clair)
self.create_text(340, 405, text ="Nouveau jeu", anchor = NW, fill = self.fonce, font= self.police2)

#Création des cases

self.ovals = []
for y in range(10, 390, 55):
for x in range(10, 437, 63):
self.ovals.append(self.create_oval(x, y, x + 50, y + 50 , fill= "white"))

#En cas de click

self.bind("<Button-1>", self.click)

# Pour relier à la fin les coordonnées des centres des cases

self.coordscentres = []

# Comptabilisation des suites de pièces

self.rouges, self.jaunes = 0,0

# Dictionnaire de reconnaissance

self.dictionnaire = {}
v = 0
for y in range(10, 390, 55):
for x in range(10, 437, 63):
self.dictionnaire[(x, y, x + 50, y + 50)] = v
v += 1
self.coordscentres.append((x + 25, y + 25))


def click(self,event): #En cas de click
if 330 < event.x and 400 < event.y and event.x < 420 and event.y < 425:
self.new()# =>Nouveau jeu

#Jeu en cours: reconnaissance de la case jouée

else :
if self.running != 0:
for (w, x, y, z) in self.dictionnaire:
if event.x > (w, x, y, z)[0] and event.y >(w, x, y, z)[1] and event.x < (w, x, y, z)[2] and event.y < (w, x, y, z)[3]:
self.colorier(self.dictionnaire[(w, x, y, z)]) # => Jouer


def colorier(self, n, nb=0): #Gère la coloration des cases

if n in self.cases : return # Une case coloriée ne peut plus changer de couleur

if n + 7 not in self.cases and n + 7 < 49: #Si la case en dessous est vide et existe, on essaie d'abord de colorier celle-là
self.colorier(n+7)

else:

#Sinon on colorie celle-ci

self.itemconfigure(self.ovals[n], fill = self.color[self.joueur])
self.cases.append(n)
self.color[self.joueur] == 'red' and self.listerouge.append(n) or self.listejaune.append(n)
self.listejaune = [case for case in self.listejaune if case not in self.listerouge]
self.verif(n)

#Changement de joueur

self.joueur = [0,1][[0,1].index(self.joueur)-1]
self.itemconfigure(self.indiccoul, fill = self.color[self.joueur])

#On regarde toutes les cases sont remplies

self.verificationFinale()

return


def verif(self, n): # Vérifie si la pièce ajoutée s'aligne avec trois autres déjà placées

if self.running == 0 : return

if n in self.listerouge and n+7 in self.listerouge and n+14 in self.listerouge and n+21 in self.listerouge: # D'abbord à la verticale,
# séparément car proximité d'un bord inintéressante
liste=[n, n+7, n+14, n+21] # Pour gérér les parties "plurigagnantes"
if self.gagnantes(liste) : self.win("rouges", liste[0],liste[3])
return

#idem pour jaunes

if n in self.listejaune and n+7 in self.listejaune and n+14 in self.listejaune and n+21 in self.listejaune:
liste=[n, n+7, n+14, n+21]
if self.gagnantes(liste) : self.win("jaunes", liste[0],liste[3])
return

for x in (1,-6,8):

if n in self.listerouge: # en s'assurant qu'elles ne sont trop près des bords (pour ne pas arriver de l'autre coté du plateau)
if n % 7 != 6 and n+x in self.listerouge:
if n % 7 != 5 and n+ 2*x in self.listerouge:
if n % 7 != 4 and n + 3*x in self.listerouge:
liste = [n, n+x, n+2*x, n+3*x]
if self.gagnantes(liste) : self.win("rouges", liste[0],liste[3])
return
if n%7 > 0 and (n-x) in self.listerouge:
liste = [n-x,n, n+x, n+2*x]
if self.gagnantes(liste) : self.win("rouges", liste[0],liste[3])
return
if n%7 > 1 and (n-x) in self.listerouge:
if n%7 > 2 and n-(2*x) in self.listerouge:
liste = [n-2*x, n-x,n, n+x]
if self.gagnantes(liste) : self.win("rouges", liste[0],liste[3])
return

#Pareil pour les jaunes

if n in self.listejaune:
if n % 7 != 6 and n+x in self.listejaune:
if n % 7 != 5 and n+ 2*x in self.listejaune:
if n % 7 != 4 and n + 3*x in self.listejaune:
liste = [n, n+x, n+2*x, n+3*x]
if self.gagnantes(liste) : self.win("jaunes", liste[0],liste[3])
return
if n%7 > 0 and (n-x) in self.listejaune:
liste = [n-x,n, n+x, n+2*x]
if self.gagnantes(liste) : self.win("jaunes", liste[0],liste[3])
return
if n%7 > 1 and (n-x) in self.listejaune:
if n%7 > 2 and n-(2*x) in self.listejaune:
liste = [n-2*x, n-x,n, n+x]
if self.gagnantes(liste) : self.win("jaunes", liste[0],liste[3])
return


for x in (-1,6,-8):

if n in self.listejaune:
if n % 7 != 0 and (n+x) in self.listejaune:
if n % 7 != 1 and n+(2*x) in self.listejaune:
if n % 7 != 2 and n + (3*x) in self.listejaune:
liste = [n, n+x, n+2*x, n+3*x]
if self.gagnantes(liste) : self.win("jaunes", liste[0],liste[3])
return
if n%7 <6 and (n-x) in self.listejaune:
liste = [n-x,n, n+x, n+2*x]
if self.gagnantes(liste) : self.win("jaunes", liste[0],liste[3])
return
if n%7 < 5 and (n-x) in self.listejaune:
if n%7 < 4 and n-(2*x) in self.listejaune:
liste = [n-2*x, n-x,n, n+x]
if self.gagnantes(liste) : self.win("jaunes", liste[0],liste[3])
return

if n in self.listerouge:
if n % 7 != 0 and (n+x) in self.listerouge:
if n % 7 != 1 and n+(2*x) in self.listerouge:
if n % 7 != 2 and n + (3*x) in self.listerouge:
liste = [n, n+x, n+2*x, n+3*x]
if self.gagnantes(liste) : self.win("rouges", liste[0],liste[3])
return
if n%7 <6 and (n-x) in self.listerouge:
liste = [n-x,n, n+x, n+2*x]
if self.gagnantes(liste) : self.win("rouges", liste[0],liste[3])
return
if n%7 < 5 and (n-x) in self.listerouge:
if n%7 < 4 and n-(2*x) in self.listerouge:
liste = [n-2*x, n-x,n, n+x]
if self.gagnantes(liste) : self.win("rouges", liste[0],liste[3])
return


def verificationFinale(self):#Lorsque toutes les cases sont remplies

if len(self.cases)==49: # On comptabilise les points
typ =self.plus() # Type de partie gagnée
if typ[1]==0:
self.texte2 = Label(fen, text = "Les " + typ[0] + " ont définitivement gagné !", bg= self.fonce,
fg=self.clair, font=self.police1)
self.texte2.grid()
elif typ[1]==1:
self.texte2 = Label(fen, text = "Les " + typ[0] + " ont gagné les premiers!", bg= self.fonce,
fg=self.clair, font=self.police1)
self.texte2.grid()
else:
self.texte2 = Label(fen, text = typ[0], bg= self.fonce, fg=self.clair, font=self.police1)
self.texte2.grid(padx=110)


def win(self, qui, p, d): # Partie gagnée

#Marquage des pièces gagnantes

self.create_line(self.coordscentres[p][0], self.coordscentres[p][1],
self.coordscentres[d][0], self.coordscentres[d][1],
fill="blue")

if qui=="rouges" : self.rouges += 1 #Comptabilisation des suites
if qui=="jaunes" : self.jaunes += 1

if self.running == 3:
self.pRouges.config(text = "Rouges : " + str(self.rouges))
self.pJaunes.config(text = "Jaunes : " + str(self.jaunes))
return

#Affichage des scores

self.qui = qui
self.texte = Label(fen, text="Les %s ont gagné !" % (qui), bg= self.fonce, fg=self.clair, font=self.police1)
self.texte.grid()
self.running = 0

#Proposition de continuer

self.BtnContinuer = Button(fen, text=" Continuer cette partie", bd= 0, bg=self.fonce, fg=self.clair,
font=self.police3, command=self.continuer)
self.BtnContinuer.grid(padx=120)


def continuer(self): # Si on choisi de poursuivre la même partie (déjà gagnée par un joueur)

self.running = 3

# Affichage des scores

self.pRouges = Label(fen, text = "Rouges : %s" %(str(self.rouges)),
font=self.police3, bg=self.fonce, fg=self.clair)
self.pJaunes = Label(fen, text = "Jaunes : %s" %( str(self.jaunes)),
font=self.police3, bg=self.fonce, fg=self.clair)

self.BtnContinuer.destroy()
self.texte.destroy()
self.pRouges.grid(padx=160)
self.pJaunes.grid(padx=160)


def gagnantes(self, liste=[]): # On vérifie que les pièces ne sont pas encore gagnantes, et on les ajoute dans la liste si elles le deviennent

for i in liste:
if i in self.dgagnantes: return 0

for n in liste:
self.dgagnantes.append(n)

return 1


def plus(self): # Donner le résultat final

if self.rouges > self.jaunes : return "Rouges",0
if self.jaunes > self.rouges : return "Jaunes",0
if self.rouges != 0 : return self.qui, 1 # En cas d'égalité, le premier à avoir aligné ses pièces gagne

return "Personne n'a gagné", 2 #Sinon, tous deux ont perdu


def new(self):# Nouveau Jeu

# Opérations non certaines

try:
self.BtnContinuer.destroy()
except:
pass
try:
self.texte.destroy()
except:
pass
try:
self.texte2.destroy()
except:
pass
try:
self.pRouges.destroy()
except:
pass
try:
self.pJaunes.destroy()
except:
pass

# Opérations qui le sont

self.destroy()
self.__init__()


if __name__ == "__main__" :
fen = Tk()
fen.title("Puissance 4")
fen.config(bg="navy blue")
lecan = Can()
fen.mainloop()


Cette discussion est classée dans : and, liste, self, in, if


Répondre à ce message

Sujets en rapport avec ce message

tri de fichier [ par mtanfin ] Bonjour;Alors voilà en fait je voudrais trier des fichiers en fonction de leur date de création. en fait le but est de regarder dans chaque fichier si Tkinter - ScrolledCanvas - Les objets dépassents du Canevas [ par Chris3392 ] Bonjour, Je suis en train de coder une console qui surveille des abus d'utilisation d'armes sur des jeux en réseau (FPS). A cet effet j'ai codé un Sc Problèmme de code [ par DAAEz ] Salut, Je me suis lancé dans un programme et la je rame ( à ce niveau la c'est plus des rames mais des cuillères...). Voyez plutôt par vous mêmes. Je mise a jour d'une liste d'une listbox en wxpython [ par maissaab ] bonjour, j'ai un gros problème qui peut être évident pour certain mais je suis débutante en wxpython en fait sur mon interface j'ai une list box qui i set position of nodes and edge automaticly [ par maissaab ] hi, i have a txt file that contain relations like "a":"b","b:"c".... i want to paint the graph of this relations paint node and edges.the problem is t Ouvrir une image au format pgm ASCII [ par PunkFloyd91 ] Bonjour, petit soucis cela fait plusieurs jours que je cherche sur internet et je ne trouve pas comment ouvrir une image dans le format pgm en ASCII v Comment parcourir une liste pour tester des combinaisons [ par lifetor ] Bonjour à tous, j'ai un petit problème,enfin que je n'arrive pas à résoudre. J'ai une liste [code=py]table = [[[0, 0, 0, 0], [4, 1, 4, 4], [1, 4, 4, 3 mise à jour des listes deroulantes pour poster un commentaire PHP [ par jeffreynaz ] Bonjour Pour mon site je souhaite faire cela: un utilisateur choisi un article, choisi un commentaire déjà posté sur l'article, ensuite il rempli u é et è convertir ! [ par gomofr ] Bonjour, J'ai développé un toolkit pour un jeu en ligne appellé "grepolis" ! [^^!2] Voici mon problème, la liste de donné télécharger (donné d'allia Validation d'un code baree [ par vianneyba ] Boujour, j'utilise un programme a mon boulot fait par mes soins en python et avec une interface TKinter qui permet de lister une commande apres avoir


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales