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é: 2 588 / 123

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



Fichier Zip

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

Historique

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

Commentaires et avis

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

Discussions en rapport avec ce code source dans le forum

Qu'est ce que le python permet de réaliser!! [ par Mansuz ] Mansuz Salut! J'aurais aimé savoir ce qui peut être réalisé en Python. Par exemple Flash  c'est les petites anims, des jeux funs. Le C pour fair des a affichage des images sur python [ par amina22 ] salut,je sais qu'on peut afficher les images .gif avec python mais je veux savoir si on peut afficher les images(jpeg,jpg,..)  et les vidéos si oui et charger un fichier avec python [ par amina22 ] salut,je suis débutante en python et je dois créer une interface  qui permet de télécharger un fichier quelconque et de l affichermes taches sont :1.c python [ par tattou_j ] Bonjour,Je suis entrain de travailler sur mon pfe, est ce que quelqu'un peut m'aider et m'envoyer des codes en python sur eclipse concernant l'envoi d Gestion de sessions en python [ par Cab2lhak ] Bonjour,Je dois réaliser un module de gestion de sessions en python pour un Framework. Mais je métrise pas bien le langage Python, pouvez vous m'aider existe -t-il un équivalent de la fonction "call" sous Python? [ par Veust ] Bonjour, je suis en train d'ecrire un code sous python qui d'une part doit rentrer des donner dans une liste(jusque là facile) et d'autre part créer u Python er Threads [ par dirthangel ] Salut a tous je suis programmeur perl, j'aimerais savoir si les threads en python sont stable ? car c'est un vraie problème en Perl merci !!! Note logiciel Python [ par Panthouffle ] Salut, je cherche un site Internet qui donne un avis des utilisateurs sur le logiciel Python, une note de la part des utilisateurs pour un travail en Script Python pour html [ par aera group ] Bonjour, je uis actuelement au chapitre 17 du tutoriel de Gérard Swinnen : Apprendre à programmer avec Python (téléchargable sur http://www.cifen.ulg.


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,593 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.