以下是部分代码预览:
""" 这是用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资源。)