Ai-je bien compris le principe de la POO ?

Ai-je bien compris le principe de la POO ? - Python - Programmation

Marsh Posté le 21-09-2003 à 19:26:22    

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
Reply

Marsh Posté le 21-09-2003 à 19:26:22   

Reply

Marsh Posté le 21-09-2003 à 19:31:55    

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

Reply

Marsh Posté le 22-09-2003 à 18:49:22    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed