
这是第五个版本的源代码:
"""
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)