besoin d'aide pour un programme - Python - Programmation
MarshPosté le 18-05-2009 à 19:28:05
samuel310
Bonjour a tous, Je suis nouveau sur ce forum et débutant avec python. Je dois créer un petit jeu avec language python pour l'école, programme noté bien sur. Je pensait faire un jeu 2D avec des cercle qui se déplacent dans un caneva, le joueur devra réussir à les éviter en bougeant lui-même son cercle. Voilà a quoi j'arrive maintenant, il est loin d'être parfait. J'ai quelque problèmes notamment pour réussir à bloquer le jeu si le cercle du joueur se fait toucher, créer une sorte de compteur pour afficher combien de temps le joueur aura tenu jusqu'à la fin et aussi, mais ca devient très difficile pour moi, faire rebondir les autres cercles ensemble.
Bref alors tout commentaire est le bien venu et merci encore
Le programme :
# -*- coding: Latin-1 -*-
from Tkinter import * from math import * # définition des gestionnaires # d'événements :
def pointeur(event): # fonction qui permet au joueur de se sauver
chaine.configure(text = "Clic détecté en X =" + str(event.x) + ", Y =" + str(event.y)) can1.coords(joueur,event.x-30,event.y-30,event.x+30,event.y+30)
def ennemi_rouge(): "déplacement de la balle rouge" global a1, b1, da, db, flag, coul, v1, c11 a1, b1 = a1 +da, b1 + db if a1 >770: # si l'ennemi touche le mur en bas, il "rebondit" a1, da = 770, -5-v1 c11 = c11 + 1 if b1 >670: b1, db = 670, -5-v1 c11 = c11 + 1 if a1 <33: a1, da = 33, 5+v1 c11 = c11 + 1 if b1 <33: b1, db = 33, 5+v1 c11 = c11 + 1 can1.coords(oval1,a1-30,b1-30,a1+30,b1+30) if c11 >= 5 : # dès que c est egal à 40, les ennemis se déplacent plus vite v1 = 2 # leur vitesse augmente de 2 pas if c11 >= 60: v1 = 4 if c11 >= 90: v1 = 16 if flag >0: fen1.after(50,ennemi_rouge) # boucler après 50 millisecondes
def ennemi_bleu(): "déplacement de la balle bleue" global x1, y1, dx, dy, flag, coul, c2, v2 x1, y1 = x1 +dx, y1 + dy if x1 >770-v2: x1, dx = 770-v2, -6 c2 = c2 + 1 if y1 >670-v2: y1, dy = 670-v2, -6 c2 = c2 + 1 if x1 <33+v2: x1, dx = 33+v2, 6 c2 = c2 + 1 if y1 <33+v2: y1, dy = 33+v2, 6 c2 = c2 + 1 can1.coords(oval2,x1-30-v2,y1-30-v2,x1+30+v2,y1+30+v2) if c2 >= 5 : # dès que c est egal à 40, l'ennemi bleu grandit v2 = 10 # sa grandeur augmente de 2 if c2 >= 60: v2 = 20 if c2 >= 90: v2 = 40 if flag >0: fen1.after(50,ennemi_bleu) # boucler après 50 millisecondes
# -APPRECIATION- #
if c2 == 0 : score.configure(text="niveau débutant" ) if c2 == 1 : score.configure(text="niveau -FACILE- atteint" ) if c2 == 10 : score.configure(text="niveau -MOYEN- atteint" ) if c2 == 15 : score.configure(text="niveau -DIFFICILE- atteint" ) if c2 == 20 : score.configure(text="niveau -TRES DIFFICILE- atteint" ) if c2 == 25 : score.configure(text="niveau -SURDOUE- atteint" ) if c2 == 30 : score.configure(text="niveau -ALIEN- atteint" ) if c2 == 35 : score.configure(text="niveau -DIEU- atteint" ) if c2 == 40 : score.configure(text="VOUS ÊTES UN DIEU !!!!" ) if c2 == 45 : score.configure(text="Bon ca suffit maintenant c'est qu'un jeu !" ) if c2 == 50: score.configure(text="Arrête bordel !!!" )
def ennemi_orange(): "déplacement de la balle orange" global c1, d1, dc, dd, flag, coul, v3, c3 c1, d1 = c1 +dc, d1 + dd if c1 >750: c1, dc = 750, -2-v3 c3 = c3 + 1 if d1 >650: d1, dd = 650, -2-v3 c3 = c3 + 1 if c1 <53: c1, dc = 53, 2+v3 c3 = c3 + 1 if d1 <53: d1, dd = 53, 2+v3 c3 = c3 + 1 can1.coords(oval3,c1-50,d1-50,c1+50,d1+50) if c3 >= 5 : # dès que c est egal à 40, les ennemis se déplacent plus vite v3 = 2 # leur vitesse augmente de 2 pas if c3 >= 60: v3 = 3 if c3 >= 90: v3 = 4 if flag >0: fen1.after(50,ennemi_orange) # boucler après 50 millisecondes
def ennemi_vert(): "déplacement de la balle verte" global e1, f1, de, df, flag, coul, v4, c4 e1, f1 = e1 +de, f1 + df if e1 >770: e1, de = 770, -3-v4 c4 = c4 + 1 if f1 >670: f1, df = 670, -3-v4 c4 = c4 + 1 if e1 <33: e1, de = 33, 3+v4 c4 = c4 + 1 if f1 <33: f1, df = 33, 3+v4 c4 = c4 + 1 can1.coords(oval4,e1-30,f1-30,e1+30,f1+30) if c4 >= 5 : # dès que c est egal à 40, les ennemis se déplacent plus vite v4 = 2 # leur vitesse augmente de 2 pas if c4 >= 60: v4 = 4 if c4 >= 90: v4 = 8 if flag >0: fen1.after(50,ennemi_vert) # boucler après 50 millisecondes
def stop_it(): # stoppe le déplacement des ennemis "arret de l'animation" global flag flag =0
def start_it(): # démarre le déplacement des ennemis "démarrage de l'animation" global flag if flag ==0: # pour éviter que le bouton ne puisse lancer plusieurs boucles flag =1 ennemi_rouge() ennemi_bleu() ennemi_orange() ennemi_vert()
#========== Programme principal =============
# les variables suivantes seront utilisées de manière globale : a1, b1 = 32, 671 # coordonnées initiales x1, y1 = 32, 32 c1, d1 = 750, 650 e1, f1 = 771, 32 jx1, jy1 = 400, 350 # coordonnées initiales du joueur da, db = 5, 5 # 'pas' du déplacement dx, dy = 6, 6 dc, dd = 2, 2 de, df = 3, 3 v2, c2 = 0, 0 v1, c11 = 0, 0 v3, c3 = 0, 0 v4, c4 = 0, 0 u = "niveau débutant" flag = 0 # commutateur pts=0 # addition des points
Marsh Posté le 18-05-2009 à 19:28:05
samuel310
Bonjour a tous,
Je suis nouveau sur ce forum et débutant avec python.
Je dois créer un petit jeu avec language python pour l'école, programme noté bien sur.
Je pensait faire un jeu 2D avec des cercle qui se déplacent dans un caneva, le joueur devra réussir à les éviter en bougeant lui-même son cercle.
Voilà a quoi j'arrive maintenant, il est loin d'être parfait.
J'ai quelque problèmes notamment pour réussir à bloquer le jeu si le cercle du joueur se fait toucher, créer une sorte de compteur pour afficher combien de temps le joueur aura tenu jusqu'à la fin et aussi, mais ca devient très difficile pour moi, faire rebondir les autres cercles ensemble.
Bref alors tout commentaire est le bien venu et merci encore
Le programme :
# -*- coding: Latin-1 -*-
from Tkinter import *
from math import *
# définition des gestionnaires
# d'événements :
def pointeur(event): # fonction qui permet au joueur de se sauver
chaine.configure(text = "Clic détecté en X =" + str(event.x) +
", Y =" + str(event.y))
can1.coords(joueur,event.x-30,event.y-30,event.x+30,event.y+30)
def collision (x1,x2,y1,y2):
r1=30
r2=50
d=sqrt((x2-x1)**2+(y2-y1)**2)
def ennemi_rouge():
"déplacement de la balle rouge"
global a1, b1, da, db, flag, coul, v1, c11
a1, b1 = a1 +da, b1 + db
if a1 >770: # si l'ennemi touche le mur en bas, il "rebondit"
a1, da = 770, -5-v1
c11 = c11 + 1
if b1 >670:
b1, db = 670, -5-v1
c11 = c11 + 1
if a1 <33:
a1, da = 33, 5+v1
c11 = c11 + 1
if b1 <33:
b1, db = 33, 5+v1
c11 = c11 + 1
can1.coords(oval1,a1-30,b1-30,a1+30,b1+30)
if c11 >= 5 : # dès que c est egal à 40, les ennemis se déplacent plus vite
v1 = 2 # leur vitesse augmente de 2 pas
if c11 >= 60:
v1 = 4
if c11 >= 90:
v1 = 16
if flag >0:
fen1.after(50,ennemi_rouge) # boucler après 50 millisecondes
def ennemi_bleu():
"déplacement de la balle bleue"
global x1, y1, dx, dy, flag, coul, c2, v2
x1, y1 = x1 +dx, y1 + dy
if x1 >770-v2:
x1, dx = 770-v2, -6
c2 = c2 + 1
if y1 >670-v2:
y1, dy = 670-v2, -6
c2 = c2 + 1
if x1 <33+v2:
x1, dx = 33+v2, 6
c2 = c2 + 1
if y1 <33+v2:
y1, dy = 33+v2, 6
c2 = c2 + 1
can1.coords(oval2,x1-30-v2,y1-30-v2,x1+30+v2,y1+30+v2)
if c2 >= 5 : # dès que c est egal à 40, l'ennemi bleu grandit
v2 = 10 # sa grandeur augmente de 2
if c2 >= 60:
v2 = 20
if c2 >= 90:
v2 = 40
if flag >0:
fen1.after(50,ennemi_bleu) # boucler après 50 millisecondes
# -APPRECIATION- #
if c2 == 0 :
score.configure(text="niveau débutant" )
if c2 == 1 :
score.configure(text="niveau -FACILE- atteint" )
if c2 == 10 :
score.configure(text="niveau -MOYEN- atteint" )
if c2 == 15 :
score.configure(text="niveau -DIFFICILE- atteint" )
if c2 == 20 :
score.configure(text="niveau -TRES DIFFICILE- atteint" )
if c2 == 25 :
score.configure(text="niveau -SURDOUE- atteint" )
if c2 == 30 :
score.configure(text="niveau -ALIEN- atteint" )
if c2 == 35 :
score.configure(text="niveau -DIEU- atteint" )
if c2 == 40 :
score.configure(text="VOUS ÊTES UN DIEU !!!!" )
if c2 == 45 :
score.configure(text="Bon ca suffit maintenant c'est qu'un jeu !" )
if c2 == 50:
score.configure(text="Arrête bordel !!!" )
def ennemi_orange():
"déplacement de la balle orange"
global c1, d1, dc, dd, flag, coul, v3, c3
c1, d1 = c1 +dc, d1 + dd
if c1 >750:
c1, dc = 750, -2-v3
c3 = c3 + 1
if d1 >650:
d1, dd = 650, -2-v3
c3 = c3 + 1
if c1 <53:
c1, dc = 53, 2+v3
c3 = c3 + 1
if d1 <53:
d1, dd = 53, 2+v3
c3 = c3 + 1
can1.coords(oval3,c1-50,d1-50,c1+50,d1+50)
if c3 >= 5 : # dès que c est egal à 40, les ennemis se déplacent plus vite
v3 = 2 # leur vitesse augmente de 2 pas
if c3 >= 60:
v3 = 3
if c3 >= 90:
v3 = 4
if flag >0:
fen1.after(50,ennemi_orange) # boucler après 50 millisecondes
def ennemi_vert():
"déplacement de la balle verte"
global e1, f1, de, df, flag, coul, v4, c4
e1, f1 = e1 +de, f1 + df
if e1 >770:
e1, de = 770, -3-v4
c4 = c4 + 1
if f1 >670:
f1, df = 670, -3-v4
c4 = c4 + 1
if e1 <33:
e1, de = 33, 3+v4
c4 = c4 + 1
if f1 <33:
f1, df = 33, 3+v4
c4 = c4 + 1
can1.coords(oval4,e1-30,f1-30,e1+30,f1+30)
if c4 >= 5 : # dès que c est egal à 40, les ennemis se déplacent plus vite
v4 = 2 # leur vitesse augmente de 2 pas
if c4 >= 60:
v4 = 4
if c4 >= 90:
v4 = 8
if flag >0:
fen1.after(50,ennemi_vert) # boucler après 50 millisecondes
def stop_it(): # stoppe le déplacement des ennemis
"arret de l'animation"
global flag
flag =0
def start_it(): # démarre le déplacement des ennemis
"démarrage de l'animation"
global flag
if flag ==0: # pour éviter que le bouton ne puisse lancer plusieurs boucles
flag =1
ennemi_rouge()
ennemi_bleu()
ennemi_orange()
ennemi_vert()
#========== Programme principal =============
# les variables suivantes seront utilisées de manière globale :
a1, b1 = 32, 671 # coordonnées initiales
x1, y1 = 32, 32
c1, d1 = 750, 650
e1, f1 = 771, 32
jx1, jy1 = 400, 350 # coordonnées initiales du joueur
da, db = 5, 5 # 'pas' du déplacement
dx, dy = 6, 6
dc, dd = 2, 2
de, df = 3, 3
v2, c2 = 0, 0
v1, c11 = 0, 0
v3, c3 = 0, 0
v4, c4 = 0, 0
u = "niveau débutant"
flag = 0 # commutateur
pts=0 # addition des points
# Création du widget principal ("parent" ) :
fen1 = Tk()
fen1.title("Exercice d'animation avec Tkinter" )
# création des widgets "enfants" :
can1 = Canvas(fen1,height=700, width=800)
can1.pack(side=LEFT, padx =5, pady =5)
joueur =can1.create_oval (jx1-30, jy1-30, jx1+30, jy1+30, fill='black')
oval1 =can1.create_oval(a1-30, b1-30, a1+30, b1+30, width=2, fill='red')
oval2 =can1.create_oval(x1-30, y1-30, x1+30, y1+30, width=2, fill='blue')
oval3 =can1.create_oval(c1-50, d1-50, c1+50, d1+50, width=2, fill='orange')
oval4 =can1.create_oval(e1-30, f1-30, e1+30, f1+30, width=2, fill='green')
can1.bind("<Button-1>", pointeur)
can1.pack(side=LEFT)
score=Label(fen1, font=('Fixedsys','20'))
score.pack()
bou2 = Button(fen1, text='Démarrer', width =8, command=start_it)
bou2.pack()
can1.bind("<Button-1>", pointeur)
can1.pack()
bou3 = Button(fen1, text='Arrêter', width =8, command=stop_it)
bou3.pack()
chaine = Label(fen1)
chaine.pack()
fen1.mainloop()