begin process at 2010 09 04 13:24:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Python

 > 

Divers

 > 

Aide et documentation

 > 

programme a améliorer


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

programme a améliorer

samedi 16 mai 2009 à 18:51:22 | programme a améliorer

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()



samedi 27 juin 2009 à 08:10:04 | Re : programme a améliorer

Julien39

Membre Club
Tu pourrais utiliser des vecteurs ou des matrices ce qui optimiserait un peu tout ca. Mais surtout et c'est encore plus vrai si ton programme est fait pour une école, commente, commente tout, rien n'est évident. J'ai fais un tuto à ce sujet, tu peux y jetter un oeil.


Cette discussion est classée dans : text, c2, y1, if, can1


Répondre à ce message

Sujets en rapport avec ce message

script qui ne marche pas (gros débutant) [ par kers50 ] bonjour tout le monde,je prévient je suis vraiment un débutant j'ai commencer y a quelque jour à apprendre à programmer avec python en tant qu'amateur PYTHON TKINTER utilisation de labels [ par bichon3001 ] Bonjour, Je souhaite utiliser l'interface graphique TKinter de Python pour appeler une fonction avec un bouton, et afficher le résultat dans un label. Python 2.6 avec Tkinter 8.6 [ par zarash ] Bonjour, Voici mon probleme : Je souhaite utiliser une option du widget text de Tkinter qui n'existe que dans la version 8.6.Il s'agit de la rotation Caractère de coupure + formfeed [ par bowbz ] Bonjour, J'essaie de créer de multiples fichiers à partir d'un gros fichier. Dans ce gros fichier, il y a un séparateur que j'aimerai utiliser comme [php][sql]recherche multiple dans une base de donnée sql [ par jeff83fr ] Bonjour, j'ai un problème de récupération a ma base de donné, je m explique je souhaiterai faire un annuaire je souhaiterai donc faire une page un p programme avec Tkinter [ par bouffffi ] Bonjour à tous, Je suis débutant et j'ai fait un programme pour calculer la probabilité d'un nombre, puis j'ai voulu le faire avec une interface grap Demande d'aide à l'optimisation [ par elnabo ] Bonjour, ayant réaliser un petit code permettant de déplacer un petit rond d'avant en arrière et lui permettant des rotations, à l'aide du clavier en changement des propriétés d'un objet [ par nikko76600 ] Bonjour a tous et a toutes, Je suis débutant dans la programmation en python (j'ai commencé il y a 3 jours) et je pose ma première question ici (qui split [ par bulle0789 ] bonjour, je débute en python, donc je n'ai pour l'instant encore que des bases. Je sais que pour supprimer un signe de ponctuation d'un texte il faut Mon premier programme ne marche pas mais ne plante pas non plus [ par ericstoclet ] Bonjour a tous, Je ne trouve pas l'erreur qui fait que mon programme ne fonctionne pas (liste4 et liste5 restent vides) : [code=py]# -*- coding:Utf-


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

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 : 0,437 sec (3)

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