begin process at 2012 02 08 13:21:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > [PYTHON] JEU DU PENDU

[PYTHON] JEU DU PENDU


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Classé sous :jeu pendu, python, pygtk Niveau :Débutant Date de création :15/07/2010 Vu / téléchargé :4 660 / 204

Auteur : The_tito

Ecrire un message privé
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour a tous,

Voici mon premier programme en POO, un simple jeu du pendu fait en pygtk.
La recherche du mot inconnu se fait depuis un fichier texte (dico.txt)

J'ai essaie d'être le plus claire possible dans mon code mais je ne sais pas si j'y suis parvenus pour autant :p

Toutes remarques ou critiques sont les bienvenues

Source

  • #!/usr/bin/python
  • # -*- coding: Utf-8 -*-
  • # source:
  • # dico: http://www.siteduzero.com/tutoriel-3-194478-tp-pendu.html
  • # images: http://www.siteduzero.com/tutoriel-3-65538-tp-le-penduz.html
  • from random import randrange
  • import sys
  • import pygtk
  • pygtk.require("2.0")
  • import gtk
  • # ========================= CLASS: FENETRE =============================== #
  • class Fenetre:
  • "Gere les widgets du jeu"
  • myLabel = gtk.Label()
  • btReset = gtk.Button("Nouveau mot")
  • def __init__(self):
  • fen = gtk.Window( type=gtk.WINDOW_TOPLEVEL )
  • fen.set_default_size(400, 400)
  • fen.connect("destroy", self.on_fen_destroy)
  • fen.set_title("Jeu du pendu")
  • # tableau contiennant tous les widgets
  • TabWidget = gtk.Table(rows=3, columns=3)
  • self.myImage = gtk.Image()
  • self.myImage.set_from_file("img/pendu0.gif")
  • btOperation = [ "Nouveau mot", "Quitter" ]
  • i = 0
  • while i < len( btOperation ):
  • btOperation[i] = gtk.Button(btOperation[i])
  • btOperation[i].connect("clicked", self.on_btOperation_clicked)
  • i += 1
  • TabWidget.attach( btOperation[0], 0,1, 2,3)
  • TabWidget.attach( btOperation[1], 1,2, 2,3)
  • # Gere les boutons alpha dans un tableau
  • myTabAlpha = gtk.Table(13,3) # gere les bt lettre
  • alpha = [ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "-", "'" ]
  • self.btLettre = [0]*len(alpha)
  • i = 0
  • # instancie les boutons alpha
  • while i < len( alpha ):
  • self.btLettre[i] = gtk.Button( "<b>", alpha[i], "</b>" )
  • self.btLettre[i].connect("clicked", self.on_btLettre_clicked)
  • #self.btLettre[i].set_alignment(0.7,0.7)
  • i += 1
  • i, j, index, flag = 0, 0, 0, 1
  • # place les bt lettre dans un tableau (2x13)
  • while i < 13:
  • if flag == 0:
  • i += 1
  • flag, j = 1, 0
  • #print j, j+1, i, i+1
  • myTabAlpha.attach( self.btLettre[index], j, j+1, i, i+1, 5,5, )
  • index += 1
  • while j < 1:
  • j += 1
  • #print j, j+1, i, i+1
  • myTabAlpha.attach( self.btLettre[index], j, j+1, i, i+1, 5,5, )
  • index += 1
  • flag = 0
  • #print "\n"
  • # place tous les widgets dans un seul tableau
  • TabWidget.attach( self.myLabel, 0,3, 0,1 )
  • TabWidget.attach( self.myImage, 0,2, 1,2 )
  • #TabWidget.attach( self.btReset, 0,1, 2,3 )
  • TabWidget.attach( myTabAlpha, 2,3, 1,2 )
  • fen.add(TabWidget)
  • fen.show_all()
  • def on_fen_destroy(self, widget):
  • gtk.main_quit()
  • # evenement lorsque l'on clic sur btLettre
  • def on_btLettre_clicked(self, widget):
  • self.lettre = widget.get_label()
  • widget.set_sensitive(False) # desactive le btLettre cliquer
  • Pendu.deroulement() # methode contenant le corps du jeu
  • def on_btReset_clicked(self, widget):
  • Pendu.reset()
  • def on_btOperation_clicked(self, widget):
  • if widget.get_label() == "Nouveau mot":
  • Pendu.reset()
  • else:
  • sys.exit()
  • ######################### CLASS: PENDU ###############################
  • class Pendu:
  • "Classe contenue tous le code du pendu"
  • essaie = 0 # calcule le nb d'erreur + gestion de l'image si essaie = 3 charge image pendu3.gif
  • myLabel = Fenetre.myLabel
  • cptLettreDejaTrouvee = 0
  • def __init__(self):
  • self.inconnu = self.searchMot()
  • #self.inconnu = "ABBANDONNER"
  • self.longMot = len( self.inconnu )
  • self.indiceTrouve = [0]*self.longMot # stock 1 si lettre trouvee a l'indice i
  • self.myLabel.set_text( "<b>"+ self.inconnuConvertUnderscore()+ "</b>" )
  • self.myLabel.set_use_markup(True)
  • # converti mot en - - -
  • # ex: riz => - - -
  • def inconnuConvertUnderscore(self):
  • chaine, i = "", 0
  • while i < self.longMot:
  • chaine += " - "
  • i += 1
  • return chaine
  • # recherche un mot inconnu a partir du fichier dico.txt
  • def searchMot(self):
  • try:
  • file = open("dico.txt", "r")
  • except IOError:
  • print "fichier dico.txt introuvable !"
  • sys.exit(0)
  • nb, mot = randrange(22740), file.readlines()
  • file.close()
  • return mot[nb].upper().rstrip() # met le mot en MAJ + supp les espaces
  • # desactive tous les boutons
  • def desactiveAllBt(self, show=False):
  • i = 0
  • while i < len( Fenetre.btLettre ):
  • Fenetre.btLettre[i].set_sensitive(show)
  • i += 1
  • # N'EST PLUS UTILISEE
  • #def verifLettre(self):
  • #lettre = Fenetre.getMyEntry()
  • #print lettre
  • #l = entLettre.get().upper()
  • #entLettre.delete(0, END) # supp la lettre du champ entLettre
  • #print "long = ", len(l)
  • #if len(l) == 1:
  • #if l in ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'):
  • #return l # lettre entrée == lettre alpha ex: a
  • #else:
  • #afficheur.configure(text="Entrez uniquement une lettre alphabetique, svp")
  • #return 1 # ex: (
  • #else:
  • #afficheur.configure(text="N'Entrer qu'une seule lettre, svp")
  • #return 2 # ex: entrée == ax
  • # verifie si la lettre choisit pas l'user et dans inconnu
  • # ou si c'est la fin de la partie
  • def deroulement(self):
  • lettre = Fenetre.lettre
  • i, lTrouvee, etat, chaine = 0, 0, 0, ""
  • self.myLabel.set_text("")
  • while i < self.longMot:
  • if self.essaie > 7:
  • self.myLabel.set_text("Desole, vous avez perdu :(\n le mot etait: <b>" +self.inconnu+ "</b>")
  • self.myLabel.set_use_markup(True)
  • Fenetre.myImage.set_from_file("img/pendu8.gif")
  • self.desactiveAllBt(show=False)
  • return
  • if lettre == self.inconnu[i]:
  • self.indiceTrouve[i] = 1
  • self.cptLettreDejaTrouvee += 1
  • lTrouvee = 1 # lorsqu'une lettre est trouvee on pose un flag a 1 pour ne pas decrementer plusieurs fois essaie (car on n'est dans une boucle)
  • else:
  • if lTrouvee != 1:
  • etat = 1
  • else:
  • etat = 0
  • # affiche a l'user le resultation ex: A - - A - D O - - - -
  • if self.indiceTrouve[i] == 1:
  • print self.inconnu[i],
  • chaine += " "+self.inconnu[i]+" "
  • else:
  • print "_ ",
  • chaine += " - "
  • i += 1
  • self.myLabel.set_text( "<b>"+ chaine+ "</b>" ) # affiche le resultat courrant a l'user
  • self.myLabel.set_use_markup(True)
  • print "\ninconnu ", self.inconnu, " | etat ", etat, " | longMot ", self.longMot, " | essaie ", self.essaie, " | letDejaTrouvee ", self.cptLettreDejaTrouvee
  • # verifie si on n'a gagnner
  • if self.cptLettreDejaTrouvee == len( self.indiceTrouve ):
  • print "VOUS AVEZ GAGNER"
  • self.myLabel.set_text("<b> Bravo, vous avez gagnie :) \n\tmot: "+ self.inconnu+ "</b>")
  • self.myLabel.set_use_markup(True)
  • self.desactiveAllBt(show=False)
  • return
  • # si on n'a pas trouve de lettre on perd un essaie + changement img
  • if etat == 1:
  • self.essaie += 1
  • Fenetre.myImage.set_from_file("img/pendu" +str(self.essaie)+ ".gif")
  • # remet a zero les attributs
  • def reset(self):
  • print "RESET PARTIE"
  • Fenetre.myImage.set_from_file("img/pendu0.gif")
  • #self.inconnu = "ABBANDONNER"
  • self.inconnu = self.searchMot()
  • self.longMot = len( self.inconnu )
  • self.myLabel.set_text( "<b>" +self.inconnuConvertUnderscore()+ "</b>" )
  • self.myLabel.set_use_markup(True)
  • self.essaie = 0
  • self.cptLettreDejaTrouvee = 0
  • self.indiceTrouve = [0]*self.longMot
  • self.desactiveAllBt(show=True)
  • if __name__ == "__main__":
  • Pendu = Pendu()
  • Fenetre = Fenetre()
  • gtk.main()
