Besoin d'aide pour création d'un jeu Python

2loulous Messages postés 5 Statut Membre -  
tomsawyer1311 Messages postés 447 Statut Membre -
Bonjour à tous,
Nous sommes deux élèves en ISN et nous devons réaliser un jeu sur Python dont la règle est: "Réalisez un jeu dans lequel des formes carrées ou circulaires arrivent du fond de l’écran. Pour gagner un maximum de points, vous devez cliquer sur ces formes le plus vite possible, avec le bouton gauche pour les cercles et le droit pour les carrés."

Nous n'arrivons pas à faire apparaitre aléatoirement et à chaque clic de souris des ronds ou des carrés. Et il faut également qu'ils apparaissent aléatoirement dans la fenêtre.

Merci de votre aide

2 réponses

  1. khrug
     
    Bonsoir.

    Présente le code déjà réalisé ;)

    Faire apparaitre soit un carré, soit un rond, c'est simplement lier par exemple le chiffre 0 au carré et le 1 au rond, et avec random.randint, tirer un chiffre au sort.

    En ce qui concerne le délai d'apparitions des formes, il faut spécifier la bibliothèque graphique utilisée.
    1
    1. 2loulous
       
      Merci de votre aide ça nous avance déjà beaucoup ! Nous utilisons la bibliothèque tkinter
      0
    2. 2loulous Messages postés 5 Statut Membre
       
      Pour l'instant on a fait cela pour créer les fenêtres d'accueil avec les règles etc...
      Mais à partir de "can2" le programme ne marche plus. Donc on a essayé de continuer avec une nouvelle page de code où notre Canvas marche.

      from tkinter import* 
      
      #Creation de la fenetre d'accueil
      
      fen1=Tk()
      fen1.title("Reflexes")
      fen1.geometry("500x600")
      
      can1=Canvas(fen1, width=1100,height=500)
      Image= PhotoImage(file="MonCoachPersonnel.gif")                 
      can1.create_image(100,60,image=Image)
      can1.place(x=500,y=10)
      
      #Creation d'une nouvelle fenetre pour les regles du jeu 
      
      def fenetrerules():
          top=Toplevel(fen2)
          lab=Label(top, text="Pour gagner un maximum de points, vous devez cliquer sur les formes le plus vite possible, avec le bouton gauche pour les cercles et le droit pour les carrés.")
          lab.pack()
      
      fen2=Tk() 
      boutonrules=Button(fen1,text="Rules",command=fenetrerules)
      boutonrules.place(x=250,y=100)
      
      #Creation de la fenetre du jeu 
      
      def fenetregame():
          top=Toplevel(fen3)
      
      fen3=Tk()
      boutongame=Button(fen1,text="Jouer",command=fenetregame)
      boutongame.place(x=400,y=100)
      
      
      
      
      can2=Canvas(boutongame,bg='dark grey',width=600,height=500)
      can2.place(x=500,y=100)
      
      
      def rond():
          can2.create_oval(30,30,60,60,width=2,fill="orange")
          
      boutonstart=Button(fen3,text="Start",command=rond)
      boutonstart.place(x=500,y=800)
      
      




      Notre autre page de code :

      from tkinter import*
      
      fen3=Tk()
      
      can2=Canvas(fen3,bg='dark grey',width=600,height=500)
      can2.place(x=500,y=100)
      
      def carre():
          can2.create_rectangle(30,30,60,60,width=2,fill="orange")
      
      def rond():
          can2.create_oval(30,30,60,60,width=2,fill="orange")
      
      boutonstart=Button(fen3,text="Start",command=rond)
      boutonstart.place(x=500,y=800)
      0
    3. khrug
       
      Lorsque tu fais
      fen1=Tk()
      tu crées une fenêtre, or, tu en fais 3 dans ton 1er script, pourquoi faire 3 fenêtres ?
      D'autant que la boucle événementielle (mainloop) n'a été lancée sur aucune des 3.

      Tu devrais déjà faire une simple fenêtre et un canvas, les considérations de fenêtres secondaires passent bien après avoir créé le coeur même de ton jeu.
      Donc d'abord au plus simple, créer une fenêtre et un canvas.
      Ensuite il faut créer une fonction permettant de créer une forme aléatoire (parmi le cercle et rectangle) à une coordonnée aléatoire sur le canvas.
      Puis relier un événement clic sur le canvas, pour le moment le clic fera apparaitre les formes au lieu de les détruire.

      Soit au plus simple :

      from tkinter import *
      import random
      
      def creer_forme(evt):
          # fonction qui doit créer soit un carré ou un cercle sur le canvas
          # sur la coordonnée du clic 
          
          print('clic sur x:', evt.x, 'et y:', evt.y)
      
      fenetre = Tk()
      canvas = Canvas(fenetre, width=1100, height=500, bg='white')
      canvas.pack()
      
      canvas.bind('<Button-1>', creer_forme)
      
      fenetre.mainloop()


      Si tu arrives déjà à créer un cercle ou carré sur la coordonnée du clic tu auras déjà bien avancé.

      Il viendra alors le temps de faire apparaitre les formes automatiquement.
      Hum, après relecture de ton sujet, je ne sais pas si le clic joueur doit faire disparaitre les formes cliquées ?
      0
    4. 2loulous Messages postés 5 Statut Membre
       
      Dés qu'une forme apparait il faut que celle-ci disparaisse lorsque l'on clique dessus et qu'une autre apparaisse.

      J'ai essayé d'écrire la fonction mais je ne vois pas comment l'associer au clic de souris avec les coordonnées.

      from tkinter import *
      import random
      
      def creer_forme(evt):
          choice(liste)
          print('clic sur x:', evt.x, 'et y:', evt.y)
      
      fenetre = Tk()
      canvas = Canvas(fenetre, width=1100, height=500, bg='white')
      canvas.pack()
      
      canvas.bind('<Button-1>', creer_forme)
      
      fenetre.mainloop()
      
      
      def carre():
          can2.create_rectangle(30,30,60,60,width=2,fill="orange")
      
      def rond():
          can2.create_oval(30,30,60,60,width=2,fill="orange")
      
      carre=0
      rond=1
      
      liste=(0,1)
      0
    5. khrug > 2loulous Messages postés 5 Statut Membre
       
      Bonjour,

      - Nomme tes fonctions décemment, carre devrait se nommer creer_carre, pareillement pour rond. D'autant que tu crées 2 variables avec pour noms carre et rond en fin de code, ce qui écrase tes 2 fonctions.
      - Ces 2 fonctions doivent recevoir 2 paramètres x et y.
      - choice n'existe pas, choice fait partie du module random, donc pour faire appel à cette fonction on écrit random.choice
      - random.choice tout comme les autres fonctions du module random retourne une valeur qu'il faut récupérer (affecter à une variable).
      - Sauf que random.choice n'a pas d'intérêt ici, random.randint est plus approprié pour tirer un nombre au hasard.

      Voici à quoi ton code devrait ressembler.

      def creer_forme(evt):
          # choix = tirer un nombre au hasard avec random.randint entre 0 et 1
          # si choix vaut 0 alors appeler fonction creer_rond en passant en paramètres evt.x et evt.y
          # sinon appeler fonction creer_carre en passant en paramètres evt.x et evt.y   
          
      def creer_rond(x, y):
          # Créer un rond en se basant sur la coordonnée x, y reçue
          
      def creer_carre(x, y):
          # Créer un carré en se basant sur la coordonnée x, y reçue


      Autre chose, tu ne dois rien mettre après
      fenetre.mainloop()
      , tout code situé après le mainloop ne sera exécuté qu'après fermeture de la fenêtre.
      0