2022寒假7天课之合金弹头macro角色打僵尸课程源代码

0 Comments

Python合金弹头macro角色打僵尸by李兴球
这是第五个版本的源代码:

"""
  05_合金弹头macro角色_僵尸.py
  1. 请加上macro碰以僵尸会死亡并显示游戏结束的文字.  
"""
import random
from sprites import Sprite,Key,Clock,explode

pics = [f"m/{i}.png" for i in range(24)]
macro = Sprite(pics,pos=(0,100)) # 新建macro角色,采用pics里的造型图
macro.rotatemode(1)              # 设定macro的旋转模式为左右翻转
screen = macro.getscreen()       # 通过macro的getscreen命令得到屏幕对象  
screen.setup(480,360)            # 设定屏幕的宽高为480,360 
screen.bgpic('现代城市.png')     # 设定背景图片

akey = Key("a")              # 新建a键
dkey = Key("d")              # 新建d键 
wkey = Key("w")              # 新建w键
fkey = Key("f")              # 新建f键

zd = Sprite('h1.png',visible=False) # 新建子弹角色

screen.listen()              # 监听按键检测
clock = Clock()              # 新建时钟对象 
wi = 0
status = 0                     # 三种状态0:停,1走,大于1:发射
dy = 0                         # macro的垂直速度

baopic = [f"bz/{i}.png" for i in range(15)] # 爆炸效果要用到的一系列图片
jspic = [f"js/{i}.png" for i in range(16)]  # 僵尸要用到的一系列图片
js = Sprite(jspic,pos=(-240,-130)) # 新建僵尸角色

while True:
    if js.isvisible():         # 如果僵尸是可见的
       js.fd(2)                # 僵尸前进2个单位 
       js.nextshape()          # 僵尸切换到下一个造型
       if js.collide(zd):      # 如果僵尸碰到子弹
          zd.hide()            # 子弹隐藏
          explode(js,baopic)   # 显示爆炸效果
          js.reborn(random.randint(-500,-340),-130)# 僵尸重新出现    
       if js.xcor()>=240:js.setx(-240) # 如果僵尸到了最右边,从最左边重新出现 
    
    macro.addy(dy)
    if macro.ycor()<= -130:    # 如果macro的y坐标小于等于-130
        macro.sety(-130)       # 则认为着地了,把它的y坐标设为-130
        dy = 0                 # dy也设为0,(就不会继续掉了)
        if wkey.down():dy = 15 # 如果此时按了w键,则dy的值设为15
    else:
        dy = dy  - 1
        
    if zd.isvisible():         # 如果子弹是可见的
        zd.fd(10)              # 子弹前进10个单位
        if zd.collide_edge():zd.hide()
    if fkey.downup() and zd.ishide():
        wi = 15                # 按了f键又松开则发射造型从15开始
        status=10
        zd.goto(macro.xcor(),macro.ycor()+8)
        zd.setheading(macro.heading())
        zd.show()
        
    if akey.down():            # 如果按了a键则向左移动
        macro.seth(180)
        status = 1
        macro.addx(-5)
        if macro.xcor()<= -240:macro.setx(240)
    elif dkey.down():          # 如果按了d键则向右移动
        macro.seth(0)
        status = 1
        macro.addx(5)
        if macro.xcor()>= 240:macro.setx(-240)
    else:                      # 如果没有按键则status减1直到O
        if status>0:status -= 1
    if status == 0:
        macro.shapeindex(0)
    elif status == 1:          # 走路造型切换
       macro.shapeindex(wi)
       wi = wi + 1
       wi = wi % 15
    elif status>1:             # 发射造型切换
       macro.shapeindex(wi)
       wi = wi + 1
       wi = wi % 24       
    
    macro.update()
    clock.tick(60)

发表评论