
"""
本程序实现一个能向前向后跳跃的小猫,按F键发射子弹,飞碟碰到子弹爆炸.
Python精灵模块小猫射击飞碟.py
pip install pygame
"""
import pygame
from sprites import *
pygame.mixer.init() # 初始化混音器
j = pygame.mixer.Sound("jump.wav") # 新建音效对象
width,height = 480,360 # 定义宽高变量
screen = Screen() # 新建屏幕对象
screen.bgcolor('dodger blue')# 设定屏幕背景
screen.setup(width,height) # 设定屏幕宽高
screen.title("跳跃的小猫,请按awd键")
# 用来画黑色地面的
t= Turtle(visible=False) # 新建不可见海龟对象
t.penup() # 抬笔
t.pensize(50) # 画笔轨迹粗细
t.goto(-240,-150) # 坐标定位
t.pendown() # 落笔
t.goto(240,-150) # 坐标定位
akey = Key('a') # a键实例
dkey = Key('d') # d键实例
wkey = Key('w') # w键实例
fkey = Key('f') # f键实例
images = 'res/cat1.png','res/cat2.png' # 两张猫的造型图
sp = Sprite(shape=images) # 新建角色,造型序列为images
sp.dx = 0 # 水平速度
sp.dy = 0 # 垂直速度
sp.da = -1 # 加速度
sp.rotatemode(1) # 左右翻转模式
screen.listen()
zd = Sprite(1) # 子弹
zd.ht()
ufo = Sprite('res/ufo.png')
ufo.rotatemode(1) # 旋转模式为左右翻转
ufo.goto(0,120)
clock = Clock() # 新建时钟对象
while 1:
ufo.fd(6) # ufo前进
if ufo.collide(zd) and ufo.isvisible(): # 如果ufo碰到子弹
explode(ufo,['res/explosion0.png','res/explosion1.png'])
ufo.ht()
ufo.bounce_on_edge() # 碰到边缘就反弹
if zd.isvisible(): zd.addy(5) # y坐标增加5
if fkey.down(): # 如果按了f键,子弹到达sp的坐标
zd.goto(sp.xcor(),sp.ycor())
zd.show()
# 按键检测
if akey.down(): # 如果按了小写a键
sp.nextcostume() # 下一个造型
sp.dx = -5
sp.setheading(180)
elif dkey.down(): # 如果按了小写d键
sp.nextcostume() # 下一个造型
sp.dx = 5
sp.setheading(0)
else:sp.dx = 0
# 按w键跳跃
if wkey.down() and sp.ycor()==-100:
#j.play()
sp.dy = 15
sp.addy(sp.dy)
if sp.ycor() < -100 :
sp.dy = 0
sp.sety(-100)
# 坐标更新
sp.addx(sp.dx)
if sp.ycor()!= -100:
sp.addy(sp.dy)
sp.dy = sp.dy + sp.da
screen.update() # 渲染画面显示
clock.tick(60)