pygame 入门,python pygame教程
上一篇:pygame教程实例(一)小球弹跳
下一篇:pygame教程实例(三)游戏事件
本教程使用python3
我的另一篇文章简介及安装春节十二响
阅读本文需要一些简单的物理知识
上一篇我们写了一个小球在重力的作用下反复弹跳,现在我们来实现模拟三体运动。
三体运动是指三个质量相差不大的天体相互作用下的运动。
一、定义一些常量和初始化从系统导入来自pygame的数学。颜色导入* G=900 #重力常量FPS=50 #帧率精确=50 #每帧计算几次,次数越多越精确,它是动态变化的pygame.init() #初始化pygamescreen=pygame。展示。set _ mode((640,480),pygame .DOUBLEBUF,32)pygame.display.set_caption(模拟三体)时钟=py游戏。时间。clock()font=py游戏。字体。系统字体(“Arial”,16)二、定义星球类class Star(): x,y=0,0 #坐标vx,vy=0,0 # x,y方向上的速度ax,ay=0,0 # x,y方向上的加速度m=0 #质量r=10 #半径def __init__(self,x,y,vx,vy,m):self。x=x自我。y=y自我。VX=VX赛尔夫。vy=vy自我。m=m def set _ a(self,other_star): 计算星星与其他_明星之间的重力加速度 d _ 2=(self。x-其他_星。x)* * 2(自身。其他星星。y)* * 2 _ x=[-1,1][self.x other_star.x] _y=[-1,1][self.y other_star.y] if d_2!=0:a=G *自我。m * other _ star。m/d _ 2 else:a=0如果self。x!=other _ star。x:ax _=数学。sqrt(a * * 2/(((自我。其他星星。y)/(自我。x-其他_星。x))* * 2 1))自我。ax=ax _ * _ x self。ay=数学。sqrt(a * * 2-ax _ * * 2)* _ y else:self。ay=a * _ y def run(自身,时间): 计算时间时间后的位置:参数时间:时间,秒:返回:“”自身。ax/=self。我自己。ay/=自我。我自己。VX=自我。ax *时间自我。vy=self。唉*时间自己。x=自我。VX *时代自我。y=自我。vy *时间三、设置三个星球Star _ list=[]DD=0.00001 Star _ list。append(Star(200,300,-30,-math.sqrt(3)*30,1000))Star _ list。append(Star(400300,-30,math . sqrt(3)* 301000))Star _ list。append(Star(300,300-math.sqrt(3)*100 dd,60,0,1000))四、主循环# 计算引力加速度def set_a(star_list): for i,star in enumerate(star _ list):star。ax,star.ay=0,0 for j,other _ star in enumerate(star _ list):if I!=j: star.set_a(other_star)#游戏主循环虽然正确:对于pygame.event.get()中的事件:if event.type==pygame .退出:#接收到退出时间后退出程序exit()for I in range(exact):set _ a(star _ list)for star in star _ list:star。运行(1/FPS/精确)#将背景图画上去screen.fill((0,0,0))max _ v=0 for star _ list:max _ v=max(max _ v,math。sqrt(星号。VX * *二星。vy * * 2))py游戏。画吧。circle(screen,(255,0,0),(int(star.x),int(star.y)),star.r) exact=min(300,max(30,int(max _ v)))* 5 screen。blit(字体。render( fps: str(clock。get _ FP刷新画面py游戏。展示。update()time _ passed=clock。滴答(FPS)五、最终效果图稍微加快了一点
上一篇:pygame教程实例(一)小球弹跳
下一篇:pygame教程实例(三)游戏事件
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。