import pgzrun
import random
WIDTH = 600
HEIGHT = 400
# 豌豆射手初始位置:窗口左侧中间位置
sheshou = Actor('射手')
sheshou.x = 50
sheshou.y = 200
# 子弹初始位置:同豌豆射手的位置
zd = Actor('子弹')
zd.x = sheshou.x
zd.y = sheshou.y
# 僵尸数量:4个
# 僵尸初始位置:窗口右侧随机位置
l = []
for i in range(4):
js = Actor('僵尸')
js.x = 600
js.y = random.randrange(50, 400, 80)
l.append(js)
def draw():
screen.blit('草地背景', (0, 0))
sheshou.draw()
zd.draw()
for i in l:
i.draw()
# 实时显示血量和分数
screen.draw.text('HP:%d' % hp, (20, 10), fontsize=40, color='red')
screen.draw.text('Score:%d' % score, (250, 10), fontsize=40, color='red')
# ⑤当血量≤0,游戏界面切换为'游戏结束'背景
if hp <= 0:
screen.blit('游戏结束', pos=[0, 0])
# ①控制豌豆射手上、下移动
def on_key_down(key):
if key == key.UP:
sheshou.y -= 70
if key == key.DOWN:
sheshou.y += 70
# 分数
score = 0
# 血量
hp = 5
def update():
global score, hp
if hp > 0:
# 子弹从左向右一直移动
zd.x += 10
# ②子弹到达窗口右侧,子弹重新回到豌豆射手的位置
if zd.x == 600:
zd.x = sheshou.x
zd.y = sheshou.y
for i in l:
# 僵尸从右向左一直移动
i.x -= 1
# ③子弹碰到僵尸,子弹重新回到豌豆射手的位置,僵尸回到窗口右侧随机位置,并且分数+1
if i.colliderect(zd):
score += 1
zd.x = sheshou.x
zd.y = sheshou.y
i.x = 600
i.y = random.randrange(50, 400, 80)
# ④僵尸到达窗口左侧,重新回到窗口右侧随机位置,并且血量-1
if i.x == 0:
i.x = 600
i.y = random.randrange(50, 400, 80)
hp -= 1
pgzrun.go()