# -*- coding: cp1252 -*- #On importe Tkinter et on crée un canevas (J'ai aussi inclu un commentaire au début pour "déclarer" les commentaires en quelque sorte. from Tkinter import * import random import time tk = Tk() tk.title("Pong") #Je nomme la classe Ball et je créer la fonction d'initialisation qui prend les paramètres canvas et couleur. #Je définis aussi la variable canvas qui prend le paramètre canvas #J'ai nommé la fonction create_oval avec les paramètres des coordonnées x et y du coin gauche et les coordonnées x et y du coin droit, et aussi la couleur de remplissage de la balle. #La fonction create_oval permet de reconnaître le dessin et variable id mémorise ce que la "fonction envoie" class Ball: def __init__(self, canvas, paddle, color): self.canvas = canvas self.paddle = paddle #on rajoute à la fonction l'objet paddle. self.id = canvas.create_oval(10, 10, 25, 25, fill=color) self.canvas.move(self.id, 245, 100) starts = [-3, -2, -1, 1, 2, 3] random.shuffle(starts) self.x = starts[0] self.y = -3 self.hauteur_canevas = self.canvas.winfo_height() self.largeur_canevas = self.canvas.winfo_width() self.hit_bottom = False def hit_paddle(self, pos): #Avant la fonction draw on rajoute la fonction hit paddle. paddle_pos = self.canvas.coords(self.paddle.id) #Cette ligne contient les coordonnées de la balle, puis on prend les coordonnées du paddle et on les mémorise dans la variable pos_paddle if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]: #On indique les instructions si le côté droit de la balle est plus petit que le côté gauche du paddle, alors. pos[2] contient les coordonnées et pos paddle celle de la raquette...etc if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]: #paramètre qui prenne en compte la position des objets... return True return False def draw(self): self.canvas.move(self.id, self.x, self.y) #On modifie l'appel à la fonction move pour lui passer les variables d'objets x et y. pos = self.canvas.coords(self.id) #On créer une variable pos avec comme valeur le résultat de l'appel à la fonction coords du canevas. Et on passe à coords la variable d'objet id. if pos[1] <= 0: self.y = 3 #On règle y à 3 et -3 tout comme x pour que la balle se déplace à la même vitesse dans toutes les directions. 3 et -3 est une bonne vitesse ni trop vite ni trop lente. if pos[3] >= self.hauteur_canevas: self.hit_bottom = True if self.hit_paddle(pos) == True: self.y = -3 if pos[0] <= 0: self.x = 3 if pos[2] >= self.largeur_canevas: self.x = -3 class Paddle: def __init__(self, canvas, color): #un peu comme la classe ball on définit la classe paddle self.canvas = canvas self.id = canvas.create_rectangle(0, 0, 100, 10, fill=color) self.canvas.move(self.id, 200, 300) self.x = 0 self.largeur_canevas = self.canvas.winfo_width() self.canvas.bind_all('<KeyPress-Left>', self.turn_left) #On lie la fonction turn_left de la classe paddle à la pression sur la touche flèche gauche et idem pour la droite. self.canvas.bind_all('<KeyPress-Right>', self.turn_right) def draw(self): self.canvas.move(self.id, self.x, 0) #la fonction move du canevas permet de déplacer le paddle dans la direction donnée par la variable x, avec le 0 on indique qu'il n'y aura pas de déplacement vertical. Apres viennent les coordonnées du paddle. pos = self.canvas.coords(self.id) if pos[0] <= 0: #Le paddle ne doit pas rebondir mais s'arrêter de bouger , d'ou les 0 dans la pos self.x = 0 elif pos[2] >= self.largeur_canevas: #idem pour la largeur self.x = 0 def turn_left(self, evt): #Ces fonctions se reportent à la direction self.x = -3 def turn_right(self, evt): self.x = 3 #Ici on cloture le programme. on définit la fenetre avec le canvas et les couleurs de la balle et du paddle canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0) canvas.pack() tk.update() paddle = Paddle(canvas, 'green') ball = Ball(canvas, paddle, 'red') while 1: if ball.hit_bottom == False: #on ajoute la variable d'objet à la fin de la fonction init de la class ball ball.draw() paddle.draw() tk.update_idletasks() tk.update() time.sleep(0.01)
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question