Pygame实现射击鸭子游戏3-1

server/2025/3/13 16:46:05/

基于pygame的打鸭子游戏如图1所示。

图1 打鸭子游戏

从图1中可以看出,玩家通过鼠标控制瞄准镜的移动,点击鼠标左键射击鸭子。而鸭子则从屏幕左边向右边游动,当游到屏幕右侧边界后,重新回到屏幕左侧继续游动。

游戏需要创建两个类,一个是瞄准镜类,另一个是鸭子类。

1 瞄准镜类Crosshair的创建

pygame编程框架代码的基础上,创建瞄准镜类Crosshair。

1.1 __init__()函数

瞄准镜类Crosshair的__init__()函数代码,如图2所示。

图2 __init__()函数代码

其中,第5行代码表示瞄准镜类Crosshair的父类是pygame.sprite.Sprite,即瞄准镜类是“精灵类”的子类;第6行开始定义__init__()函数,该函数的参数img_path表示瞄准镜图片的文件名;第7行代码调用其父类即pygame.sprite.Sprite的__init__()函数,实现初始化操作;第8行代码通过pygame.image.load()函数导入瞄准镜图片;第9行代码获取图片的位置及大小;第10行代码通过pygame.mixer.Sound()实例化了音频类的对象gun_shot,对应的音频文件是“gunshot.wav”,当玩家点击鼠标左键进行射击时,会有射击的音效。

相关链接1 pygame.sprite.Sprite类及__init__()函数的相关资料,请参考

《Pygame中Sprite类的使用6-1》

1.2 shoot()函数

瞄准镜类Crosshair的shoot()函数代码,如图3所示。

图3 shoot()函数代码

当玩家点击了鼠标左键后,调用该函数播放射击的音频并且判断是否击中了鸭子。其中,第14行代码通过类属性gun_shot播放射击音频,gun_shot即为图2第10行中导入的音频实例;第15行代码通过pygame.sprite.spritecollide()函数判断是否击中了鸭子,也就是对瞄准镜精灵与鸭子精灵进行碰撞检测,第一个参数crosshair是瞄准镜类的实例,第二个参数是鸭子类的精灵组target_group,该函数的作用是判断crosshair与target_group精灵组中的任一精灵发生是否发生碰撞,因为击中鸭子后,鸭子会消失,第三个参数要设置为True,表示当发生碰撞时,删除target_group精灵组中被碰撞的精灵。

相关链接2 精灵组的相关资料,请参考

《Pygame中Sprite类的使用6-3》

1.3 update()函数

瞄准镜类Crosshair的update()函数代码,如图4所示。

图4 update()函数代码

该函数的作用是当玩家移动鼠标时,瞄准镜跟着鼠标一起移动,达到鼠标控制瞄准镜的目的。第16行代码中,将瞄准镜的中心位置rect.center设置为鼠标的位置,pygame.mouse.get_pos()函数的作用就是获取鼠标的位置。


http://www.ppmy.cn/server/174670.html

相关文章

STM32外部中断

GPIO->AFIO->EXTI->NVIC 进入NVIC是中断 不进入NVIC是事件 AFIO复用重映射 IP[59]~IP[0]分别对应中断 59~0。而每个可屏蔽中断占用的 8bit 并没有 全部使用,而是只用了高 4 位。这 4 位,又分为抢占优先级和子优先级。抢占优先级在前&#xf…

【C++】滑动窗口算法

繁花落尽,我心中仍有花落的声音。一朵,一朵,在无人的山间轻轻飘落。 前言 这是我自己学习蓝桥杯算法的第二篇博客总结。 上一期笔记是关于C的双指针算法,没看的同学可以过去看看: 【C】双指针算法-CSDN博客https://bl…

iOS侧滑返回手势冲突处理

遇到这样一个场景,本身页面vc.view添加了全屏侧滑返回手势, 但是页面中顶部有一个横向滚动的collectionView, 这个时候,我们 如果在页面总滑动横向滚动的collectionView的时候,就会执行横向collectionView的滚动&#…

分布式存储学习——HBase表结构设计

目录 1.4.1 模式创建 1.4.2 Rowkey设计 1.4.3 列族定义 1.4.3.1 可配置的数据块大小 1.4.3.2 数据块缓存 1.4.3.3 布隆过滤器 1.4.3.4 数据压缩 1.4.3.5 单元时间版本 1.4.3.6 生存时间 1.4.4 模式设计实例 1.4.4.1 实例1:动物分类 1.4.4.2 …

Python零基础学习第三天:函数与数据结构

一、函数基础 函数是什么? 想象你每天都要重复做同一件事,比如泡咖啡。函数就像你写好的泡咖啡步骤说明书,每次需要时直接按步骤执行,不用重新想流程。 # 定义泡咖啡的函数 def make_coffee(sugar1): # 默认加1勺糖 print("…

Python----计算机视觉处理(Opencv:自适应二值化,取均值,加权求和(高斯定理))

一、自适应二值化 与二值化算法相比,自适应二值化更加适合用在明暗分布不均的图片,因为图片的明暗不均,导致图片 上的每一小部分都要使用不同的阈值进行二值化处理,这时候传统的二值化算法就无法满足我们的需求 了,于是…

05.基于 TCP 的远程计算器:从协议设计到高并发实现

📖 目录 📌 前言🔍 需求分析 🤔 我们需要解决哪些问题? 🎯 方案设计 💡 服务器架构 🚀 什么是协议?为什么要设计协议? 📌 结构化数据的传输问题 …

SAIL-RK3576核心板应用方案——无人机视觉定位与地面无人设备通信控制方案

本方案以 EFISH-RK3576-SBC工控板 或 SAIL-RK3576核心板 为核心,结合高精度视觉定位、实时通信与智能控制技术,实现无人机与地面无人设备的协同作业。方案适用于物流巡检、农业植保、应急救援等场景,具备高精度定位、低延迟通信与强环境适应性…