我不是挂王-用python实现燕双鹰小游戏
一.准备工作
1.前言提要
作为程序员在浩瀚的数字宇宙中,常常感觉现实世界是一台精密运作的虚拟机,其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很有趣。
2.背景提要
关于燕双鹰 这个挂王,我的印象里是:
听见燕双鹰讲话就陷入他的领域, 你的枪处于有子弹和没子弹叠加态, 如果你不开枪 枪里就有子弹,你选择开枪就会没子弹; 如果你不听他讲话,他的领域无法展开,可是却会触发燕双鹰的翻滚技能,在翻滚过程中,燕双鹰处于无敌状态 并且无法选中燕双鹰;此外,燕双鹰还有一个被动, 当你包围燕双鹰时,他会使用反包围包围你,并且触发二段隐藏被动 后手先发, 此二段被动 状态下,不管你干什么 燕双鹰总是会快你一步; 除外 燕双鹰还有一个被动技能,如果你对燕双鹰大声说话,他会掏出枪告诉你 ,他的枪声音更大......
二.代码实现
一直在完善优化,记录了3个版本的代码和运行截图。
1.初始版本
此初始版本还原设定,用文字游戏的方式还原了各种情况下, 触发燕双鹰的技能和被动的相应效果,并且加入了一定的概率
#根据设定 还原游戏,并且加入一定概率使得,更加趣味import random
# 定义玩家状态
class Player:def __init__(self):self.has_bullet = Trueself.alive = True# 定义燕双鹰状态
class YanShuangYing:def __init__(self):self.in_domain = Falseself.rolling = Falseself.surrounded = False# 游戏主函数
def game():player = Player()yan_shuang_ying = YanShuangYing()print("欢迎来到燕双鹰小游戏!")while player.alive:print("你现在面临选择:")print("1. 听燕双鹰讲话(可能陷入他的领域)")print("2. 不听燕双鹰讲话(他会触发翻滚技能)")choice = int(input("请输入你的选择(1或2):"))if choice == 1:yan_shuang_ying.in_domain = Trueprint("你听见了燕双鹰讲话,陷入了他的领域!")if random.random() < 0.5:print("你决定开枪!")player.has_bullet = Falseelse:print("你选择不开枪,枪里还有子弹。")elif choice == 2:yan_shuang_ying.rolling = Trueprint("你不听燕双鹰讲话,他触发了翻滚技能,现在处于无敌状态且无法选中!")# 模拟包围情况if random.random() < 0.3:yan_shuang_ying.surrounded = Trueprint("你包围了燕双鹰,但是他触发了反包围并激活二段隐藏被动!")# 模拟大声说话情况if random.random() < 0.2:print("你大声说话了,燕双鹰掏出枪说:不要跟我大吼大叫,劳资的枪声音更大!")# 判断玩家是否存活等情况if yan_shuang_ying.in_domain and player.has_bullet == False and random.random() < 0.3:print("燕双鹰趁你没子弹攻击了你,你死了!")player.alive = Falseif __name__ == "__main__":game()
2.优化版本
此版本增加了对玩家输入的验证,并优化了输出信息,使其更加符合游戏情境。
#增加了对玩家输入的验证,并优化了输出信息,使其更加符合游戏情境。class YanYuanYing:def __init__(self):self.is_speaking = Falseself.has_bullet = True # 初始状态为子弹叠加态(不开枪则有子弹)self.is_rolling = Falseself.is_surrounded = Falseself.is_loud_spoken_to = Falseself.health = 100 # 新增生命值属性def speak(self):print("你举枪对准燕双鹰,并且说道:'燕双鹰你插翅难逃,投降不投降?'")print("燕双鹰:'你的枪法不错,但还不够快。现在,你进入了我的领域。'")self.is_speaking = Truedef handle_shoot(self):if self.is_speaking:if self.has_bullet:print("你笑道:'死到临头还给你装上了?下辈子注意!'")print("你开枪了,但燕双鹰躲过了子弹。现在枪里没子弹了。")self.has_bullet = Falseelse:print("你尝试开枪,但发现枪里没子弹。")else:print("燕双鹰没有讲话,你无法进入他的领域。他开始翻滚躲避你的攻击。")self.roll()def roll(self):if not self.is_speaking:print("燕双鹰开始翻滚,他现在是无敌的并且无法被选中。")self.is_rolling = Trueelse:print("燕双鹰在讲话,他的领域已经展开,无法翻滚。")def handle_surround(self):if not self.is_rolling:print("你尝试半天发现使用枪击不成,看了看周围,示意手下包抄燕双鹰:'兄弟们,上!活捉燕双鹰!'")print("你试图包围燕双鹰,但他突然使用了反包围技能!")self.is_surrounded = Trueself.passive_second()else:print("燕双鹰在翻滚,无法被包围。")def passive_second(self):if self.is_surrounded:print("燕双鹰触发了二段隐藏被动'后手先发',他比你更快一步!")# 模拟燕双鹰反击,减少玩家生命值self.health -= 20print(f"燕双鹰反击,你受到伤害,生命值剩余:{self.health}")# 在这里可以添加更多逻辑,比如玩家行动被打断或燕双鹰进行反击# 为了简化,我们在这里只重置包围状态self.is_surrounded = Falsedef handle_loud_speak(self):print("你大声对燕双鹰说话。")self.is_loud_spoken_to = Trueself.loud_response()def loud_response(self):if self.is_loud_spoken_to:print("燕双鹰掏出了枪,冷冷地说:'我的枪声音比你大,而且更快。'")# 模拟燕双鹰威慑,减少玩家生命值self.health -= 10print(f"你受到燕双鹰威慑,生命值剩余:{self.health}")# 重置大声说话状态(根据游戏设计可能需要)self.is_loud_spoken_to = Falsedef main():print("欢迎来到燕双鹰小游戏!")yanyuangying = YanYuanYing()while True:# 显示生命值print(f"你的生命值:{yanyuangying.health}")action = input("请输入你的行动(讲话/开枪/包围/大声说话/退出):").strip().lower()if action == "讲话":yanyuangying.speak()elif action == "开枪":yanyuangying.handle_shoot()elif action == "包围":yanyuangying.handle_surround()elif action == "大声说话":yanyuangying.handle_loud_speak()elif action == "退出":print("游戏结束,感谢你的参与!")breakelse:print("无效的行动,请重新输入。")# 判断游戏是否结束if yanyuangying.health <= 0:print("你已死亡,游戏结束!")break# 重置一些状态以便下次行动(根据游戏设计可能需要)if yanyuangying.is_rolling:print("燕双鹰翻滚结束,回到了正常状态。")yanyuangying.is_rolling = Falseif __name__ == "__main__":main()
3.修复版本
此版本增加了应对枪没子弹一直卡壳以及玩家血量低时可选择开外挂的相关逻辑
#增加了应对枪没子弹一直卡壳以及玩家血量低时可选择开外挂的相关逻辑#增加了应对枪没子弹一直卡壳以及玩家血量低时可选择开外挂的相关逻辑
import randomclass YanYuanYing:def __init__(self):self.is_speaking = Falseself.has_bullet = True # 初始状态为子弹叠加态(不开枪则有子弹)self.is_rolling = Falseself.is_surrounded = Falseself.is_loud_spoken_to = Falseself.health = 100 # 新增生命值属性def speak(self):print("你举枪对准燕双鹰,并且说道:'燕双鹰你插翅难逃,投降不投降?'")print("燕双鹰:'你的枪法不错,但还不够快。现在,你进入了我的领域。'")self.is_speaking = Truedef handle_shoot(self):if self.is_speaking:if self.has_bullet:trigger_choice = input("你发现枪里有子弹,是否扣动扳机(是/否):").strip().lower()if trigger_choice == "是":print("你笑道:'死到临头还给你装上了?下辈子注意!'")print("你开枪了,但燕双鹰躲过了子弹。现在枪里没子弹了。")self.has_bullet = Falseelif trigger_choice == "否":print("你犹豫了一下,没有扣动扳机。但是此刻,枪里确实有子弹。")else:print("无效的选择,请重新输入。")else:print("你尝试开枪,但发现枪里没子弹。枪没子弹了,你得想别的办法了!")# 新增逻辑,如果在领域内开枪没子弹,有一定概率燕双鹰会主动攻击,消耗玩家生命值if random.random() < 0.3:self.health -= 15print(f"燕双鹰趁你没子弹发起攻击,你受到伤害,生命值剩余:{self.health}")else:print("燕双鹰没有讲话,你无法进入他的领域。他开始翻滚躲避你的攻击。")self.roll()def roll(self):if not self.is_speaking:print("燕双鹰开始翻滚,他现在是无敌的并且无法被选中。")self.is_rolling = Trueelse:print("燕双鹰在讲话,他的领域已经展开,无法翻滚。")def handle_surround(self):if not self.is_rolling:print("你尝试半天发现使用枪击不成,看了看周围,示意手下包抄燕双鹰:'兄弟们,上!活捉燕双鹰!'")print("你试图包围燕双鹰,但他突然使用了反包围技能!")self.is_surrounded = Trueself.passive_second()else:print("燕双鹰在翻滚,无法被包围。")def passive_second(self):if self.is_surrounded:print("燕双鹰触发了二段隐藏被动'后手先发',他比你更快一步!")# 模拟燕双鹰反击,减少玩家生命值self.health -= 20print(f"燕双鹰反击,你受到伤害,生命值剩余:{self.health}")# 在这里可以添加更多逻辑,比如玩家行动被打断或燕双鹰进行反击# 为了简化,我们在这里只重置包围状态self.is_surrounded = Falsedef handle_loud_speak(self):print("你大声对燕双鹰说话。")self.is_loud_spoken_to = Trueself.loud_response()def loud_response(self):if self.is_loud_spoken_to:print("燕双鹰掏出了枪,冷冷地说:'我的枪声音比你大,而且更快。'")# 模拟燕双鹰威慑,减少玩家生命值self.health -= 10print(f"你受到燕双鹰威慑,生命值剩余:{self.health}")# 重置大声说话状态(根据游戏设计可能需要)self.is_loud_spoken_to = Falsedef main():print("欢迎来到燕双鹰小游戏!")yanyuangying = YanYuanYing()while True:# 显示生命值print(f"你的生命值:{yanyuangying.health}")if yanyuangying.health < 20:cheat_choice = input("你血量已不足,是否开外挂(是/否):").strip().lower()if cheat_choice == "是":print("你选择了开外挂,成功逃离燕双鹰的威胁,关闭手机永久远离燕双鹰,游戏结束!")breakelif cheat_choice == "否":print("你决定继续与燕双鹰对抗,生死在此一搏!")else:print("无效的选择,请重新输入。")action = input("请输入你的行动(讲话/开枪/包围/大声说话/退出):").strip().lower()if action == "讲话":yanyuangying.speak()elif action == "开枪":yanyuangying.handle_shoot()elif action == "包围":yanyuangying.handle_surround()elif action == "大声说话":yanyuangying.handle_loud_speak()elif action == "退出":print("游戏结束,感谢你的参与!")breakelse:print("无效的行动,请重新输入。")# 判断游戏是否结束if yanyuangying.health <= 0:print("你已死亡,游戏结束!")break# 重置一些状态以便下次行动(根据游戏设计可能需要)if yanyuangying.is_rolling:print("燕双鹰翻滚结束,回到了正常状态。")yanyuangying.is_rolling = Falseif __name__ == "__main__":main()


