Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1437 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Ai-je bien compris le principe de la POO ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ai-je bien compris le principe de la POO ?

n°519942
Evolvox
Toujours y croire, toujours...
Posté le 21-09-2003 à 19:26:22  profilanswer
 

Voilà, je me suis mis au Python depuis un petit moment et j'ai essayé de recréer le jeu Pong. Sur le fond, est-ce que mon code ci-dessous va dans le sens de la programmation orientée objet ? (le jeu en lui-même buggote encore beaucoup, mais ce n'est pas vraiment le fond du problème...)
 

Code :
  1. class Ping:
  2.     def __init__(self, largeur=800, hauteur=600, vitesse=8):
  3.         # initialisation des variables
  4.         self.l, self.h, self.v, self.vy = largeur, hauteur, -vitesse, vitesse
  5.         self.score1, self.score2 = 0, 0
  6.         # creation de la fenetre et appel des composants graphiques
  7.         self.root = Tk()
  8.         self.root.title('Evoping 2003')
  9.         self.objetsGraphiques()
  10.         # gestion des evenements
  11.         self.root.bind('w', self.joueur1Haut)
  12.         self.root.bind('s', self.joueur1Bas)
  13.      
  14.         self.root.mainloop()
  15.         self.root.destroy()
  16.     def objetsGraphiques(self):
  17.         # creation de l'aire de jeu
  18.         self.can = Canvas(self.root, width=self.l, height=self.h, bg='black')
  19.         self.can.pack()
  20.         # dimensions des objets en fonction de la taille de l'aire de jeu
  21.         self.x, self.y, self.j1y, self.j1l, self.j2y, self.j2l = (self.l/2), (self.h/2), 200, (self.h/5), 200, (self.h/5)
  22.         self.largj1, self.largj2 = (30,40), (self.l-30,self.l-40)
  23.         # creation de la balle et des raquettes
  24.         self.balle = self.can.create_oval(self.x-5, self.y-5, self.x+5, self.y+5, fill='red')     
  25.         self.joueur1 = self.can.create_rectangle(self.largj1[0], self.j1y, self.largj1[1], self.j1y+self.j1l, fill='blue')
  26.         self.joueur2 = self.can.create_rectangle(self.largj2[0], self.j2y, self.largj2[1], self.j2y+self.j2l, fill='yellow')
  27.         # affichage des boutons et du texte
  28.         Button(self.root, text='Jouer', command=self.departBalle).pack(side=LEFT)
  29.         Button(self.root, text='Pause', command=self.arretBalle).pack(side=LEFT)
  30.         Button(self.root, text='Quitter', command=self.root.quit).pack(side=LEFT)
  31.         self.scoreordi = Label(self.root, text=self.score2)
  32.         self.scoreordi.pack(side=RIGHT)
  33.         Label(self.root, text='Ordinateur = ').pack(side=RIGHT)
  34.         self.scorehumain = Label(self.root, text=0)
  35.         self.scorehumain.pack(side=RIGHT)
  36.         Label(self.root, text='Humain = ').pack(side=RIGHT)
  37.         Label(self.root, text='Scores:').pack(side=RIGHT)
  38.      
  39.        
  40.     def joueur1Haut(self,event):
  41.         # detection du bord puis deplacement vers le haut
  42.         if self.j1y <= 0:
  43.             self.j1y = 0
  44.         else:
  45.             self.j1y = self.j1y - 10
  46.             self.can.coords(self.joueur1, self.largj1[0], self.j1y+5, self.largj1[1], self.j1y+self.j1l)
  47.     def joueur1Bas(self, event):
  48.         # detection du bord puis deplacement vers le bas
  49.         if self.j1y >= (self.h - self.j1l):
  50.             self.j1y = (self.h - self.j1l)
  51.         else:
  52.             self.j1y = self.j1y + 10
  53.             self.can.coords(self.joueur1, self.largj1[0], self.j1y+5, self.largj1[1], self.j1y+self.j1l)
  54.     def departBalle(self):
  55.         # depart de la balle
  56.         self.boucle = 0
  57.         self.replace = 0
  58.         self.boucle = self.boucle + 1
  59.         if self.boucle == 1:
  60.             self.deplacementBalle()
  61.            
  62.     def arretBalle(self):
  63.         # arret des boucles (pause ou remise en jeu)
  64.         self.boucle = 0
  65.         self.replace = 1
  66.         return
  67.        
  68.                
  69.     def deplacementBalle(self):
  70.         # detection d'une collision avec les raquettes
  71.         if (self.x <= self.largj1[0]+10) and (self.y >= self.j1y and self.y <= self.j1y+self.j1l):
  72.             self.v = -self.v
  73.         if (self.x >= self.largj2[1]) and (self.y >= self.j2y and self.y <= self.j2y+self.j2l):
  74.             self.v = -self.v
  75.         self.x = self.x + self.v
  76.         # affectation des points si la balle touche un bord et rupture de la boucle
  77.         if self.x < 15:
  78.             self.scoreordi.configure(text=self.score2+1)
  79.             self.arretBalle()
  80.         if self.x > (self.l - 15):
  81.             self.scorehumain.configure(text=self.score1+1)
  82.             self.arretBalle()
  83.          
  84.         # rebond
  85.         if self.y > (self.h - 15) or self.y < 15:
  86.             self.vy = -self.vy
  87.         # deplacement vertical et horizontal
  88.         self.x, self.y = self.x + self.v, self.y + self.vy
  89.         # affectation de la position de la balle a la position de l'ordinateur
  90.         self.j2y = self.y
  91.         # deplacement de l'ordinateur
  92.         self.ordinateur()       
  93.         # deplacement de la balle           
  94.         self.can.coords(self.balle, self.x-5, self.y-5, self.x+5, self.y+5)
  95.         # controle si la balle doit etre replacee au centre
  96.         if self.replace == 1:
  97.             self.x, self.y = (self.l/2), (self.h/2)
  98.             self.can.coords(self.balle,self.x-5, self.y-5, self.x+5, self.y+5)   
  99.         # boucle
  100.         if self.boucle > 0:
  101.             self.root.after(15, self.deplacementBalle)
  102.     def ordinateur(self):
  103.         # detection du bord
  104.         if self.j2y <= self.j2l/2:
  105.             self.j2y = self.j2l/2
  106.         if self.j2y >= (self.h - (self.j2l/2)):
  107.             self.j2y = (self.h - (self.j2l/2))
  108.         #deplacement de l'ordinateur
  109.         self.can.coords(self.joueur2, self.largj2[0], self.j2y-(self.j2l/2), self.largj2[1], self.j2y-(self.j2l/2)+self.j2l)
  110.         return
  111. # lancement de l'application               
  112. from Tkinter import *
  113. jouer = Ping(800,600,8)


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
mood
Publicité
Posté le 21-09-2003 à 19:26:22  profilanswer
 

