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

Fermé
2loulous Messages postés 4 Date d'inscription vendredi 25 octobre 2019 Statut Membre Dernière intervention 26 octobre 2019 - 25 oct. 2019 à 18:45
tomsawyer1311 Messages postés 375 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 8 novembre 2019 - 26 oct. 2019 à 22:20
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
A voir également:

2 réponses

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
Merci de votre aide ça nous avance déjà beaucoup ! Nous utilisons la bibliothèque tkinter
0
2loulous Messages postés 4 Date d'inscription vendredi 25 octobre 2019 Statut Membre Dernière intervention 26 octobre 2019
Modifié le 25 oct. 2019 à 19:17
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
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
2loulous Messages postés 4 Date d'inscription vendredi 25 octobre 2019 Statut Membre Dernière intervention 26 octobre 2019
Modifié le 26 oct. 2019 à 15:02
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
khrug > 2loulous Messages postés 4 Date d'inscription vendredi 25 octobre 2019 Statut Membre Dernière intervention 26 octobre 2019
Modifié le 26 oct. 2019 à 16:23
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
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 342
25 oct. 2019 à 18:57
0