这个程序采用turtle和pymunk相结合。这一点就有所创新性,程序运行后,单击海龟画图屏幕会有一个弹球往下掉。碰到拦板会反弹,当然碰到其它弹球也会有互碰效果。为了固定FPS,借用了pygame模块的Clock时钟类。下面是部分源码预览:
"""
纯画笔turtle与pymunk弹球1。
本程序结合pygame,turtle和pymunk模块。
单击屏幕会有小球落下,小球们和挡板都是
用一个海龟画出来的。在本程序的while循环中
还限制了fps,这是通过导入pygame的Clock类实现的。
请注意这个物理弹球与第86个例子中《3D物理互碰弹球》
中的区别。在那个例子中,弹球们都是一个个的海龟对象,
而这个例子即终只有两个海龟对象,海龟本身是不显示的。
一只负责渲染所所有画面,另一只用来显示fps,即帧率的。
本程序中函数有使用全局变量,还可以再度进行优化调整。
"""
__author__ = "李兴球"
__date__ = "2019/10/7"
__blog__ = "www.lixingqiu.com"
import math # 导入数学模块
import pymunk # 导入pymunk模块
import turtle # 导入海龟模块
from pygame.time import Clock # 导入Clock类
def draw_circle(radius):
"""
画圆形,本程序是在turtle中心点画一个填充圆形。
为了突出弹球的旋转显示效果,多画了一根线。
"""
turtle.begin_fill()
turtle.fd(radius)
turtle.left(90)
turtle.circle(radius)
turtle.right(90)
turtle.color('black') # 画线突出旋转
turtle.down()
turtle.bk(radius)
turtle.up()
turtle.color('dodger blue')
turtle.end_fill()
........................................
抬头 = "纯画笔turtle与pymunk弹球by lixingqiu"
width,height = 800,600
screen = turtle.getscreen() # 小球所在屏幕
screen.setup(width,height)
screen.bgcolor('cyan')
screen.tracer(0,0)
screen.title(抬头)
screen.update()
space = pymunk.Space() # 创建物理空间
space.gravity = 0,-100 # 设置重力参数
balls = [] # 存储每个小球形状的列表
# 下面是建立拦板
a,b ,c= (-100,-100),(100,-100),(100,100)
make_board()
# 显示fps的海龟对象
ft = ("",22,'normal')
fps_turtle = turtle.Turtle(visible=False)
turtle.up()
fps_turtle.goto(300,240)
........................
如需要查看完整源代码,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