#!/usr/bin/python
# -*- coding: Utf-8 -*-
# source:
#		dico: http://www.siteduzero.com/tutoriel-3-194478-tp-pendu.html
#		images: http://www.siteduzero.com/tutoriel-3-65538-tp-le-penduz.html

from random import randrange
import sys

import pygtk
pygtk.require("2.0")
import gtk


# ========================= CLASS: FENETRE =============================== #
class Fenetre:
	"Gere les widgets du jeu"
	myLabel = gtk.Label()
	btReset = gtk.Button("Nouveau mot")
	
	def __init__(self):
		fen = gtk.Window( type=gtk.WINDOW_TOPLEVEL )
		fen.set_default_size(400, 400)
		fen.connect("destroy", self.on_fen_destroy)
		fen.set_title("Jeu du pendu")
		
		# tableau contiennant tous les widgets
		TabWidget = gtk.Table(rows=3, columns=3)
		
		self.myImage = gtk.Image()
		self.myImage.set_from_file("img/pendu0.gif")

		btOperation = [ "Nouveau mot", "Quitter" ]
		i = 0
		while i < len( btOperation ):
			btOperation[i] = gtk.Button(btOperation[i])
			btOperation[i].connect("clicked", self.on_btOperation_clicked)
			i += 1
	
		TabWidget.attach( btOperation[0], 0,1, 2,3)	
		TabWidget.attach( btOperation[1], 1,2, 2,3)	
	

		# Gere les boutons alpha dans un tableau
		myTabAlpha = gtk.Table(13,3)		# gere les bt lettre
		
		alpha = [ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "-", "'" ]
		self.btLettre = [0]*len(alpha)

		i = 0 		
		# instancie les boutons alpha
		while i < len( alpha ):
			self.btLettre[i] = gtk.Button( "<b>", alpha[i], "</b>" )
			self.btLettre[i].connect("clicked", self.on_btLettre_clicked) 
			#self.btLettre[i].set_alignment(0.7,0.7)
			i += 1

		i, j, index, flag = 0, 0, 0, 1
		# place les bt lettre dans un tableau (2x13)
		while i < 13:
			if flag == 0:
				i += 1
				flag, j = 1, 0
			
			#print j, j+1, i, i+1
			myTabAlpha.attach( self.btLettre[index], j, j+1, i, i+1, 5,5, )
			index += 1

			while j < 1:
				j += 1
				#print j, j+1, i, i+1
				myTabAlpha.attach( self.btLettre[index], j, j+1, i, i+1, 5,5, )
				index += 1
				flag = 0
				#print "\n"

		# place tous les widgets dans un seul tableau
		
		TabWidget.attach( self.myLabel, 0,3, 0,1 )
		TabWidget.attach( self.myImage, 0,2, 1,2 )
		#TabWidget.attach( self.btReset, 0,1, 2,3 )
		TabWidget.attach( myTabAlpha, 2,3, 1,2 )

		fen.add(TabWidget)
		fen.show_all()

	def on_fen_destroy(self, widget):
		gtk.main_quit()

	# evenement lorsque l'on clic sur btLettre
	def on_btLettre_clicked(self, widget):
		self.lettre = widget.get_label()
		widget.set_sensitive(False)			# desactive le btLettre cliquer
		Pendu.deroulement()				# methode contenant le corps du jeu

	def on_btReset_clicked(self, widget):
		Pendu.reset()

	def on_btOperation_clicked(self, widget):
		if widget.get_label() == "Nouveau mot":
			Pendu.reset()
		else:
			sys.exit()



