河北固安建设局网站/搜索引擎的关键词优化
系列文章目录
星际争霸之小霸王之小蜜蜂(十)--鼠道
星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾
星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫
星际争霸之小霸王之小蜜蜂(七)--消失的子弹
星际争霸之小霸王之小蜜蜂(六)--让子弹飞
星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速
星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来
目录
系列文章目录
文章目录
前言
一、基本思路
二、消灭老鼠
三、补充老鼠
四、重构
总结
前言
昨天我们已经创建了一大群老鼠,今天我们将一只只消灭他们,这让我想起了除四害。
一、基本思路
玩过游戏的都知道,游戏里有个名词叫碰撞体积,当我们玩躲避类游戏时,希望自己操控的角色碰撞体积越小越好,这样不容易被击中,而玩射击类游戏时,希望子弹的碰撞体积越大越好,这样更容易击中目标,肉眼区别就是大和小,比如DOTA里面的屠夫碰撞体积就大,隐刺碰撞体积就小。
回到今天我们要实现的内容,让子弹消灭老鼠,那么我们就需要知道子弹的碰撞体积和小老鼠的碰撞体积,当他们接触时,双方都自爆消失。我们可以以子弹为中心,每次调整子弹位置前判断是否碰到老鼠,也可以以老鼠为中心,判断是否遇到子弹。书上是以子弹为中心写的,那么我也按照子弹中心写。
二、消灭老鼠
首先我们写一个函数,判断子弹的rect和小老鼠的rect有没有交集,并创建一个字典,将消失的子弹和小老鼠存进去,为后期统计做准备。
按照上面的思路,我们修改game_functions模块里面update_bullets()函数,在改变子弹前增加代码:
def update_bullets(bullets,aliens):collisions = pygame.sprite.groupcollide(bullets,aliens,True,True)bullets.update()for bullet in bullets.copy():if bullet.rect.bottom <= 0:bullets.remove(bullet)
我们发现代码比我们想象的要容易,本来以为会写一个嵌套循环,再加上判断语句,结果书上是直接调用pygame里面的函数,不要太方便。
pygame.sprite.groupcollide()函数用于查找在两个组之间发生碰撞的所有精灵。它接受四个参数:group1、group2、dokill1和dokill2。其中,group1和group2是要检查的精灵组,dokill1和dokill2是布尔值,用于指定是否在碰撞后删除精灵。如果dokill1和dokill2都为True,则在碰撞后删除精灵;如果其中一个为True,则在碰撞后保留精灵 。
我们来看看这个好用的函数的效果。
三、补充老鼠
这个游戏本质还是一个逻辑比较简单的游戏,如果单纯的消灭屏幕上的老鼠游戏有点过于简单,如何在增加游戏复杂性和代码难度的基础上增加游戏性,书上给出的策略是增加更多的老鼠,当老鼠被全部消灭后,再产生一批老鼠,最后是以消灭的老鼠数量记分。
要实现上述功能,我们也只需要增加一个判断,当aliens为空时,我们就调用create_fleet函数,生成一批新的老鼠,我们在子弹和老鼠碰撞消失后增加判断代码:
def update_bullets(new_setting,screen,bullets,aliens):collisions = pygame.sprite.groupcollide(bullets,aliens,True,True)if len(aliens)==0:bullets.empty()create_fleet(new_setting,screen,aliens)bullets.update()for bullet in bullets.copy():if bullet.rect.bottom <= 0:bullets.remove(bullet)
我们可以看出,我们再创建新老鼠前将多余的子弹清空了,避免产生一些视觉上的错误,为了测试我们代码的运行效果,我将老鼠的数量减少,子弹的数量和速度增加了。
self.bullet_speed_factor = 0.5self.bullet_width = 2self.bullet_hight = 5self.bullet_color = 60,60,60self.bullets_allowed = 20self.alien_speed_factor = 0.2self.fleet_drop_speed = 20self.fleet_direction = 1
我们来测试一下效果:
四、重构
又到了重构时间,专业的就是专业,我是永远不会想到把代码重构的,能实现就行了,还改来改去。
书上是重构update_bullets(),将子弹和外星人碰撞的代码移出去,放在新建的函数check_bullet_alien_collisions()中(ps:名字真长)
def update_bullets(new_setting,screen,bullets,aliens):check_bullet_alien_collisions(new_setting,screen,bullets,aliens)bullets.update()for bullet in bullets.copy():if bullet.rect.bottom <= 0:bullets.remove(bullet)def check_bullet_alien_collisions(new_setting,screen,bullets,aliens):collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)if len(aliens) == 0:bullets.empty()create_fleet(new_setting, screen, aliens)
总结
截至目前,感觉终于完成了主要部分,加油!
相关文章:

星际争霸之小霸王之小蜜蜂(十一)--杀杀杀
系列文章目录 星际争霸之小霸王之小蜜蜂(十)--鼠道 星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾 星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫 星际争霸之小霸王之小蜜蜂(七)--消失…...

