Améliorations d'un petit jeu

Un petit jeu.

On a écrit ci-dessous un petit jeu pour jeunes enfants pour apprendre à compter.

Commencez par tester et comprendre le fonctionnement.

Après cela, votre première mission sera de modifier le jeu de façon à ce que l'utilisateur puisse choisir un nombre de disques qui devra être un multiple de 4 compris entre 4 (c'est le nombre actuel) et 20.


# import des modules tkinter et random :
from tkinter import *
import random


def lancer():
	"""  Choix des couleurs des disques pour une nouvelle partie."""
	# remise à vide du texte de réponse ordinateur
	# avant nouveau lancer :
	bilan.config(text = '')  
	# effacement de la réponse précédente du joueur
	# avant nouveau lancer :
	case_reponse.delete(0, END)
	# remise à zéro du décompte de disques jaunes
	# avant nouveau lancer :
	grille.nbDisquesJaunes = 0 
	
	# boucle de choix des nouvelles couleurs :
	for i in range(0,len(cercles)) :
			# choix d'une couleur : 
			couleur = random.choice(['Purple', 'Yellow'])
			# si couleur jaune, on le comptabilise :
			if couleur == 'Yellow' : grille.nbDisquesJaunes += 1
			# mise à jour de la couleur du disque : 
			grille.itemconfig(cercles[i], fill = couleur)  
			 
			 
			
def verification():
	""" 
	Vérification par l'ordinateur de la réponse du joueur 
	et affichage d'un message en fonction de la validité de cette réponse.
	"""
	
	# récupération de la réponse du joueur :
	reponseJoueur = int(case_reponse.get())
	# comparaison de la réponse du joueur 
	# avec le nombre de disques jaunes 
	# et affichage du message adéquat :
	if reponseJoueur == grille.nbDisquesJaunes :
		bilan.config(text = "correct")
	else:
		bilan.config(text = "incorrect")
	 
	 
# création de la fenêtre graphique maîtresse :
fenetre = Tk()
# titre de la fenêtre :
fenetre.title('Jeu')
# dimensions et positionnement dans l'écran :
fenetre.geometry('350x250+200+100')


# création d'un canevas pour les disques :
grille = Canvas(fenetre, width=200, height=200)
# grille se place en ligne 1 colonne 0 et occupe une hauteur de 5 lignes :
grille.grid(row = 1, rowspan = 5, column = 0)
# création du fond vert :
grille.create_rectangle(0,0,200,200,fill='Green')
# création de la croix rouge centrale :
grille.create_line(100,0,100,200,fill='Red')
grille.create_line(0,100,200,100,fill='Red')
# création des disques dans la grille :
cercles = []
for i in range(0,2):
		for j in range (0,2):
			cercles.append( grille.create_oval(i*100,j*100,i*100+100,j*100+100,fill = 'white') )
# création d'un attribut "nombre de disques jaunes" pour l'objet grille :
grille.nbDisquesJaunes = 0  


# mise en place des étiquettes et boutons d'interface du jeu :
regledujeu = Label(fenetre,text='Lancez, comptez le nombre de disques jaunes et validez')
regledujeu.grid(row = 0,column = 0, columnspan = 2)

bouton_lancer = Button(fenetre, text='Lancer', command = lancer)
bouton_lancer.grid(row = 1, column = 1)

case_reponse = Entry(fenetre)
case_reponse.grid (row = 2, column = 1)

bilan = Label(fenetre,text = '')
bilan.grid(row = 4,column = 1)

bouton_valider = Button(fenetre, text='Valider', command = verification)
bouton_valider.grid(row = 3, column = 1)

bouton_quitter = Button(fenetre, text = 'Quitter',command = fenetre.destroy)
bouton_quitter.grid(row = 5, column = 1)

# lancement du gestionnaire d'événements :
fenetre.mainloop()

Un code possible :


# import des modules tkinter et random :
from tkinter import *
import random





def lancer():
	"""  Choix des couleurs des disques pour une nouvelle partie."""
	
	# remise à vide du texte de réponse ordinateur
	# avant nouveau lancer :
	bilan.config(text = '')  
	# effacement de la réponse précédente du joueur
	# avant nouveau lancer :
	case_reponse.delete(0, END)
	# remise à zéro du décompte de disques jaunes
	# avant nouveau lancer :
	grille.nbDisquesJaunes = 0 
	
	# boucle de choix des nouvelles couleurs :
	for i in range(0,len(cercles)) :
			# choix d'une couleur : 
			couleur = random.choice(['Purple', 'Yellow'])
			# si couleur jaune, on le comptabilise :
			if couleur == 'Yellow' : grille.nbDisquesJaunes += 1
			# mise à jour de la couleur du disque : 
			grille.itemconfig(cercles[i], fill = couleur)  
			 
			 
			

 