######################### CLASS: PENDU ###############################
class Pendu:
	"Classe contenue tous le code du pendu"
	essaie = 0		# calcule le nb d'erreur + gestion de l'image si essaie = 3 charge image pendu3.gif	
	myLabel = Fenetre.myLabel
	cptLettreDejaTrouvee = 0
	
	def __init__(self):
		self.inconnu = self.searchMot()
		#self.inconnu = "ABBANDONNER"
		self.longMot = len( self.inconnu )
		self.indiceTrouve = [0]*self.longMot		# stock 1 si lettre trouvee a l'indice i 
		
		self.myLabel.set_text( "<b>"+ self.inconnuConvertUnderscore()+ "</b>" )
		self.myLabel.set_use_markup(True)
		
	# converti mot en - - - 
	# ex: riz => - - -
	def inconnuConvertUnderscore(self):
		chaine, i = "", 0

		while i < self.longMot:
			chaine += " - "
			i += 1

		return chaine

	# recherche un mot inconnu a partir du fichier dico.txt
	def searchMot(self):
		try:
			file = open("dico.txt", "r")
		except IOError:
			print "fichier dico.txt introuvable !"
			sys.exit(0)

		nb, mot = randrange(22740), file.readlines()
		file.close()

		return mot[nb].upper().rstrip()		# met le mot en MAJ + supp les espaces

	# desactive tous les boutons
	def desactiveAllBt(self, show=False):
			i = 0
			while i < len( Fenetre.btLettre ):
				Fenetre.btLettre[i].set_sensitive(show)
				i += 1


	# N'EST PLUS UTILISEE
	#def verifLettre(self):
		#lettre = Fenetre.getMyEntry()
		#print lettre
		#l = entLettre.get().upper()
		#entLettre.delete(0, END)		# supp la lettre du champ entLettre
		#print "long = ", len(l)
		#if len(l) == 1:
			#if l in ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'):
				#return l			# lettre entrée == lettre alpha ex: a 
			#else:
				#afficheur.configure(text="Entrez uniquement une lettre alphabetique, svp")
				#return 1			# ex: (
		#else:
			#afficheur.configure(text="N'Entrer qu'une seule lettre, svp")
			#return 2				# ex: entrée == ax

	# verifie si la lettre choisit pas l'user et dans inconnu 
	# ou si c'est la fin de la partie
	def deroulement(self):
		lettre = Fenetre.lettre
		i, lTrouvee, etat, chaine = 0, 0, 0, ""

		self.myLabel.set_text("")
		while i < self.longMot:
			if self.essaie > 7:
				self.myLabel.set_text("Desole, vous avez perdu :(\n le mot etait: <b>" +self.inconnu+ "</b>")
				self.myLabel.set_use_markup(True)
				Fenetre.myImage.set_from_file("img/pendu8.gif")
				self.desactiveAllBt(show=False)
				return

			if lettre == self.inconnu[i]: 
					self.indiceTrouve[i] = 1
					self.cptLettreDejaTrouvee += 1
					lTrouvee = 1	# lorsqu'une lettre est trouvee on pose un flag a 1 pour ne pas decrementer plusieurs fois essaie (car on n'est dans une boucle)
			else:
				if lTrouvee != 1:
					etat = 1
				else: 
					etat = 0

			# affiche a l'user le resultation ex: A - - A - D O - - - -
			if self.indiceTrouve[i] == 1:
				print self.inconnu[i],
				chaine += " "+self.inconnu[i]+" "
			else:
				print "_ ",
				chaine += " - "
			
			i += 1
		
		self.myLabel.set_text( "<b>"+ chaine+ "</b>" )	# affiche le resultat courrant a l'user
		self.myLabel.set_use_markup(True)
		print "\ninconnu ", self.inconnu, " | etat ", etat, " | longMot ", self.longMot, " | essaie ", self.essaie, " | letDejaTrouvee ", self.cptLettreDejaTrouvee
		
		# verifie si on n'a gagnner
		if self.cptLettreDejaTrouvee == len( self.indiceTrouve ):
			print "VOUS AVEZ GAGNER"
			self.myLabel.set_text("<b> Bravo, vous avez gagnie :) \n\tmot: "+ self.inconnu+ "</b>")
			self.myLabel.set_use_markup(True)
			self.desactiveAllBt(show=False)
			return
		
		# si on n'a pas trouve de lettre on perd un essaie + changement img
		if etat == 1:
			self.essaie += 1
			Fenetre.myImage.set_from_file("img/pendu" +str(self.essaie)+ ".gif")
		
	# remet a zero les attributs
	def reset(self):
		print "RESET PARTIE"
		Fenetre.myImage.set_from_file("img/pendu0.gif")
		#self.inconnu = "ABBANDONNER"
		self.inconnu = self.searchMot()
		self.longMot = len( self.inconnu )
		self.myLabel.set_text( "<b>" +self.inconnuConvertUnderscore()+ "</b>" )
		self.myLabel.set_use_markup(True)
		self.essaie = 0
		self.cptLettreDejaTrouvee = 0
		self.indiceTrouve = [0]*self.longMot
		self.desactiveAllBt(show=True)


