Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- import random
- # Размеры окна
- WIDTH = 500
- HEIGHT = 300
- # Размеры ракеток и мяча
- PAD_WIDTH = 10
- PAD_HEIGHT = 60
- BALL_SIZE = 20
- # Скорость мяча
- BALL_SPEED_X = 5
- BALL_SPEED_Y = 5
- # Функция для движения мяча
- def move_ball():
- global ball_pos, ball_speed
- ball_pos[0] += ball_speed[0]
- ball_pos[1] += ball_speed[1]
- # Отскок от верхней и нижней границ
- if ball_pos[1] <= 0 or ball_pos[1] >= HEIGHT - BALL_SIZE:
- ball_speed[1] = -ball_speed[1]
- # Отскок от ракеток
- if (
- (ball_pos[0] <= pad_left_pos[0] + PAD_WIDTH and
- pad_left_pos[1] <= ball_pos[1] <= pad_left_pos[1] + PAD_HEIGHT) or
- (ball_pos[0] >= pad_right_pos[0] - BALL_SIZE - PAD_WIDTH and
- pad_right_pos[1] <= ball_pos[1] <= pad_right_pos[1] + PAD_HEIGHT)
- ):
- ball_speed[0] = -ball_speed[0]
- # Проверка на окончание игры (мяч за пределами экрана)
- if ball_pos[0] < 0 or ball_pos[0] > WIDTH:
- reset_game()
- canvas.delete("all")
- canvas.create_rectangle(pad_left_pos, pad_left_pos[0] + PAD_WIDTH, pad_left_pos[1] + PAD_HEIGHT, fill="blue")
- canvas.create_rectangle(pad_right_pos, pad_right_pos[0] + PAD_WIDTH, pad_right_pos[1] + PAD_HEIGHT, fill="red")
- canvas.create_oval(ball_pos, ball_pos[0] + BALL_SIZE, ball_pos[1] + BALL_SIZE, fill="black")
- root.after(20, move_ball)
- # Функция для перемещения левой ракетки вверх
- def move_pad_left_up(event):
- pad_left_pos[1] -= 20
- # Функция для перемещения левой ракетки вниз
- def move_pad_left_down(event):
- pad_left_pos[1] += 20
- def move_pad_right_up(event):
- pad_right_pos[1] -= 20
- # Функция для перемещения левой ракетки вниз
- def move_pad_right_down(event):
- pad_right_pos[1] += 20
- # Функция для сброса игры
- def reset_game():
- global ball_pos, ball_speed
- ball_pos = [WIDTH // 2 - BALL_SIZE // 2, HEIGHT // 2 - BALL_SIZE // 2]
- ball_speed = [BALL_SPEED_X, BALL_SPEED_Y * random.choice([-1, 1])]
- # Создание основного окна
- root = tk.Tk()
- root.title("Пинг-понг")
- root.resizable(False, False)
- # Создание элемента Canvas для отображения игрового поля
- canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT, bg="white")
- canvas.pack()
- # Инициализация начальных позиций и скорости
- pad_left_pos = [10, HEIGHT // 2 - PAD_HEIGHT // 2]
- pad_right_pos = [WIDTH - 10 - PAD_WIDTH, HEIGHT // 2 - PAD_HEIGHT // 2]
- ball_pos = [WIDTH // 2 - BALL_SIZE // 2, HEIGHT // 2 - BALL_SIZE // 2]
- ball_speed = [BALL_SPEED_X, BALL_SPEED_Y * random.choice([-1, 1])]
- # Привязка клавиш к движению левой ракетки
- root.bind("<Up>", move_pad_right_up)
- root.bind("<Down>", move_pad_right_down)
- root.bind("w", move_pad_left_up)
- root.bind("W", move_pad_left_up)
- root.bind("S", move_pad_left_down)
- root.bind("s", move_pad_left_down)
- # Сброс игры при первом запуске
- reset_game()
- # Запуск функции движения мяча
- move_ball()
- # Запуск основного цикла
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement