import billiard4 as billiard
import math
# Константы
WIDTH = 800
HEIGHT = 600
RADIUS = 20
# Класс для шарика
class Ball:
def __init__(self, x, y, vx, vy):
self.x = x
self.y = y
self.vx = vx
self.vy = vy
def move(self):
self.x += self.vx
self.y += self.vy
def draw(self, canvas):
canvas.draw_circle((self.x, self.y), RADIUS, 1, "Red", "Red")
# Функция для обработки столкновения
def handle_collision(ball1, ball2):
# Вычисляем угол столкновения
angle = math.atan2(ball2.y - ball1.y, ball2.x - ball1.x)
# Устанавливаем новые скорости
ball1.vx = math.cos(angle + math.pi / 4) * 5 # Разлетается в угол (45 градусов)
ball1.vy = math.sin(angle + math.pi / 4) * 5
ball2.vx = math.cos(angle - math.pi / 4) * 5 # Разлетается в угол (-45 градусов)
ball2.vy = math.sin(angle - math.pi / 4) * 5
# Основная функция
def main():
# Создаем два шарика с начальными координатами и скоростями
ball1 = Ball(100, 100, 2, 3)
ball2 = Ball(200, 150, -2, -3)
# Создаем холст для рисования
canvas = billiard.Canvas(WIDTH, HEIGHT)
while True:
# Двигаем шарики
ball1.move()
ball2.move()
# Проверка на столкновение
distance = math.sqrt((ball1.x - ball2.x) ** 2 + (ball1.y - ball2.y) ** 2)
if distance < RADIUS * 2:
handle_collision(ball1, ball2)
# Очистка холста и рисование шариков
canvas.clear()
ball1.draw(canvas)
ball2.draw(canvas)
# Обновление холста
canvas.update()
# Запуск основной функции
if __name__ == "__main__":
main()
на библиотеке billiard4 которую я закреплю вместе с sample2