if __name__ == "__main__":
	Pendu = Pendu()
	Fenetre = Fenetre()
	gtk.main()


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture UN SIMPLE SNAKE EN JAVA par Niidhogg
Source avec Zip Source avec une capture [MIDP] SIMPLE CHESS BOARD par loloof64
Source avec Zip Source avec une capture JEU DE DAMES par Julien39
Source avec Zip BLACKBOX SWING ET JAVA2D par GodConan
Source avec Zip Source avec une capture COMBAT DE SERPENTS VERSION MIDLET par khilio

 Sources en rapport avec celle ci

Source avec Zip TPYCODE, TRADUCTEUR DE CODE par jonathan33350
Source avec une capture JEU DU SERPENT (SNAKE) par zarash
Source avec Zip Source avec une capture TRIANGULATION par mecrosoft
Source avec Zip Source avec une capture COURBE DE BEZIER par mecrosoft
Source avec une capture [PYGTK] LECTEUR MULTI-VIDÉO EMBARQUANT MPLAYER GRÂCE À L'ID ... par loupmagic

Commentaires et avis

Commentaire de xeolin le 21/08/2010 07:26:59 10/10

/!\ Fautes lignes 213 et 214 et vive le franglais ^^

Wow, simple, amusant, vraiment cool.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

