Advertisement
Chl_Snt

№24. Pong. Завершение

Jul 16th, 2023
1,169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.52 KB | None | 0 0
  1. from tkinter import *
  2. import time
  3. from playsound import playsound
  4.  
  5. root = Tk()
  6. root.geometry("800x600+200+100")
  7. root.title("Pong")
  8.  
  9. canvas = Canvas(root, width=800, height=600, bg="black")
  10. canvas.pack()
  11. record_file = open("score.ini", "r+")
  12. data = record_file.readline()
  13. if data == "":
  14.     record = 0
  15.     record_file.write(f"{record}")
  16.     record_file.close()
  17. else:
  18.     record = int(data)
  19.  
  20. score = 0
  21. score_gui = canvas.create_text(390, 20, text=f"Счёт: {score}", fill="white", font=("Consolas", 20))
  22. canvas.create_text(390, 40, text=f"Рекорд: {record}", fill="white", font=("Consolas", 20))
  23.  
  24.  
  25. class Player:
  26.     def __init__(self):
  27.         self.id = None
  28.         self.y = None
  29.         self.speed = 4
  30.  
  31.     def draw(self):
  32.         canvas.move(self.id, 0, self.y)
  33.         _, y, _, y1 = canvas.coords(self.id)
  34.         if y <= 0 or y1 >= 600:
  35.             self.y = 0
  36.  
  37.  
  38. class Player1(Player):
  39.     def __init__(self):
  40.         super().__init__()
  41.         self.id = canvas.create_rectangle(30, 10, 40, 90, fill="white")
  42.         self.y = 0
  43.  
  44.     def move(self, event):
  45.         if event.keysym == "w":
  46.             self.y = -self.speed
  47.         if event.keysym == "s":
  48.             self.y = self.speed
  49.  
  50.     def stop(self, event):
  51.         if event.keysym in "ws":
  52.             self.y = 0
  53.  
  54.  
  55. class Player2(Player):
  56.     def __init__(self):
  57.         super().__init__()
  58.         self.id = canvas.create_rectangle(760, 10, 770, 90, fill="white")
  59.         self.y = 0
  60.  
  61.     def move(self, event):
  62.         if event.keysym == "Up":
  63.             self.y = -self.speed
  64.         if event.keysym == "Down":
  65.             self.y = self.speed
  66.  
  67.     def stop(self, event):
  68.         if event.keysym in ("Up", "Down"):
  69.             self.y = 0
  70.  
  71.  
  72. class Ball:
  73.     def __init__(self):
  74.         self.id = canvas.create_oval(40, 20, 70, 50, fill="white")
  75.         self.x = 3
  76.         self.y = 3
  77.  
  78.  
  79.     def draw(self):
  80.         global score
  81.         canvas.move(self.id, self.x, self.y)
  82.         bx, by, bx1, by1 = canvas.coords(self.id)
  83.         if by <= 0 or by1 >= 600:
  84.             self.y = -self.y
  85.  
  86.         x1, y1, x11, y11 = canvas.coords(player1.id)
  87.         x2, y2, x22, y22 = canvas.coords(player2.id)
  88.  
  89.  
  90.         if by > y1 - 25 and by1 < y11 + 25 and bx <= x11:
  91.             self.x -= 0.1
  92.             playsound('pong.mp3', block=False)
  93.             player1.speed += 0.1
  94.             player2.speed += 0.1
  95.             score += 1
  96.             canvas.itemconfig(score_gui, text=f"Счёт: {score}")
  97.             self.x = -self.x
  98.  
  99.  
  100.         if by > y2 - 25 and by1 < y22 + 25 and bx1 >= x2:
  101.             self.x += 0.1
  102.             playsound('pong.mp3', block=False)
  103.             player1.speed += 0.1
  104.             player2.speed += 0.1
  105.             score += 1
  106.             canvas.itemconfig(score_gui, text=f"Счёт: {score}")
  107.             self.x = -self.x
  108.  
  109.         if bx <= 0 or bx1 >= 800:
  110.             return True
  111.  
  112.  
  113.  
  114. ball = Ball()
  115. player1 = Player1()
  116. player2 = Player2()
  117.  
  118.  
  119. root.bind_all("<KeyPress>", player1.move)
  120. root.bind_all("<KeyPress>", player2.move, add="+")
  121. root.bind_all("<KeyRelease>", player1.stop)
  122. root.bind_all("<KeyRelease>", player2.stop, add="+")
  123.  
  124.  
  125. while True:
  126.     root.update()
  127.     root.update_idletasks()
  128.     loser = ball.draw()
  129.     if loser:
  130.         break
  131.     player1.draw()
  132.     player2.draw()
  133.     time.sleep(0.01)
  134.  
  135. record_file = open("score.ini", "r+")
  136. a = record_file.readline()
  137. if int(a) < score:
  138.     record_file.truncate(0)
  139.     record_file.seek(0)
  140.     record_file.write(f"{score}")
  141. record_file.close()
  142.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement