pyzero 多小球碰撞反弹

用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()
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值