python精灵模块_抛物线射猴子

"""
   抛物模块_射猴子.py
   按住鼠标左键,速度会一直增加,松开后发射!
"""
import math
from sprites import *

def shoot():
    global speed
    ball = Sprite(shape='circle',visible=False,tag='ball') 
    ball.goto(arrow.pos())
    angle = math.radians(ball.towards(mouse_pos()))
    ball.dx = speed * math.cos(angle)
    ball.dy = speed * math.sin(angle)
    ball_group.rebuild()
    ball.show()
    
width,height = 516,389
screen = Screen()
screen.setup(width,height)
screen.bgpic('森林.png')

monkey1 = Sprite(shape='monkey.png',tag='monkey')
monkey1.goto(-100,50)

monkey2 = Sprite(shape='monkey.png',tag='monkey')
monkey2.goto(100,100)

monkey3 = Sprite(shape='monkey.png',tag='monkey')
monkey3.goto(130,00)

arrow = Sprite(shape='pointer')
arrow.goto(-220,-150)

# 下面新建组,会自动把相应标签的对象都添加到组中
ball_group = Group('ball')    # 新建由ball标签组成的球组
monkey_group = Group("monkey")# 新建由猴子标签组成的猴组

speed = 10
mkey = Mouse()                # 实例化鼠标按键 
clock = Clock()               # 实例化时钟对象 
start_shoot_flag = False      # 开始发射的一个标志
while True:
    arrow.heading(mouse_pos())
    
    # 按下鼠标指针那么speed,即速度会一直增加
    if mkey.down() and len(ball_group)==0:
       speed = speed + 0.1
       start_shoot_flag = True
       screen.title("速度:"+str(speed))

    # 一旦松开鼠标指针,那么就会发射
    if start_shoot_flag and not mkey.down():
        shoot()
        start_shoot_flag = False
        speed = 10

    # ball_group是继承自set的组,在下面的for循环中的
    # b.remove() 命令会动态的改变它,所以把它转换成
    # 列表进行遍历。
    for b in list(ball_group):         
        b.move(b.dx,b.dy)        
        b.dy = b.dy - 1
        if b.collide_edge(): b.remove() # 从球组和总表中移除

    for m in list(monkey_group):
        if len(ball_group)==0:continue
        for ball in ball_group:
            if m.collide(ball):m.remove()
    screen.update()
    clock.tick(60)

关于李兴球

李兴球的博客是Python创意编程原创博客
此条目发表在python, sprites, turtle分类目录。将固定链接加入收藏夹。