python Pygame 根据万有引力模拟行星绕恒星运动

本文介绍了如何使用Python的pygame库创建一个简单的2D游戏,包含球体的移动、碰撞检测和鼠标控制的发射功能。通过定义Ball类并实现力的作用和重力计算,实现基本的游戏逻辑。
摘要由CSDN通过智能技术生成
import pygame

pygame.init()
screen = pygame.display.set_mode((1280,720))
clock = pygame.time.Clock()
running = True


class Ball:
    def __init__(self,p,v,m) -> None:
        self.p = p
        self.m = m
        self.v = v
        self.a = [0,0]
 

    def force(self, li):
        self.a[0] = li[0] / self.m
        self.a[1] = li[1] / self.m

        self.v[0] += self.a[0]
        self.v[1] += self.a[1]

        self.p[0] = self.p[0] + self.v[0]
        self.p[1] = self.p[1] + self.v[1]
    
    def draw(self,surface:pygame.Surface):
        pygame.draw.circle(surface,"red",(self.p[0],self.p[1]),8)
    
balls = []

while running:
    clock.tick(120)


    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.MOUSEBUTTONDOWN:
            qq = pygame.mouse.get_pos() 
            xx = qq[0]
            yy = qq[1]
        if event.type == pygame.MOUSEBUTTONUP:
            ww = pygame.mouse.get_pos() 
            sudo = (((ww[0]-xx)**2 + (ww[1]-yy)**2)**0.5)*0.01
            ball = Ball(
                p = [xx,yy],
                v = [sudo*((ww[0]-xx)/((ww[0]-xx)**2 + (ww[1]-yy)**2)**0.5),sudo*((ww[1]-yy)/((ww[0]-xx)**2 + (ww[1]-yy)**2)**0.5)],
                m = 100
            )
            balls.append(ball)
    for ball in balls:
        r_2 = (640-ball.p[0])**2 + (360-ball.p[1])**2
        li_2 = 5000*ball.m/r_2
        li = [li_2*(640-ball.p[0])/r_2**0.5,li_2*(360-ball.p[1])/r_2**0.5]
        ball.force(li)


        screen.fill('black')
        for ball in balls:
            ball.draw(screen)
            
    pygame.draw.circle(screen,"red",(640,360),8)
    pygame.display.update()

pygame.quit()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值