我不是挂王-用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…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...