Pygame游戏(6)
这是一个让豌豆射手不断左右摇摆,按下空格键后发射豌豆的小游戏框架
首先,我们先准备好一个带背景图的窗口,做好准备工作(解释在代码行的后面)
import pygame,sys
from pygame.locals import *
pygame.init() #初始化模块
pygame.mixer.init() #初始化音乐播放器
size = width,height = 800,460 #窗口的大小
screen = pygame.display.set_mode((size)) #创建窗口
pygame.display.set_caption("豌豆射手") #设置标题
pygame.mixer.music.load('Loonboon.mp3') #加载背景音乐
pygame.mixer.music.set_volume(0.5) #设置音量
pygame.mixer.music.play(loops=-1) #循环播放
bg = pygame.image.load('photo/bg1.jpg') #加载背景图片
bgpos = bg.get_rect() #获取背景图片的外接矩形
while True:
for event in pygame.event.get(): #获取事件列表
if event.type == QUIT: #按下窗口右上角的关闭按钮
sys.exit() #退出
elif event.type == pygame.KEYDOWN: #按下键盘
if event.key == K_ESCAPE: #按下ESC键
sys.exit() #退出
screen.blit(bg,bgpos) #绘制背景图片到窗口上
pygame.display.update() #刷新屏幕
这样,一个带背景图和循环播放音乐的窗口就创建好啦
接下去我们把豌豆射手加入进来
1、我们先知道豌豆射手是怎么左右摇摆的
这里有12张图片,控制一定的帧数,不断的从第一张切换到第十二张,就会产生动画的效果啦
注释在代码行的后面
import pygame,sys,time
from pygame.locals import *
class Bullet(pygame.sprite.Sprite): #继承精灵类
def __init__(self):
pygame.sprite.Sprite.__init__(self) #初始化精灵
position = [230,145] #子弹的发射位置
speed = [3,0] #子弹的速度
self.img = pygame.image.load('photo/sun_bullet.png') #加载子弹的图片
self.rect = self.img.get_rect() #获取子弹的外接矩形
self.rect.center = position #把子弹的中心坐标设置为position
self.speed = speed
def move(self):
self.rect = self.rect.move(self.speed) #让子弹以速度speed移动
def main():
pygame.init() #初始化模块
pygame.mixer.init() #初始化音乐播放器
size = width,height = 800,460 #窗口的大小
screen = pygame.display.set_mode((size))#创建窗口
pygame.display.set_caption("豌豆射手") #设置标题
pygame.mixer.music.load('Loonboon.mp3') #加载音乐
pygame.mixer.music.set_volume(0.5) #设置音量
pygame.mixer.music.play(loops=-1) #循环播放
bg = pygame.image.load('photo/bg1.jpg') #加载背景图片
bgpos = bg.get_rect() #获取背景图片的外接矩形
nownum = 1 #记录图片的张数
i = 0 #控制切换图片的时间间隔
group = pygame.sprite.Group() #创建精灵组
while True:
#每加5次就切换豌豆射手的图片(这是一个非常快的过程)
i = i + 1
if i%5 == 0:
nownum = nownum + 1
if nownum == 13: #如果达到了最后一张
nownum = 1 #重新回到第一张
#通过str(nownum)不断的变化,加载不同序号的图片
img = pygame.image.load('photo/Pea_Pitcher/' + str(nownum) + '.png')
#把豌豆射手的中心设在在140,110位置
pos = img.get_rect().center = 140,110
for event in pygame.event.get(): #获取事件
if event.type == QUIT: #按下窗口的关闭按钮
sys.exit() #退出
if event.type == pygame.KEYDOWN:#按下键盘
if event.key == pygame.K_ESCAPE:#按下ESC键
sys.exit() #退出
if event.key == pygame.K_SPACE: #按下空格键
group.add(b) #往精灵组里面添加子弹
b = Bullet() #实例化子弹
screen.blit(bg,bgpos) #绘制背景
screen.blit(img,pos) #绘制豌豆射手
#key = pygame.key.get_pressed() 第二种按下键盘空格实现发射的方法
#if key[K_SPACE]:
#group.add(b)
for bullet in group.sprites(): #遍历精灵组
bullet.move() #让子弹移动
screen.blit(bullet.img,bullet.rect) #绘制子弹
pygame.time.Clock().tick(60) #控制帧速率
pygame.display.update() #刷新屏幕
main()
这里用到了精灵和精灵组,具体的解释在接下去的博客会陆续讲解,这里大家只要简单的把精灵组看作成一个列表就可以了,把子弹对象放进列表,并绘制到屏幕上
好了,是不是觉得小有意思呢