腾讯云免费SSL证书申请流程_每年免费50个HTTPS证书
2023腾讯云免费SSL证书申请流程,一个腾讯云账号可以申请50张免费SSL证书,免费SSL证书为DV证书,仅支持单一域名,申请腾讯云免费SSL证书3分钟即可申请成功,免费SSL证书品牌为TrustAsia亚洲诚信,腾讯云百科分享…...

C#上位机开发目录
C#上位机序列1: 多线程(线程同步,事件触发,信号量,互斥锁,共享内存,消息队列) C#上位机序列2: 同步异步(async、await) C#上位机序列3: 流程控制(串行,并行,…...

网络通信基础
IP地址 使用ip地址来描述网络上一个设备所在的位置 端口号 区分一个主机上不同的程序,一个网络程序,在启动的时候,都需要绑定一个或者多个端口号,后续的通信过程都需要依赖端口号来进行展开的,mysql默认的端口号是3306 协议 描述了网络通信传输的数据的含义,表示一种约定,…...

框架分析(10)-SQLAlchemy
框架分析(10)-SQLAlchemy 专栏介绍SQLAlchemy特性分析ORM支持数据库适配器事务支持查询构建器数据库连接池事务管理器数据库迁移特性总结 优缺点优点强大的对象关系映射支持多种数据库灵活的查询语言自动管理数据库连接支持事务管理易于扩展和定制 缺点学…...

Linux/Windows中根据端口号关闭进程及关闭Java进程
目录 Linux 根据端口号关闭进程 关闭Java服务进程 Windows 根据端口号关闭进程 Linux 根据端口号关闭进程 第一步:根据端口号查询进程PID,可使用如下命令 netstat -anp | grep 8088(以8088端口号为例) 第二步:…...

基于springboot实现了后台定时统计数据报表并将数据生成excel文件作为附件,然后通过邮件发送通知的功能
概述 本例子基于springboot实现了后台定时统计数据报表并将数据生成excel文件作为附件,然后通过邮件发送通知的功能。 详细 一、准备工作 1、首先注册两个邮箱,一个发送邮箱,一个接收邮箱。 2、发送邮箱开启IMAP/SMTP/POP3服务,…...

opencv 提取选中区域内指定hsv颜色的水印
基于《QT 插件化图像算法研究平台》做的功能插件。提取选中区域内指定hsv颜色的水印。 《QT 插件化图像算法研究平台》有个HSV COLOR PICK功能,可以很直观、方便地分析出水印 的hsv颜色,比如, 蓝色:100,180,0,255,100,255。 然后利用 opencv …...

如何理解张量、张量索引、切片、张量维度变换
Tensor 张量 Tensor,中文翻译“张量”,是一种特殊的数据结构,与数组和矩阵非常相似。在 PyTorch 中,使用张量对模型的输入和输出以及模型的参数进行编码。 Tensor 是一个 Python Class。PyTorch 官方文档中定义“Tensor࿰…...

基于SpringBoot的汽车租赁系统
基于SpringBootVue的汽车租赁系统,前后端分离 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven 角色:管理员、业务员、用户 管理员 用户管理…...

怎么做手机App测试?app测试详细流程和方法介绍
APP测试 1、手机APP测试怎么做? 手机APP测试,主要针对的是android和ios两大主流操作系统,主要考虑的就是功能性、兼容性、稳定性、易用性(也就是人机交互)、性能。 手机APP测试前的准备: 1.使用同类型的…...

