begin process at 2008 07 05 20:32:08
1 205 340 membres
309 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PONG : DÉVELOPPEMENT


Information sur la source

Catégorie :Jeux Classé sous : jeux, pong, python, developpement Niveau : Débutant Date de création : 06/07/2007 Date de mise à jour : 11/07/2007 09:28:53 Vu / téléchargé: 1 954 / 102

Note :
Aucune note

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

L'idée est de faire un pong assez basique, avec une interface GUI sommaire.

Le développement pourra ensuite porter sur l'amélioration du jeux :
- choix des options (difficultés, niveau de l'IA...)
- possibilité de jouer à 2 joueurs sur le meme PC ou en réseau
- sauvegarde des meilleurs scores
- améliorations graphiques
...

Source

  • #!/usr/bin/python
  • # -*- coding: UTF-8 -*-
  • from Tkinter import *
  • from random import randint
  • class Fenetre(Tk):
  • def __init__(self, width=600, height=400):
  • Tk.__init__(self)
  • self.flag = 0
  • self.quit= Button(self,text="Quit Game",command=self.destroy)
  • self.quit.grid(column=4,row=0,sticky="NE")
  • self.new= Button(self,text="New Game",command=self.new_game)
  • self.new.grid(column=0,row=0,sticky="NW")
  • self.can = Canvas(self,width=width,height=height,bg="black")
  • self.can.grid(column=0,row=1,sticky="SW",columnspan=5)
  • def new_game(self):
  • if self.flag == 0 :
  • self.flag=1
  • self.pads = Pad(self.can,self.flag)
  • self.ball = Ball(self.can,self.pads,self.flag)
  • class Pad:
  • def __init__(self,canvas,flag):
  • self.canvas = canvas
  • self.flag = flag
  • self.height = canvas.winfo_height()
  • self.width = canvas.winfo_width()
  • self.x1,self.y1 = 10,self.height/2-30
  • self.x2,self.y2 = self.width-25,self.height/2-30
  • self.Pad1 = canvas.create_rectangle(self.x1,self.y1,self.x1+15,self.y1+60,fill="white")
  • self.Pad2 = canvas.create_rectangle(self.x2,self.y2,self.x2+15,self.y2+60,fill="white")
  • canvas.bind_all("<Up>",self.mouv_up)
  • canvas.bind_all("<Down>", self.mouv_down)
  • self.dy2 = 25
  • self.ia()
  • def mouv_up(self,event):
  • if self.y1>5 :
  • self.y1=self.y1-10
  • self.canvas.coords(self.Pad1,self.x1,self.y1,self.x1+15,self.y1+60)
  • def mouv_down(self,event):
  • if self.y1+60<(self.height-5):
  • self.y1=self.y1+10
  • self.canvas.coords(self.Pad1,self.x1,self.y1,self.x1+15,self.y1+60)
  • def ia (self):
  • self.y2=self.y2 + self.dy2
  • if self.y2+60 > self.height-10 :
  • self.dy2=-50
  • if self.y2 < 5 :
  • self.dy2=50
  • self.canvas.coords(self.Pad2,self.x2,self.y2,self.x2+15,self.y2+60)
  • if self.flag > 0:
  • self.canvas.after(70,self.ia)
  • class Ball:
  • def __init__(self,canvas,pad,flag):
  • self.canvas = canvas
  • self.pad = pad
  • self.height = canvas.winfo_height()
  • self.width = canvas.winfo_width()
  • self.flag = flag
  • self.x1,self.y1 = self.width/2,self.height/2
  • self.dx,self.dy = 30,30
  • self.Ball = canvas.create_oval(self.x1, self.y1, self.x1+25, self.y1+25, width=2, fill='white')
  • self.pointA, self.pointB = 0,0
  • self.ready()
  • def ready(self):
  • self.starter=0
  • self.score= Label(app,text="%d : %d" % (self.pointA,self.pointB), bg="black",fg="white")
  • self.score.grid(column =2,row=0,sticky="S")
  • self.x1,self.y1 = self.height/2,self.width/2
  • app.titre = Label(app,text="PRESS ANY KEY TO START", bg="black",fg="white")
  • app.titre.grid(column =2,row=2,sticky="S")
  • self.canvas.bind_all("<Key>",self.start)
  • def start(self,event):
  • self.starter=1
  • self.move()
  • def move(self):
  • if self.starter==1:
  • self.x1, self.y1 = self.x1 +self.dx, self.y1 + self.dy
  • if self.y1 >self.height-26:
  • self.dx, self.dy = self.dx, -20
  • if self.y1 <2:
  • self.dx, self.dy = self.dx, 20
  • if self.x1 < self.pad.x1+20:
  • if self.pad.y1 < self.y1 < self.pad.y1+60:
  • self.dx, self.dy = 20, self.dy
  • if self.x1+30 > self.pad.x2-1:
  • if self.pad.y2<self.y1+12.5<self.pad.y2+60:
  • self.dx, self.dy = -20, self.dy
  • if self.x1 < 0:
  • self.starter = 0
  • self.pointB = self.pointB+1
  • self.ready()
  • if self.x1+25 > self.width:
  • self.starter=0
  • self.pointA = self.pointA+1
  • self.ready()
  • self.canvas.coords(self.Ball,self.x1,self.y1,self.x1+30,self.y1+30)
  • if self.flag > 0:
  • self.canvas.after(70,self.move)
  • if __name__ == "__main__":
  • app = Fenetre()
  • app.mainloop()
#!/usr/bin/python
# -*- coding: UTF-8 -*-

from Tkinter import *
from random import randint

class Fenetre(Tk):
    def __init__(self, width=600, height=400):
        Tk.__init__(self)
        self.flag = 0
        
        self.quit= Button(self,text="Quit Game",command=self.destroy)
        self.quit.grid(column=4,row=0,sticky="NE")

        self.new= Button(self,text="New Game",command=self.new_game)
        self.new.grid(column=0,row=0,sticky="NW")

  
        self.can = Canvas(self,width=width,height=height,bg="black")
        self.can.grid(column=0,row=1,sticky="SW",columnspan=5)
             
    def new_game(self):
        if self.flag == 0 :
            self.flag=1
            self.pads = Pad(self.can,self.flag)
            self.ball = Ball(self.can,self.pads,self.flag)

class Pad:
    def __init__(self,canvas,flag):
        self.canvas = canvas
        self.flag = flag
        self.height = canvas.winfo_height()
        self.width = canvas.winfo_width()
        self.x1,self.y1 = 10,self.height/2-30
        self.x2,self.y2 = self.width-25,self.height/2-30
                
        self.Pad1 = canvas.create_rectangle(self.x1,self.y1,self.x1+15,self.y1+60,fill="white")
        self.Pad2 = canvas.create_rectangle(self.x2,self.y2,self.x2+15,self.y2+60,fill="white")

        canvas.bind_all("<Up>",self.mouv_up)
        canvas.bind_all("<Down>", self.mouv_down)
        self.dy2 = 25
        self.ia()

    def mouv_up(self,event):
        if self.y1>5 :
            self.y1=self.y1-10
            self.canvas.coords(self.Pad1,self.x1,self.y1,self.x1+15,self.y1+60)
            
    def mouv_down(self,event):
        if self.y1+60<(self.height-5):
            self.y1=self.y1+10
            self.canvas.coords(self.Pad1,self.x1,self.y1,self.x1+15,self.y1+60)

    def ia (self):
        self.y2=self.y2 + self.dy2
        if self.y2+60 > self.height-10 :
            self.dy2=-50
            
        if self.y2 < 5 :
            self.dy2=50
            
        self.canvas.coords(self.Pad2,self.x2,self.y2,self.x2+15,self.y2+60)
        if self.flag > 0:
            self.canvas.after(70,self.ia)


class Ball:
    def __init__(self,canvas,pad,flag):
        self.canvas = canvas
        self.pad = pad
        self.height = canvas.winfo_height()
        self.width = canvas.winfo_width()
        self.flag = flag
        self.x1,self.y1 = self.width/2,self.height/2
        self.dx,self.dy = 30,30
        self.Ball = canvas.create_oval(self.x1, self.y1, self.x1+25, self.y1+25, width=2, fill='white')
        self.pointA, self.pointB = 0,0
        
        self.ready()
    
    def ready(self):
        self.starter=0
        self.score= Label(app,text="%d : %d" % (self.pointA,self.pointB), bg="black",fg="white")
        self.score.grid(column =2,row=0,sticky="S")
        self.x1,self.y1 = self.height/2,self.width/2
        app.titre = Label(app,text="PRESS ANY KEY TO START", bg="black",fg="white")
        app.titre.grid(column =2,row=2,sticky="S")
        self.canvas.bind_all("<Key>",self.start)
       

    def start(self,event):
        self.starter=1
        self.move()  
        
    def move(self):
        if self.starter==1:
            self.x1, self.y1 = self.x1 +self.dx, self.y1 + self.dy
                 
            if self.y1 >self.height-26:
                self.dx, self.dy = self.dx, -20

            if self.y1 <2:
                self.dx, self.dy = self.dx, 20
       
            if self.x1 < self.pad.x1+20:
                if self.pad.y1 < self.y1 < self.pad.y1+60:
                    self.dx, self.dy = 20, self.dy

            if self.x1+30 >  self.pad.x2-1:
                if self.pad.y2<self.y1+12.5<self.pad.y2+60:
                     self.dx, self.dy = -20, self.dy

            if self.x1 < 0:
                self.starter = 0
                self.pointB = self.pointB+1
                self.ready()
            
        
            if self.x1+25 > self.width:
                self.starter=0
                self.pointA = self.pointA+1
                self.ready()

            self.canvas.coords(self.Ball,self.x1,self.y1,self.x1+30,self.y1+30)
            if self.flag > 0:
                self.canvas.after(70,self.move)

        


if __name__ == "__main__":
    app = Fenetre()
    app.mainloop()



Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

06 juillet 2007 15:35:18 :
v0.1
10 juillet 2007 14:45:54 :
v0.2
10 juillet 2007 17:42:40 :
v0.3
10 juillet 2007 17:43:23 :
v0.4
11 juillet 2007 09:28:53 :
v0.4
  • signaler à un administrateur
    Commentaire de aowhelios le 06/07/2007 14:31:02

    Si des personnes sont intéressés par le développement conjoint de ce Pong, il est peut être plus simple de communiquer par mail, et de publier le résultat ici, une fois le développement finalisé.
    mon mail : aowhelios@hotmail.com

  • signaler à un administrateur
    Commentaire de Epsilon012 le 12/07/2007 18:34:22

    Il y a un grand effort pour ce que tu appelle IA, car en fait s'en est pas un je vois pas l'inteligence dans une variable qui augmente et qui diminue periodiquement ...

  • signaler à un administrateur
    Commentaire de aowhelios le 18/07/2007 14:30:20

    ahaha...C'est tout à fait provisoire, je ne me suis pas encore penché sur la question de l'IA, mais il fallait bien que le PAD de l'ordi fasse quelque chose en attendant qu'il devienne intelligent !

  • signaler à un administrateur
    Commentaire de aera group le 30/07/2007 11:39:41

    Bon, je crois que je vais essayer de m'intéresser à ce projet ! Pour l'intant, je ne propose pas de solutions, ni de codes, (je part en vacance jusque fin aout donc ....) mais je pense qu'il faudrait étudier quelques pistes de travail en priorité.

    1/ Pour commencer, l'interface doit absolument évolué, il n'y a pas de détection de colision entre la boule et le pad (Je ne parle pas des graphismes, ça on véra à la fin ...) !!! cf http://www.pythonfrance.com/codes/COLLISIONS-CASCADES-PLUS-CENTAINE-BOULES-ENTRECHOQUENT_34844.aspx

    2/ Laissons tomber l'AI pour le moment, il faut absolument amélioré la jouabilité. En effet, il y a un problème de détection des événements. En effect la méthode "bind" ne fonctionne pas bien : lorsque l'on reste appuyer sur la touche "monter", le pad démare doucement puis accélère (logique, faite un essayer sous Word ou autre : apuyer en continu sur la touche "a" et vous vérez les "a" s'ajouter de plus en plus vite).

    3/ Pourquoi s'obstiner à vouloir parler anglais ;)

  • signaler à un administrateur
    Commentaire de aera group le 30/07/2007 11:59:17

    Utilisation de PyGame (?) : ftp://ftp-developpez.com/guigui/sources/OhMummy/OhMummy.pdf

  • signaler à un administrateur
    Commentaire de aera group le 31/10/2007 14:29:03

    Le code est mort ?

Ajouter un commentaire

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS