当前位置: 首页 > news >正文

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)

相关文章:

  • C#结构体(Struct)详解
  • Android UI性能优化
  • 游戏辅助技术培训班课程学习【B002-中级班】
  • 以下是基于文章核心命题打造的15个标题方案,根据传播场景分类推荐
  • golang从入门到做牛马:第二十一篇-Go语言错误处理:优雅的“故障排除”
  • Tomato靶机通关攻略
  • ngrok实现内网穿透,可从外网访问本地服务
  • Spring AOP 统一问题处理
  • 【漫话机器学习系列】133.决定系数(R²:Coefficient of Determination)
  • 驻华大使夫人团探访江南铜屋 沉浸式体验中国非遗铜艺魅力
  • python机器学习theano库安装与使用
  • 本地开发MCP Server+Cline配置使用
  • 位运算刷题+总结
  • CCF-CSP备考【模拟考试系统共享】
  • 用python批量生成文件夹
  • c++介绍运算符重载九
  • 熨斗底板不平?矫平机让每寸布料都平整服帖
  • 21 | 全面测试项目功能
  • C++20 新特性总结
  • 【Vue】el-dialog的2种封装方法(父子组件双向通信),$emit触发父事件/.sync修饰符双向绑定
  • 奥运“四朝元老”华天回国参赛,伤势未愈谨慎出战全国锦标赛
  • 远洋集团:今年前4个月销售80.9亿元,同比增加13.62%
  • 香港特区立法会通过条例草案便利外地公司迁册来港
  • 呼吸医学专家杜晓华博士逝世,终年50岁
  • 一个多月来上海交大接连“牵手”三区,在这些方面进行区校合作
  • 金砖国家召开经贸联络组司局级特别会议,呼吁共同抵制单边主义和贸易保护主义