三.总结反思
1.初始版本
- Player类:定义了玩家的基本状态,包括是否有子弹、是否存活等。
- YanShuangYing类:表示燕双鹰的状态,如是否处于领域内、是否翻滚、是否被包围等。
- game函数:作为游戏的主函数,循环中让玩家选择是否听燕双鹰讲话,根据选择触发燕双鹰的技能或被动效果,并加入概率因素模拟随机情况。同时判断玩家是否存活。
2.优化版本
- YanYuanYing类(重命名):新增生命值属性,并细化方法处理不同行为,如speak(讲话)、handle_shoot(开枪)、roll(翻滚)、handle_surround(包围)、passive_second(二段隐藏被动)、handle_loud_speak(大声说话)等。
- main函数:作为新的游戏主流程,循环中显示玩家生命值,接收玩家输入(讲话、开枪、包围、大声说话、退出等),验证输入后调用对应方法。同时判断游戏是否结束(生命值≤0)并重置部分状态,输出信息更加贴合游戏情境。
3.修复版本
- YanYuanYing类:在handle_shoot方法中增加询问玩家是否扣动扳机的逻辑(子弹充足时),并完善枪没子弹时的处理,如燕双鹰可能主动攻击玩家。
- main函数:当玩家生命值低于20时,增加询问玩家是否开外挂的逻辑。选择开外挂则游戏结束,选择继续则继续游戏循环。进一步完善游戏细节和可玩性,减少异常情况。
每次改进虽有都瑕疵,但技术探索难免。针对无敌的燕双鹰,后续我计划加上道具,提升可玩性。游戏中“开挂”一时爽,持续优化才长久,哈哈!我坚信,不断努力优化定能克服。
整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!
相关文章:
我不是挂王-用python实现燕双鹰小游戏
一.准备工作 1.前言提要 作为程序员在浩瀚的数字宇宙中,常常感觉现实世界是一台精密运作的虚拟机,其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很…...
Java:反射、注解
文章目录 1. 反射1-1. 获取Class对象的三种方式1-2. 获取类的构造器、实例化对象1-3. 获取类的成员变量1-4. 获取类的成员方法 2. 注解2-1. 元注解2-2. 解析注解 1. 反射 反射:加载类,并允许以编程的方式解剖类中的各种成员变量、方法、构造器。 1-1. …...
Java 通过枚举类减少if else
目录 一. 案例1二. 案例2三. 案例3四. 案例4 枚举类聚合封装消息 一. 案例1 涉及到EnumMap的实际使用 ⏹定义一个枚举类,用来表示日本的各种支付方法对应的code import com.fasterxml.jackson.annotation.JsonFormat;// 让jackson将前台的数据封装数据到枚举类中 J…...
单链表---移除链表元素
对于无头单向不循环链表,给出头结点head与数值val,删除链表中数据值val的所有结点 #define ListNodeDataType val struct ListNode { struct ListNode* psll;ListNodeDataType val; } 方法一---遍历删除 移除所有数值为val的链表结点,…...
认识redis 及 Ubuntu安装redis
文章目录 一. redis概念二. redis应用场景二. redis的特性四. 使用Ubuntu安装redis 一. redis概念 redis 是在内存中存储数据的中间件, 用在分布式系统 redis是客户端服务器结构的程序, 客户端服务器之间通过网络来通信 二. redis应用场景 redis可用作数据库 类似MySQL, 但…...
Java开发网络安全常见问题
1、敏感信息明文传输 用户敏感信息如手机号、银行卡号、验证码等涉及个人隐私的敏感信息不通过任何加密直接明文传输。 如下图中小红书APP 的手机短信验证码登录接口,此处没有对用户手机号和验证码等信息进行加密传输,可以很简单的截取并开展一些合法的…...
C#基础之委托,事件
文章目录 1 委托1.1 简介1.2 操作使用1.2.1 声明委托(Delegate)1.2.2 实例化委托(Delegate)1.2.3 直接调用和invoke1.2.4 Invoke 和 BeginInvoke 1.3 委托的多播1.4 委托的匿名和lambda1.4.1 匿名方法1.4.2 lambda 表达式 1.5 内置…...
nginx配置静态资源的访问
比如静态资源图片位于/mnt/software/nginx/html/static/images目录下,那么nginx.conf中的配置则为: # 静态文件目录 location /static/images/ { root /mnt/software/nginx/html; try_files $uri $uri/ 404; #找不到时提示404 …...
JS的魔法三角:constructor、prototype与__proto__
在JavaScript中,constructor、prototype和__proto__是与对象创建和继承机制紧密相关的三个概念。理解它们之间的关系对于掌握JavaScript的面向对象编程至关重要。下面将详细介绍这个魔法三角: 1. constructor 定义:constructor是一个函数&am…...
CA系统(file.h---申请认证的处理)
#pragma once #ifndef FILEMANAGER_H #define FILEMANAGER_H #include <string> namespace F_ile {// 读取文件,返回文件内容bool readFilename(const std::string& filePath);bool readFilePubilcpath(const std::string& filePath);bool getNameFro…...
matlab显示sin二维图
1,新建脚本 2、保存脚本 3、脚本命令:clc 清除 脚本命令的信息 clrear all 清除全部 4工作区内容:变量啥的 x0:0.001:2*pi%% 开始 精度 中值 ysin(x) y1cos(x) figure%%产生一个屏幕 plot(x,y)%%打印坐标 title(ysin(x))%%标题 xlabel(…...
验证 kubelet 服务已经停止并且不再生成错误日志
要验证 kubelet 服务已经停止并且不再生成错误日志,可以按照以下步骤进行操作: 1. 检查 kubelet 服务状态 首先,确认 kubelet 服务已经停止。 Bash 深色版本 sudo systemctl status kubelet 你应该看到类似以下的输出,表示服…...
【Linux】进程控制-----进程替换
目录 一、为什么要进行进程替换: 二、进程替换的原理: 三、exec家族: 1、execl: 2、execlp: 3、execv: 4、execvp: 5、execle和execve 编辑 putenv: 一、为什么要进行进程…...
安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本
安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本。 原因是:当前操作系统版本为Windows Server 2016 Standard版本,其自带的Microsoft .NET Framework 版本为4.6太低,不满足要求。 根据报错的提示,点击链接…...
使用ECharts创建带百分比标注的环形图
在数据可视化领域,环形图是一种非常有效的图表类型,它能够清晰地展示各部分与整体的关系。今天,我们将通过ECharts来创建一个带百分比标注的环形图,并详细解释如何实现这一效果。 1. 数据准备 首先,我们定义了一些基础…...
学习threejs,设置envMap环境贴图创建反光效果
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.CubeTextureLoader 立…...
go语言里的mkdir mkdirall有什么区别?
在Go语言中,os.Mkdir 和 os.MkdirAll 都是用来创建目录的函数,但它们之间存在一些关键的区别。 ### os.Mkdir - **功能**:os.Mkdir 用于创建一个单一的目录。如果该目录已经存在,则会返回一个错误。 - **参数**: - na…...
使用Python OpenCV实现图像形状检测
目录 一、环境准备 二、读取和预处理图像 读取图像 灰度化 滤波去噪 三、边缘检测 四、查找轮廓 五、绘制轮廓 六、形状分类 七、显示结果 八、完整代码示例 九、总结 图像形状检测是计算机视觉领域中的一项关键技术,广泛应用于工业自动化、机器人视觉、医学图像处…...
继上一篇,设置弹框次数以及自适应图片弹框,部分机型(vivo)老手机不显示的问题
上一篇写的本来测试好多型号都无事, 今天下午公司的战斗机vivo横空冒出… 晕 弹框直接显示都出不来了,现在还有用这种老的机型的,但是没办法咯~ 前端遇到这种兼容性的问题就要勇于解决 主要解决了这几点: // 添加图片加载事件 <imgv-if"imageUrl":src"image…...
基于RISC-V 的代理内核实验(使用ub虚拟机安装基本环境)
1.安装支撑软件 第一步,安装依赖库 RISC-V交叉编译器的执行仍然需要一些本地支撑软件包,可使用以下命令安装: $ sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bis…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...



