Pygame实现射击鸭子游戏3-3
6 游戏配置设置
游戏配置设置的代码如图10所示。
图10 游戏配置设置的代码
其中,第32行代码初始化pygame;第33-34行代码设置了屏幕的宽度和高度;第35行代码设置了鸭子的数量;第36行代码创建屏幕;第37行代码设置屏幕的标题;第38行代码隐藏鼠标;第39-40行代码设置游戏的刷新率(帧率)。
注意1 pygame.init()代码位置必须在定义鸭子类的代码之前,因为在定义鸭子类的代码中有导入音频的代码,需要对音频进行初始化。
7 设置游戏背景
在while True循环中,使用图11所示代码设置游戏背景。
图11 设置游戏背景的代码
其中,screen是图10中创建的屏幕,bg_img是图9中导入的背景图片,bg_img已经设置为与屏幕一样大,因此其显示的起始位置为(0,0)。
8 通过精灵组更新并显示精灵
通过精灵组显示并更新精灵的代码如图12所示。
图12 通过精灵组显示并更新精灵的代码
其中,第62-63行代码更新并显示鸭子;第64-65行代码更新并显示瞄准镜。
9 设置游戏刷新率
设置游戏刷新率的代码如图13所示。
图13 设置游戏刷新率的代码
其中,fpsClock和FPS是图10中定义的变量。
相关链接3 游戏刷新率的相关资料,请参考
《Pygame实现动画效果2-2》
10 添加鼠标点击的响应
在游戏中,玩家通过点击鼠标左键进行射击,因此需要添加鼠标点击的响应,代码如图14所示。
图14 鼠标点击响应的代码
第60行代码判断玩家是否点击了鼠标左键;如果是,则第61行代码通过瞄准镜类的实例crosshair调用其shoot()方法,该方法如图3所示,首先播放射击音效,之后判断是否击中鸭子,并且使被击中的鸭子消失。
11 完整代码
打鸭子的完整代码如下所示。
import pygame
import os
from pygame.locals import *
import random
pygame.init()
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
TARGET_NUM = 20
screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
pygame.display.set_caption('射击游戏')
pygame.mouse.set_visible(False)
FPS = 60
fpsClock = pygame.time.Clock()
class Crosshair(pygame.sprite.Sprite):
def __init__(self, img_path):
super().__init__()
self.image = pygame.image.load(img_path)
self.rect = self.image.get_rect()
self.gun_shot = pygame.mixer.Sound('gunshot.wav')
def shoot(self):
self.gun_shot.play()
pygame.sprite.spritecollide(crosshair, target_group, True)
def update(self):
self.rect.center = pygame.mouse.get_pos()
class Target(pygame.sprite.Sprite):
def __init__(self, img_path, x, y):
super().__init__()
self.image = pygame.image.load(img_path)
self.rect = self.image.get_rect()
self.rect.center = (x, y)
def update(self):
self.rect.move_ip(random.randint(0,10),0)
if self.rect.left > SCREEN_WIDTH:
self.rect.left = 0
crosshair = Crosshair('crosshair_blue_small.png')
crosshair_group = pygame.sprite.Group()
crosshair_group.add(crosshair)
target_group = pygame.sprite.Group()
for i in range(TARGET_NUM):
x = random.randint(0, SCREEN_WIDTH)
y = random.randint(0, SCREEN_HEIGHT)
target = Target('duck_yellow.png', x, y)
target_group.add(target)
bg_img = pygame.image.load('bg_wood.png')
bg_img = pygame.transform.scale(bg_img, (SCREEN_WIDTH, SCREEN_HEIGHT))
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
os.sys.exit()
if event.type == MOUSEBUTTONDOWN:
crosshair.shoot()
screen.blit(bg_img, (0, 0))
target_group.update()
target_group.draw(screen)
crosshair_group.update()
crosshair_group.draw(screen)
pygame.display.update()
fpsClock.tick(FPS)