纯画笔turtle与pymunk弹球1

纯画笔turtle与pymunk弹球by lixingqiu

纯画笔turtle与pymunk弹球by lixingqiu

"""
   纯画笔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()
    
def draw_board():
    """画挡板
       板子用Segment建立,radius为20,
       所以这里画笔宽度设定为40。
    """     
    turtle.width(40)        
    turtle.goto(a)
    turtle.down()   
    turtle.goto(b)
    turtle.goto(c)
    turtle.up()
    turtle.width(1)
    
def make_ball(x,y):
    """产生一个球"""
    p = x,y
    body = pymunk.Body(1,100)      # 创建质量为1,惯性为100的刚体
    body.position = p              # 设置物体的初始坐标
    shape = pymunk.Circle(body,radius,(0,0)) # 物体的形状
    shape.elasticity = 0.95        # 弹性系数
    shape.friction = 0.9           # 摩擦系数
    space.add(shape,body )         # 把物体增加到重力空间
    balls.append(shape)            # 球是形状表,形状有body属性

def make_board():
    # 下面是建立拦板    
    board1 = pymunk.Segment(space.static_body,a,b,20) # 创建静态板子
    board2 = pymunk.Segment(space.static_body,b,c,20) # 创建静态板子
    board1.elasticity = 0.95        # 弹性系数
    board1.friction = 0.9           # 摩擦系数
    board2.elasticity = 0.95        # 弹性系数
    board2.friction = 0.9           # 摩擦系数
    space.add(board1,board2)

You must log in to read the rest of this article. Please log in or register as a user.