n°519943
Taz
bisounours-codeur
Posté le 21-09-2003 à 19:31:55  profilanswer
 

ben c'est un design comme un autre, ici, t'as tout dans un objet et tout se lance, bref, moi j'aurais fait un objet Ping qui prends en paramètre ou afficher (le canvas, ou la mw), ou peut héritage d'un canvas, pour avoir un usage tel que
 
root = tkinter.Tk()
ping = Ping(root)
ping.play()
 
par exemple. parce que là, t'as tout mis dans ton objet

n°520548
Evolvox
Toujours y croire, toujours...
Posté le 22-09-2003 à 18:49:22  profilanswer
 

Oki merci, j'en prends note  :jap:  
 
C'était juste pour savoir si j'étais pas trop à côté de la plaque...


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Ai-je bien compris le principe de la POO ?

 

Sujets relatifs
cherche personne savan utiliser tre bien le htmlLes logiciels gratuits pour bien programmer
Pour les pros de la POO: L'utilité de l'Interface ?Livres Oreilly, ils sont bien ? Et leur Precis&Concis ?
[PHP] Je cherche 2 scripts ou bien 2 aides (Gestion fichiers/images)[ XForm ] j'ai pas tout compris
Le w3c, c bien que pour mettre un logo w3c compliant sur un site![JAVA XML] Une JSP bien formée
[C# POO] Surcharge et definitionchanger un entier en double ? ou bien mon algo est mauvais ...help
Plus de sujets relatifs à : Ai-je bien compris le principe de la POO ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR