Advertisement
plarmi

ping pong

Jan 21st, 2024 (edited)
778
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.39 KB | None | 0 0
  1. import tkinter as tk
  2. import random
  3.  
  4. # Размеры окна
  5. WIDTH = 500
  6. HEIGHT = 300
  7.  
  8. # Размеры ракеток и мяча
  9. PAD_WIDTH = 10
  10. PAD_HEIGHT = 60
  11. BALL_SIZE = 20
  12.  
  13. # Скорость мяча
  14. BALL_SPEED_X = 5
  15. BALL_SPEED_Y = 5
  16.  
  17. # Функция для движения мяча
  18. def move_ball():
  19.     global ball_pos, ball_speed
  20.  
  21.     ball_pos[0] += ball_speed[0]
  22.     ball_pos[1] += ball_speed[1]
  23.  
  24.     # Отскок от верхней и нижней границ
  25.     if ball_pos[1] <= 0 or ball_pos[1] >= HEIGHT - BALL_SIZE:
  26.         ball_speed[1] = -ball_speed[1]
  27.  
  28.     # Отскок от ракеток
  29.     if (
  30.         (ball_pos[0] <= pad_left_pos[0] + PAD_WIDTH and
  31.          pad_left_pos[1] <= ball_pos[1] <= pad_left_pos[1] + PAD_HEIGHT) or
  32.         (ball_pos[0] >= pad_right_pos[0] - BALL_SIZE - PAD_WIDTH and
  33.          pad_right_pos[1] <= ball_pos[1] <= pad_right_pos[1] + PAD_HEIGHT)
  34.     ):
  35.         ball_speed[0] = -ball_speed[0]
  36.  
  37.     # Проверка на окончание игры (мяч за пределами экрана)
  38.     if ball_pos[0] < 0 or ball_pos[0] > WIDTH:
  39.         reset_game()
  40.  
  41.     canvas.delete("all")
  42.     canvas.create_rectangle(pad_left_pos, pad_left_pos[0] + PAD_WIDTH, pad_left_pos[1] + PAD_HEIGHT, fill="blue")
  43.     canvas.create_rectangle(pad_right_pos, pad_right_pos[0] + PAD_WIDTH, pad_right_pos[1] + PAD_HEIGHT, fill="red")
  44.     canvas.create_oval(ball_pos, ball_pos[0] + BALL_SIZE, ball_pos[1] + BALL_SIZE, fill="black")
  45.  
  46.     root.after(20, move_ball)
  47.  
  48. # Функция для перемещения левой ракетки вверх
  49. def move_pad_left_up(event):
  50.     pad_left_pos[1] -= 20
  51.  
  52. # Функция для перемещения левой ракетки вниз
  53. def move_pad_left_down(event):
  54.     pad_left_pos[1] += 20
  55.  
  56. def move_pad_right_up(event):
  57.     pad_right_pos[1] -= 20
  58.  
  59. # Функция для перемещения левой ракетки вниз
  60. def move_pad_right_down(event):
  61.     pad_right_pos[1] += 20
  62.  
  63. # Функция для сброса игры
  64. def reset_game():
  65.     global ball_pos, ball_speed
  66.     ball_pos = [WIDTH // 2 - BALL_SIZE // 2, HEIGHT // 2 - BALL_SIZE // 2]
  67.     ball_speed = [BALL_SPEED_X, BALL_SPEED_Y * random.choice([-1, 1])]
  68.  
  69. # Создание основного окна
  70. root = tk.Tk()
  71. root.title("Пинг-понг")
  72. root.resizable(False, False)
  73.  
  74. # Создание элемента Canvas для отображения игрового поля
  75. canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT, bg="white")
  76. canvas.pack()
  77.  
  78.  
  79. # Инициализация начальных позиций и скорости
  80. pad_left_pos = [10, HEIGHT // 2 - PAD_HEIGHT // 2]
  81. pad_right_pos = [WIDTH - 10 - PAD_WIDTH, HEIGHT // 2 - PAD_HEIGHT // 2]
  82. ball_pos = [WIDTH // 2 - BALL_SIZE // 2, HEIGHT // 2 - BALL_SIZE // 2]
  83. ball_speed = [BALL_SPEED_X, BALL_SPEED_Y * random.choice([-1, 1])]
  84.  
  85. # Привязка клавиш к движению левой ракетки
  86. root.bind("<Up>", move_pad_right_up)
  87. root.bind("<Down>", move_pad_right_down)
  88. root.bind("w", move_pad_left_up)
  89. root.bind("W", move_pad_left_up)
  90. root.bind("S", move_pad_left_down)
  91. root.bind("s", move_pad_left_down)
  92.  
  93. # Сброс игры при первом запуске
  94. reset_game()
  95.  
  96. # Запуск функции движения мяча
  97. move_ball()
  98.  
  99. # Запуск основного цикла
  100. root.mainloop()
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement