turtle_pymunk愤怒的小鸟简单版本程序

turtle_pymunk愤怒的小鸟简单版本程序

以下是部分代码预览:

"""   这是用Python的海龟画图模块和pymunk模块制作的愤怒的小鸟简单版本程序。
physicbox是我编写的一个模块,它有PhysicBall类用来生成物理角色。
还设计了StaticPhysicBox类用来生成静止的盒子角色。 
"""
import pymunk                       # 导入pymunk模块
import turtle                       # 导入海龟模块,用它来渲染刚体
import random
import physicbox

def display_xy(event):
        """朝向鼠标指针"""

  
def draw_line(x,y):
    """画线"""
    fixed_dot.clear()
    fixed_dot.pendown()
    fixed_dot.goto(x,y)
    fixed_dot.penup()    
    fixed_dot.goto(fixed_position)
    virtual_ball.goto(x,y)

def shoot(x,y):
    virtual_ball.ondrag(None)                        # 取消虚拟球的拖曳事件
    dx =  (fixed_dot.xcor() - virtual_ball.xcor())/5 # 算出水平位移   
    dy =  (fixed_dot.ycor() - virtual_ball.ycor())/5 # 算出垂直位移                
   
width,height = 1024,800
screen = turtle.Screen()                 # 新建海龟窗口,用于渲染形状的
screen.delay(0)
screen.title("turtle_pymunk愤怒的小鸟原型程序")
screen.setup(width,height)
screen.bgpic("images/bg.png")
screen.addshape("images/bird.gif")       # 50 x 50
 
screen.addshape("images/platform.gif")   # 168 x 166
screen.addshape("images/wood1.gif")      # 406 x 38
screen.addshape("images/wood2.gif")      # 166 x 82
screen.addshape("images/ground.gif")     # 1024x250
screen.addshape("images/verticle1.gif")  # 96x408
screen.addshape("images/verticle2.gif")  # 96x351
screen.addshape("images/verticle3.gif")  # 96x314
screen.addshape("images/verticle4.gif")  # 96x269
screen.addshape("images/verticle5.gif")  # 96x210
screen.addshape("images/verticle6.gif")  # 96x114
screen.addshape("images/pig.gif")        # 102x92


# 新建重力空间
space = pymunk.Space()                   # 设定重力空间
space.gravity = 0,-50                    # 设置重力参数 

# 新建静止的平台,参数为:重力空间,gif图形,图形宽高,坐标,用于放要发射的球
px,py  = -400,-300
ball_platform = physicbox.StaticPhysicBox(space,"images/platform.gif",(168,166),(px,py))

fixed_position = ball_position = (px,  py+166/2+50/2)   # 平台中心点y坐 + 平台高度/2 + 球高度/2,这样球刚好在平台上   
ball = physicbox.PhysicBall(space,"images/bird.gif",ball_position,25)  # 25是半径

# 拉皮筋要用到的固定点对象,它用来画线
fixed_dot = turtle.Turtle(visible=False)
fixed_dot.penup()
fixed_dot.goto(0,300)
fixed_dot.color("gray")
fixed_dot.write("按空格键重置",align='center',font=("黑体",32,"normal"))
fixed_dot.goto(ball_position)
fixed_dot.pensize(5)
fixed_dot.color("orange")

# 虚拟球用来显示拉的时候的球,并不是真正发射的球
virtual_ball = turtle.Turtle("images/bird.gif",visible=False)
virtual_ball.penup()
virtual_ball.goto(fixed_position)
virtual_ball.st()
virtual_ball.ondrag(draw_line)
virtual_ball.onrelease(shoot)


def reset_ball():
    """重置待发射的小球"""
    ball.reborn()
    virtual_ball.goto(fixed_position)
    virtual_ball.ondrag(draw_line)
    virtual_ball.st()

screen.onkey(reset_ball,"space")        # 按空格键重置小球
screen.listen()

下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

李兴球

李兴球的博客是Python创意编程原创博客

评论已关闭。