def verification():
	""" 
		Vérification par l'ordinateur de la réponse du joueur 
		et affichage d'un message en fonction de la validité de cette réponse.
	"""
	
	# récupération de la réponse du joueur :
	reponseJoueur = int(case_reponse.get())
	# comparaison de la réponse du joueur 
	# avec le nombre de disques jaunes 
	# et affichage du message adéquat :
	if reponseJoueur == grille.nbDisquesJaunes :
		bilan.config(text = "correct")
	else:
		bilan.config(text = "incorrect")
	 

	 
	 
	 
	 
def choisirNbDisques() :
	""" Gestion fenêtre pour choisir le nombre total de disques """
	
	def  majDisques() :
		""" mettre à jour le nombre total de disques selon choix utilisateur """
		# récupération du nouveau nombre de disques :
		fenetre.nbDisques = choixNbdisques.get()
		# redimensionnement du canevas :
		grille.config(height= (fenetre.nbDisques//4)*diametre)
		# destruction des disques existants :
		for i in range(len(cercles)) : grille.delete(cercles.pop())
		# création de nouveaux disques dans la grille :
		for i in range(0,4):
			for j in range (0, fenetre.nbDisques//4):
					cercles.append( grille.create_oval(i*diametre,j*diametre,(i+1)*diametre ,(j+1)*diametre,fill = 'white') )
					
		
	# création d'une fenêtre secondaire pour modifier le nombre
	# de disques total dans le jeu
	fenetreChoix = Toplevel(fenetre)
	fenetreChoix.title("Choix du nombre total de disques.")
	Label(fenetreChoix, text = "Nombre total de disques ? ").grid(row = 0, column = 0)
	choixNbdisques = IntVar()
	for i in range(4,21,4) :
		Radiobutton( fenetreChoix, text = str(i), variable = choixNbdisques, value = i, command = majDisques).grid(row = 0, column = i//4)
	 
	Button(fenetreChoix, text = 'Quitter', command = fenetreChoix.destroy).grid(row = 2, column = 2)
	 
	


# création de la fenêtre graphique de la zone de jeu :
fenetre = Tk()
# titre de la fenêtre :
fenetre.title('Jeu')
 

# nombre de disques par défaut :
fenetre.nbDisques = 4
# diamètre d'un disque :
diametre = 50


# création d'un canevas :
grille = Canvas(fenetre, width= 4 * diametre, height= (fenetre.nbDisques//4)*diametre, bg='green')

# grille se place en ligne 1 colonne 0 et occupe une hauteur de 6 lignes :
grille.grid(row = 1, rowspan = 6, column = 0)
  
# création des disques dans la grille :
cercles = []
for i in range(0,4):
	for j in range (0, fenetre.nbDisques//4):
			cercles.append( grille.create_oval(i*diametre,j*diametre,(i+1)*diametre ,(j+1)*diametre,fill = 'white') )
			
# création d'un attribut "nombre de disques jaunes" pour l'objet grille :
grille.nbDisquesJaunes = 0  

	 

# mise en place des étiquettes et boutons d'interface du jeu :
Label(fenetre,text='Lance, compte le nombre de disques jaunes puis valide.').grid(row = 0,column = 0, columnspan = 2)

Button(fenetre, text='Lancer', command = lancer).grid(row = 1, column = 1)

Label(fenetre, text = "Quel nombre de disques jaunes vois-tu ? ").grid(row = 2, column = 1)
case_reponse = Entry(fenetre)
case_reponse.grid (row = 2, column = 2)

Button(fenetre, text='Valider', command = verification).grid(row = 3, column = 1)
bilan = Label(fenetre,text = '')
bilan.grid(row = 3,column = 2)

Button(fenetre, text='Modification du nombre total de disques', command = choisirNbDisques).grid(row = 5, column = 1)
Button(fenetre, text = 'Quitter',command = fenetre.destroy).grid(row = 6, column = 1)



# lancement du gestionnaire d'événements :
fenetre.mainloop()

Un petit jeu, suite.

On reprend le code du corrigé de l'exercice précédent.

Vous devez maintenant ajouter un compteur de bonnes réponses.

Après le premier clic sur le bouton "Valider", un message affichant le rapport
nombre de bonnes réponses/nombre de clics sur "valider"
devra s'afficher et se mettre à jour après chaque clic.

Un code possible :