Advertisement
Chl_Snt

№23. Pong. Коллизия

Jul 16th, 2023
1,002
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.66 KB | None | 0 0
  1. from tkinter import *
  2. import time
  3.  
  4. root = Tk()
  5. root.geometry("800x600+200+100")
  6. root.title("Pong")
  7.  
  8.  
  9. canvas = Canvas(root, width=800, height=600, bg="black")
  10. canvas.pack()
  11. score = 0
  12.  
  13.  
  14. class Player:
  15.     def __init__(self):
  16.         self.id = None
  17.         self.y = None
  18.         self.speed = None
  19.  
  20.     def draw(self):
  21.         canvas.move(self.id, 0, self.y)
  22.         _, y, _, y1 = canvas.coords(self.id)
  23.         if y <= 0 or y1 >= 600:
  24.             self.y = 0
  25.  
  26.  
  27. class Player1(Player):
  28.     def __init__(self):
  29.         super().__init__()
  30.         self.id = canvas.create_rectangle(30, 10, 40, 90, fill="white")
  31.         self.y = 0
  32.         self.speed = 3
  33.  
  34.     def move(self, event):
  35.         if event.keysym == "w":
  36.             self.y = -self.speed
  37.         if event.keysym == "s":
  38.             self.y = self.speed
  39.         print(self.y)
  40.  
  41.     def stop(self, event):
  42.         if event.keysym in "ws":
  43.             self.y = 0
  44.  
  45.  
  46. class Player2(Player):
  47.     def __init__(self):
  48.         super().__init__()
  49.         self.id = canvas.create_rectangle(760, 10, 770, 90, fill="white")
  50.         self.y = 0
  51.         self.speed = 3
  52.  
  53.     def move(self, event):
  54.         if event.keysym == "Up":
  55.             self.y = -self.speed
  56.         if event.keysym == "Down":
  57.             self.y = self.speed
  58.  
  59.     def stop(self, event):
  60.         if event.keysym in ("Up", "Down"):
  61.             self.y = 0
  62.  
  63.  
  64. class Ball:
  65.     def __init__(self):
  66.         self.id = canvas.create_oval(40, 20, 70, 50, fill="white")
  67.         self.x = 3
  68.         self.y = 3
  69.  
  70.  
  71.     def draw(self):
  72.         canvas.move(self.id, self.x, self.y)
  73.         bx, by, bx1, by1 = canvas.coords(self.id)
  74.         if by <= 0 or by1 >= 600:
  75.             self.y = -self.y
  76.  
  77.         x1, y1, x11, y11 = canvas.coords(player1.id)
  78.         x2, y2, x22, y22 = canvas.coords(player2.id)
  79.  
  80.  
  81.         if by > y1 and by1 < y11 and bx <= x11:
  82.             self.x -= 0.25
  83.             player1.speed += 0.25
  84.             player2.speed += 0.25
  85.             self.x = -self.x
  86.  
  87.         if by > y2 and by1 < y22 and bx1 >= x2:
  88.             self.x += 0.25
  89.             player1.speed += 0.25
  90.             player2.speed += 0.25
  91.             self.x = -self.x
  92.  
  93.         if bx <= 0 or bx1 >= 800:
  94.             return True
  95.  
  96.  
  97.  
  98. ball = Ball()
  99. player1 = Player1()
  100. player2 = Player2()
  101.  
  102.  
  103. root.bind_all("<KeyPress>", player1.move)
  104. root.bind_all("<KeyPress>", player2.move, add="+")
  105. root.bind_all("<KeyRelease>", player1.stop)
  106. root.bind_all("<KeyRelease>", player2.stop, add="+")
  107.  
  108.  
  109. while True:
  110.     root.update()
  111.     root.update_idletasks()
  112.     loser = ball.draw()
  113.     if loser:
  114.         break
  115.     player1.draw()
  116.     player2.draw()
  117.     time.sleep(0.01)
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement