0
点赞
收藏
分享

微信扫一扫

pyzero 多小球碰撞反弹

大南瓜鸭 2022-03-21 阅读 29
python

用python中的pygame zero库实现小球碰撞

import pgzrun

WIDTH = 800
HEIGHT = 600
ball = []
x = WIDTH / 2 - 200
y = HEIGHT / 2
speed = 10
r = 30


class Ball:
    def __init__(self, speedx, speedy, x, y, r, color):
        self.speedx = speedx
        self.speedy = speedy
        self.x = x
        self.y = y
        self.r = r
        self.color = color


def draw():
    screen.fill((128, 200, 120))
    for i in ball:
        screen.draw.filled_circle((i.x, i.y), i.r, i.color)


def ballL(a, b):
    return ((a.x - b.x)**2 + (a.y - b.y)**2)**0.5


def moving(i):
        i.x = i.x + i.speedx
        if i.x >= WIDTH - i.r or i.x <= i.r:
            i.speedx = -i.speedx
        i.y = i.y + i.speedy
        if i.y >= HEIGHT - i.r or i.y <= i.r:
            i.speedy = -i.speedy

def update():
    for i in ball:
        moving(i)
    for i in range(3):
        if i == 2:
            break;
        for j in range(i+1, 3):
            if ballL(ball[i], ball[j]) <= ball[i].r + ball[j].r:
                ball[i].speedx = -ball[i].speedx
                ball[i].speedy = -ball[i].speedy
                ball[j].speedx = -ball[j].speedx
                ball[j].speedy = -ball[j].speedy


color = [(128, 80, 180), (250, 100, 180), (20, 80, 250)]
for i in range(3):
    ball.append(Ball(speed, speed, x, y, r, color[i]))
    x += 200
pgzrun.go()
举报

相关推荐

0 条评论