tutoriaux python [ par slachz ] voilà un tuto FR tres remplie en python (il existe en bouquin mais est telechargeable gratuitement) :http://www.ulg.ac.be/cifen/inforef/swi/python.htm installation python [ par champagnef ] Bonjour,je suis nouveau sur python. J'apprends (en amateur intéressé) avec le cours de G. Swinnen et autres tuto.Je suis sur Mac Os X.3.5 et je pense Projet Python: Lecteur de flux RSS. [ par Marvin ] Amis codeurs, bien le bonjour (ou plutot bonsoir car il est 00:33 ( GTM + 1h ) ) ,J'ai en tête depuis déja quelques jours, de créer un lecteur de flux Paramétrage de python [ par deguelatore ] salut à tous. Je voulai vous demandez si on peut se débarrasser du mode interactif de python?? Vous savez les 3 flèches (&gt;&gt;&gt;).C'est juste pas Tk vs wx [ par bonac ] Bonjour,Je doit faire une assez grosse application en python, le problème est que je ne connaissait pas python (du moins de nom) le mois dernier. Cett Help : Python/DB/CGI [ par Chill_Sik ] Bonjour à tous, voila qqjours que je me casse les dents sur un petit problème alors je me décide a appeler "au secour" car on ne sait jamais que certa WebCam [ par DoudouBidou ] Après plusieurs recherche je n'ai pas trouvé de script python capable de diffusé une webcam sur un réseaudonc je lance le débat, est-il possible de ré dll avec python? [ par LokR ] Salut tout le monde!je me pose une kestion, je pense pas que ce soit possible mais d'un autre coté je pensais pas kon puisse faire d' *.exe avec pytho aide pour xchat svp [ par Jamu ] Salut a tous Je debute sur xchat et le python ben je connais pas,j'ai chercher des tuto sur google mais j'ai trouvé que des tuto de python en général les variables vu par Plone... [ par onlybjork ] Bonjour.Je suis designer, et dans le cadre d'une intégration de charte sous plone, j'ai besoin d'incrémenter tout simplement une variable. Seulement,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 2,028 sec (3)

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