【计算机网络】网络编程接口 Socket API 解读(1)
Socket 是网络协议栈暴露给编程人员的 API,相比复杂的计算机网络协议,API 对关键操作和配置数据进行了抽象,简化了程序编程。 本文讲述的 socket 内容源自 Linux 发行版 centos 9 上的 man 工具,和其他平台(比如 os-x …...

IGES在线查看与转换
IGES 格式最初由美国空军开发并于 1980 年发布。该格式是集成计算机辅助制造 (ICAM) 项目的产品,该项目旨在通过集成操作来降低制造成本。 IGES 文件旨在允许航空航天相关设计在不同平台上传输,同时将数据丢失降至最低。 在 IGES 格式出现之前,不同公司创建的 CAD 和计算机…...

【Vue3-Vite】Vite配置--路径别名配置
路径别名配置 使用 代替 src Vite配置 // vite.config.ts import {defineConfig} from vite import vue from vitejs/plugin-vueimport path from pathexport default defineConfig({plugins: [vue()],resolve: {alias: {"": path.resolve("./src") // …...

道可云元宇宙每日资讯|第二届世界元宇宙大会将在嘉定安亭举行
道可云元宇宙每日简报(2023年9月6日)讯,今日元宇宙新鲜事有: 第二届世界元宇宙大会将于9月20日在嘉定安亭举行 元起嘉定,虚实相生,产业赋能。由中国仿真学会、中国指挥与控制学会和北京理工大学共同主办&a…...

Python for 循环语句
Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。 语法: for循环的语法格式如下: for iterating_var in sequence:statements(s) 流程图: 实例 #!/usr/bin/python # -*- coding: UTF-8 -*- for letter in …...

iOS脱壳之frida-ios-dump
frida-ios-dump介绍 该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件,适合现iOS11版本之后的越狱手机使用。 下载 https://github.com/AloneMonkey/frida-ios-dump环境安装 电脑环境安装 win和Mac 环境一样都是…...

rust中的reborrow和NLL
reborrow 我们看下面这段代码 fn main() {let mut num 123;let ref1 &mut num; // 可变引用add(ref1); // 传递给 add 函数println!("{}", ref1); // 再次使用ref1 }fn add(num: &mut i32) {println!("{}", *num); }我们…...

Java设计模式:一、六大设计原则-04:迪米特法则
文章目录 一、定义:迪米特法则二、模拟场景:迪米特法则原则三、违背方案:迪米特法则原则3.1 工程结构3.2 学生、老师、校长类3.2.1 学生类3.2.2 老师类3.2.3 校长类 3.3 单元测试 四、改善代码:迪米特法则原则4.1 工程结构4.2 学生…...

使用docker部署pg数据库
使用 Docker 部署 PostgreSQL 数据库是一种常见的做法,它提供了方便、可移植和可重复的方式来运行数据库。下面是一个简单的示例,用于在 Docker 中部署 PostgreSQL 数据库: 首先,确保您已经安装了 Docker 并正确配置了 Docker 环境…...

Json“牵手”亚马逊商品详情数据方法,亚马逊商品详情API接口,亚马逊API申请指南
亚马逊平台是美国最大的一家网络电子商务公司,亚马逊公司是1995年成立,刚开始只做网上书籍售卖业务,后来扩展到了其他产品。现在已经是全世界商品品种最多的网上零售商和第二互联网公司,亚马逊是北美洲、欧洲等地区的主流购物平台…...

springboot封装查询快递物流
目录 一、ApiClient代码解读二、ApiService代码解读三、HomeController代码解读四、整体代码五、结果展示 一、ApiClient代码解读 这是一个简单的Spring Boot的RestTemplate客户端,用于执行HTTP请求。 首先,这个类被Component注解标记,这意味…...

从C语言到C++_37(特殊类设计和C++类型转换)单例模式
目录 1. 特殊类设计 1.1 不能被拷贝的类 1.2 只能在堆上创建的类 1.3 只能在栈上创建的类 1.4 不能被继承的类 1.5 只能创建一个对象的类(单例模式)(重点) 1.5.1 饿汉模式 1.5.2 懒汉模式 2. 类型转换 2.1 static_cast 2.2 reinterpret_cast 2.3 const_cast 2.4 d…...

go 使用systray 实现托盘和程序退出
1.先 go get 安装 包 go get github.com/getlantern/systray2.使用的代码 func main() {fmt.Println("开始")systray.Run(onReady, onExit) }func onReady() {systray.SetIcon(icon.Data)systray.SetTitle("Awesome App")systray.SetTooltip("Prett…...

Electron之单例+多窗口
Electron之单例多窗口 Electron 24 React 18 单例可以通过app.requestSingleInstanceLock实现,多窗口可以简单通过路由来实现 单例 const gotTheLock app.requestSingleInstanceLock(); if (!gotTheLock) {app.quit(); } else {app.on(second-instance, (event, …...

A Survey of Knowledge-Enhanced Pre-trained Language Models
本文是LLM系列的文章,针对《A Survey of Knowledge-Enhanced Pre-trained Language Models》的翻译。 知识增强的预训练语言模型综述 摘要1 引言2 背景3 KE-PLMs用于NLU4 KE-PLMs用于NLG5 未来的方向5.1 整合来自同质和异质来源的知识5.2 探索多模态知识5.3 提供可…...

动态规划(选择)
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 作为队伍的核心,forever97很受另外两个队友的尊敬。 Trote_w每天都要请forever97吃外卖,但很不幸的是宇宙中心forever97所在的学校周围只有3家forever97爱吃的外卖。 如果T…...

IIS WebDAV配置,https绑定及asp设置
IIS支持标准CGI,因此可以用程序语言针对STDIN和STDOUT开发。 IIS CGI配置和CGI程序FreeBasic, VB6, VC 简单样例_Mongnewer的博客-CSDN博客 IIS支持脚本解释CGI,因此可以用脚本语言针对STDIN和STDOUT开发。 IIS perl python cbrother php脚本语言配置…...

【计算机视觉项目实战】中文场景识别
✨专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。 👨&…...

Java 中 Map 初始化的几种方法
# 传统方式 Map<String, String> map new HashMap<>(); map.put("k1", "v1"); map.put("k2", "v2");# java8新特性-双括号初始化 Map<String, String> map1 new HashMap<>() {{put("k1", "v…...