Evolvox Toujours y croire, toujours... | 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 :
- class Ping:
- def __init__(self, largeur=800, hauteur=600, vitesse=8):
- # initialisation des variables
- self.l, self.h, self.v, self.vy = largeur, hauteur, -vitesse, vitesse
- self.score1, self.score2 = 0, 0
- # creation de la fenetre et appel des composants graphiques
- self.root = Tk()
- self.root.title('Evoping 2003')
- self.objetsGraphiques()
- # gestion des evenements
- self.root.bind('w', self.joueur1Haut)
- self.root.bind('s', self.joueur1Bas)
-
- self.root.mainloop()
- self.root.destroy()
- def objetsGraphiques(self):
- # creation de l'aire de jeu
- self.can = Canvas(self.root, width=self.l, height=self.h, bg='black')
- self.can.pack()
- # dimensions des objets en fonction de la taille de l'aire de jeu
- 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)
- self.largj1, self.largj2 = (30,40), (self.l-30,self.l-40)
- # creation de la balle et des raquettes
- self.balle = self.can.create_oval(self.x-5, self.y-5, self.x+5, self.y+5, fill='red')
- self.joueur1 = self.can.create_rectangle(self.largj1[0], self.j1y, self.largj1[1], self.j1y+self.j1l, fill='blue')
- self.joueur2 = self.can.create_rectangle(self.largj2[0], self.j2y, self.largj2[1], self.j2y+self.j2l, fill='yellow')
- # affichage des boutons et du texte
- Button(self.root, text='Jouer', command=self.departBalle).pack(side=LEFT)
- Button(self.root, text='Pause', command=self.arretBalle).pack(side=LEFT)
- Button(self.root, text='Quitter', command=self.root.quit).pack(side=LEFT)
- self.scoreordi = Label(self.root, text=self.score2)
- self.scoreordi.pack(side=RIGHT)
- Label(self.root, text='Ordinateur = ').pack(side=RIGHT)
- self.scorehumain = Label(self.root, text=0)
- self.scorehumain.pack(side=RIGHT)
- Label(self.root, text='Humain = ').pack(side=RIGHT)
- Label(self.root, text='Scores:').pack(side=RIGHT)
-
-
- def joueur1Haut(self,event):
- # detection du bord puis deplacement vers le haut
- if self.j1y <= 0:
- self.j1y = 0
- else:
- self.j1y = self.j1y - 10
- self.can.coords(self.joueur1, self.largj1[0], self.j1y+5, self.largj1[1], self.j1y+self.j1l)
- def joueur1Bas(self, event):
- # detection du bord puis deplacement vers le bas
- if self.j1y >= (self.h - self.j1l):
- self.j1y = (self.h - self.j1l)
- else:
- self.j1y = self.j1y + 10
- self.can.coords(self.joueur1, self.largj1[0], self.j1y+5, self.largj1[1], self.j1y+self.j1l)
- def departBalle(self):
- # depart de la balle
- self.boucle = 0
- self.replace = 0
- self.boucle = self.boucle + 1
- if self.boucle == 1:
- self.deplacementBalle()
-
- def arretBalle(self):
- # arret des boucles (pause ou remise en jeu)
- self.boucle = 0
- self.replace = 1
- return
-
-
- def deplacementBalle(self):
- # detection d'une collision avec les raquettes
- if (self.x <= self.largj1[0]+10) and (self.y >= self.j1y and self.y <= self.j1y+self.j1l):
- self.v = -self.v
- if (self.x >= self.largj2[1]) and (self.y >= self.j2y and self.y <= self.j2y+self.j2l):
- self.v = -self.v
- self.x = self.x + self.v
- # affectation des points si la balle touche un bord et rupture de la boucle
- if self.x < 15:
- self.scoreordi.configure(text=self.score2+1)
- self.arretBalle()
- if self.x > (self.l - 15):
- self.scorehumain.configure(text=self.score1+1)
- self.arretBalle()
-
- # rebond
- if self.y > (self.h - 15) or self.y < 15:
- self.vy = -self.vy
- # deplacement vertical et horizontal
- self.x, self.y = self.x + self.v, self.y + self.vy
- # affectation de la position de la balle a la position de l'ordinateur
- self.j2y = self.y
- # deplacement de l'ordinateur
- self.ordinateur()
- # deplacement de la balle
- self.can.coords(self.balle, self.x-5, self.y-5, self.x+5, self.y+5)
- # controle si la balle doit etre replacee au centre
- if self.replace == 1:
- self.x, self.y = (self.l/2), (self.h/2)
- self.can.coords(self.balle,self.x-5, self.y-5, self.x+5, self.y+5)
- # boucle
- if self.boucle > 0:
- self.root.after(15, self.deplacementBalle)
- def ordinateur(self):
- # detection du bord
- if self.j2y <= self.j2l/2:
- self.j2y = self.j2l/2
- if self.j2y >= (self.h - (self.j2l/2)):
- self.j2y = (self.h - (self.j2l/2))
- #deplacement de l'ordinateur
- self.can.coords(self.joueur2, self.largj2[0], self.j2y-(self.j2l/2), self.largj2[1], self.j2y-(self.j2l/2)+self.j2l)
- return
- # lancement de l'application
- from Tkinter import *
- 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
|