我不是挂王-用python实现燕双鹰小游戏

news2024/12/27 1:15:37

一.准备工作

1.前言提要

        作为程序员在浩瀚的数字宇宙中,常常感觉现实世界是一台精密运作的虚拟机,其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很有趣。

2.背景提要

关于燕双鹰 这个挂王,我的印象里是:

        听见燕双鹰讲话就陷入他的领域, 你的枪处于有子弹和没子弹叠加态, 如果你不开枪 枪里就有子弹,你选择开枪就会没子弹; 如果你不听他讲话,他的领域无法展开,可是却会触发燕双鹰的翻滚技能,在翻滚过程中,燕双鹰处于无敌状态 并且无法选中燕双鹰;此外,燕双鹰还有一个被动, 当你包围燕双鹰时,他会使用反包围包围你,并且触发二段隐藏被动 后手先发, 此二段被动 状态下,不管你干什么 燕双鹰总是会快你一步; 除外 燕双鹰还有一个被动技能,如果你对燕双鹰大声说话,他会掏出枪告诉你 ,他的枪声音更大......

二.代码实现

一直在完善优化,记录了3个版本的代码和运行截图。

1.初始版本

此初始版本还原设定,用文字游戏的方式还原了各种情况下, 触发燕双鹰的技能和被动的相应效果,并且加入了一定的概率

#根据设定 还原游戏,并且加入一定概率使得,更加趣味

import random
# 定义玩家状态
class Player:
    def __init__(self):
        self.has_bullet = True
        self.alive = True

# 定义燕双鹰状态
class YanShuangYing:
    def __init__(self):
        self.in_domain = False
        self.rolling = False
        self.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 = True
            print("你听见了燕双鹰讲话,陷入了他的领域!")
            if random.random() < 0.5:
                print("你决定开枪!")
                player.has_bullet = False
            else:
                print("你选择不开枪,枪里还有子弹。")

        elif choice == 2:
            yan_shuang_ying.rolling = True
            print("你不听燕双鹰讲话,他触发了翻滚技能,现在处于无敌状态且无法选中!")

        # 模拟包围情况
        if random.random() < 0.3:
            yan_shuang_ying.surrounded = True
            print("你包围了燕双鹰,但是他触发了反包围并激活二段隐藏被动!")

        # 模拟大声说话情况
        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 = False

if __name__ == "__main__":
    game()

2.优化版本

此版本增加了对玩家输入的验证,并优化了输出信息,使其更加符合游戏情境。

#增加了对玩家输入的验证,并优化了输出信息,使其更加符合游戏情境。

class YanYuanYing:
    def __init__(self):
        self.is_speaking = False
        self.has_bullet = True  # 初始状态为子弹叠加态(不开枪则有子弹)
        self.is_rolling = False
        self.is_surrounded = False
        self.is_loud_spoken_to = False
        self.health = 100  # 新增生命值属性

    def speak(self):
        print("你举枪对准燕双鹰,并且说道:'燕双鹰你插翅难逃,投降不投降?'")
        print("燕双鹰:'你的枪法不错,但还不够快。现在,你进入了我的领域。'")
        self.is_speaking = True

    def handle_shoot(self):
        if self.is_speaking:
            if self.has_bullet:
                print("你笑道:'死到临头还给你装上了?下辈子注意!'")
                print("你开枪了,但燕双鹰躲过了子弹。现在枪里没子弹了。")
                self.has_bullet = False
            else:
                print("你尝试开枪,但发现枪里没子弹。")
        else:
            print("燕双鹰没有讲话,你无法进入他的领域。他开始翻滚躲避你的攻击。")
            self.roll()

    def roll(self):
        if not self.is_speaking:
            print("燕双鹰开始翻滚,他现在是无敌的并且无法被选中。")
            self.is_rolling = True
        else:
            print("燕双鹰在讲话,他的领域已经展开,无法翻滚。")

    def handle_surround(self):
        if not self.is_rolling:
            print("你尝试半天发现使用枪击不成,看了看周围,示意手下包抄燕双鹰:'兄弟们,上!活捉燕双鹰!'")
            print("你试图包围燕双鹰,但他突然使用了反包围技能!")
            self.is_surrounded = True
            self.passive_second()
        else:
            print("燕双鹰在翻滚,无法被包围。")

    def passive_second(self):
        if self.is_surrounded:
            print("燕双鹰触发了二段隐藏被动'后手先发',他比你更快一步!")
            # 模拟燕双鹰反击,减少玩家生命值
            self.health -= 20
            print(f"燕双鹰反击,你受到伤害,生命值剩余:{self.health}")
            # 在这里可以添加更多逻辑,比如玩家行动被打断或燕双鹰进行反击
            # 为了简化,我们在这里只重置包围状态
            self.is_surrounded = False

    def handle_loud_speak(self):
        print("你大声对燕双鹰说话。")
        self.is_loud_spoken_to = True
        self.loud_response()

    def loud_response(self):
        if self.is_loud_spoken_to:
            print("燕双鹰掏出了枪,冷冷地说:'我的枪声音比你大,而且更快。'")
            # 模拟燕双鹰威慑,减少玩家生命值
            self.health -= 10
            print(f"你受到燕双鹰威慑,生命值剩余:{self.health}")
            # 重置大声说话状态(根据游戏设计可能需要)
            self.is_loud_spoken_to = False

def 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("游戏结束,感谢你的参与!")
            break
        else:
            print("无效的行动,请重新输入。")

        # 判断游戏是否结束
        if yanyuangying.health <= 0:
            print("你已死亡,游戏结束!")
            break

        # 重置一些状态以便下次行动(根据游戏设计可能需要)
        if yanyuangying.is_rolling:
            print("燕双鹰翻滚结束,回到了正常状态。")
            yanyuangying.is_rolling = False

if __name__ == "__main__":
    main()

3.修复版本

此版本增加了应对枪没子弹一直卡壳以及玩家血量低时可选择开外挂的相关逻辑

#增加了应对枪没子弹一直卡壳以及玩家血量低时可选择开外挂的相关逻辑

#增加了应对枪没子弹一直卡壳以及玩家血量低时可选择开外挂的相关逻辑
import random

class YanYuanYing:
    def __init__(self):
        self.is_speaking = False
        self.has_bullet = True  # 初始状态为子弹叠加态(不开枪则有子弹)
        self.is_rolling = False
        self.is_surrounded = False
        self.is_loud_spoken_to = False
        self.health = 100  # 新增生命值属性

    def speak(self):
        print("你举枪对准燕双鹰,并且说道:'燕双鹰你插翅难逃,投降不投降?'")
        print("燕双鹰:'你的枪法不错,但还不够快。现在,你进入了我的领域。'")
        self.is_speaking = True

    def handle_shoot(self):
        if self.is_speaking:
            if self.has_bullet:
                trigger_choice = input("你发现枪里有子弹,是否扣动扳机(是/否):").strip().lower()
                if trigger_choice == "是":
                    print("你笑道:'死到临头还给你装上了?下辈子注意!'")
                    print("你开枪了,但燕双鹰躲过了子弹。现在枪里没子弹了。")
                    self.has_bullet = False
                elif trigger_choice == "否":
                    print("你犹豫了一下,没有扣动扳机。但是此刻,枪里确实有子弹。")
                else:
                    print("无效的选择,请重新输入。")
            else:
                print("你尝试开枪,但发现枪里没子弹。枪没子弹了,你得想别的办法了!")
                # 新增逻辑,如果在领域内开枪没子弹,有一定概率燕双鹰会主动攻击,消耗玩家生命值
                if random.random() < 0.3:
                    self.health -= 15
                    print(f"燕双鹰趁你没子弹发起攻击,你受到伤害,生命值剩余:{self.health}")
        else:
            print("燕双鹰没有讲话,你无法进入他的领域。他开始翻滚躲避你的攻击。")
            self.roll()

    def roll(self):
        if not self.is_speaking:
            print("燕双鹰开始翻滚,他现在是无敌的并且无法被选中。")
            self.is_rolling = True
        else:
            print("燕双鹰在讲话,他的领域已经展开,无法翻滚。")

    def handle_surround(self):
        if not self.is_rolling:
            print("你尝试半天发现使用枪击不成,看了看周围,示意手下包抄燕双鹰:'兄弟们,上!活捉燕双鹰!'")
            print("你试图包围燕双鹰,但他突然使用了反包围技能!")
            self.is_surrounded = True
            self.passive_second()
        else:
            print("燕双鹰在翻滚,无法被包围。")

    def passive_second(self):
        if self.is_surrounded:
            print("燕双鹰触发了二段隐藏被动'后手先发',他比你更快一步!")
            # 模拟燕双鹰反击,减少玩家生命值
            self.health -= 20
            print(f"燕双鹰反击,你受到伤害,生命值剩余:{self.health}")
            # 在这里可以添加更多逻辑,比如玩家行动被打断或燕双鹰进行反击
            # 为了简化,我们在这里只重置包围状态
            self.is_surrounded = False

    def handle_loud_speak(self):
        print("你大声对燕双鹰说话。")
        self.is_loud_spoken_to = True
        self.loud_response()

    def loud_response(self):
        if self.is_loud_spoken_to:
            print("燕双鹰掏出了枪,冷冷地说:'我的枪声音比你大,而且更快。'")
            # 模拟燕双鹰威慑,减少玩家生命值
            self.health -= 10
            print(f"你受到燕双鹰威慑,生命值剩余:{self.health}")
            # 重置大声说话状态(根据游戏设计可能需要)
            self.is_loud_spoken_to = False


def main():
    print("欢迎来到燕双鹰小游戏!")
    yanyuangying = YanYuanYing()

    while True:
        # 显示生命值
        print(f"你的生命值:{yanyuangying.health}")
        if yanyuangying.health < 20:
            cheat_choice = input("你血量已不足,是否开外挂(是/否):").strip().lower()
            if cheat_choice == "是":
                print("你选择了开外挂,成功逃离燕双鹰的威胁,关闭手机永久远离燕双鹰,游戏结束!")
                break
            elif 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("游戏结束,感谢你的参与!")
            break
        else:
            print("无效的行动,请重新输入。")

        # 判断游戏是否结束
        if yanyuangying.health <= 0:
            print("你已死亡,游戏结束!")
            break

        # 重置一些状态以便下次行动(根据游戏设计可能需要)
        if yanyuangying.is_rolling:
            print("燕双鹰翻滚结束,回到了正常状态。")
            yanyuangying.is_rolling = False

if __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时,增加询问玩家是否开外挂的逻辑。选择开外挂则游戏结束,选择继续则继续游戏循环。进一步完善游戏细节和可玩性,减少异常情况。

        每次改进虽有都瑕疵,但技术探索难免。针对无敌的燕双鹰,后续我计划加上道具,提升可玩性。游戏中“开挂”一时爽,持续优化才长久,哈哈!我坚信,不断努力优化定能克服。

整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2251938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

会议直击|美格智能亮相2024紫光展锐全球合作伙伴大会,融合5G+AI共拓全球市场

11月26日&#xff0c;2024紫光展锐全球合作伙伴大会在上海举办&#xff0c;作为紫光展锐年度盛会&#xff0c;吸引来自全球的众多合作伙伴和行业专家、学者共同参与。美格智能与紫光展锐竭诚合作多年&#xff0c;共同面向5G、AI和卫星通信为代表的前沿科技&#xff0c;聚焦技术…

3. STM32_串口

数据通信的基础概念 什么是串行/并行通信&#xff1a; 串行通信就是数据逐位按顺序依次传输 并行通信就是数据各位通过多条线同时传输。 什么是单工/半双工/全双工通信&#xff1a; 单工通信&#xff1a;数据只能沿一个方向传输 半双工通信&#xff1a;数据可以沿两个方向…

RPC与HTTP调用模式的架构差异

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;和 HTTP 调用是两种常见的通信模式&#xff0c;它们在架构上有以下一些主要差异&#xff1a; 协议层面 RPC&#xff1a;通常使用自定义的二进制协议&#xff0c;对数据进行高效的序列化和反序列化&am…

Microsoft Excel如何插入多行

1.打开要编辑的excel表&#xff0c;在指定位置&#xff0c;鼠标右键点击“插入”一行 2.按住shift键&#xff0c;鼠标的光标箭头会变化成如下图所示 3.一直按住shift键和鼠标左键&#xff0c;往下拖动&#xff0c;直至到插入足够的行

【python】图像、音频、视频等文件数据采集

【python】图像、音频、视频等文件数据采集 先安装所需要的工具一、Tesseract-OCRTesseract-OCR环境变量设置验证是否配置成功示例语言包下载失败 二、ffmpeg验证是否安装成功示例 先安装所需要的工具 一、Tesseract-OCR Tesseract是一个 由HP实验室开发 由Google维护的开源的…

虚拟机docker记录

最近看了一个up的这个视频&#xff0c;感觉docker真的挺不错的&#xff0c;遂也想来搞一下&#xff1a; https://www.bilibili.com/video/BV1QC4y1A7Xi/?spm_id_from333.337.search-card.all.click&vd_sourcef5fd730321bc0e9ca497d98869046942 这里我用的是vmware安装ubu…

C++STL之vector(超详细)

CSTL之vector 1.vector基本介绍2.vector重要接口2.1.构造函数2.2.迭代器2.3.空间2.3.1.resize2.3.2.capacity 2.4.增删查找 3.迭代器失效4.迭代器分类 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f68…

深度学习实验十三 卷积神经网络(4)——使用预训练resnet18实现CIFAR-10分类

目录 一、数据加载 二、数据集类构建 三、模型构建 四、模型训练 五、模型评价及预测 附完整可运行代码&#xff1a; 实验大体步骤&#xff1a; 注&#xff1a; 在自己电脑的CPU跑代码 连接远程服务器跑代码√ 本次实验由于数据量巨大&#xff0c;我的笔记本上还没有…

【Maven Helper】分析依赖冲突案例

目录 Maven Helper实际案例java文件pom.xml文件运行抛出异常分析 参考资料 《咏鹅》骆宾王 鹅&#xff0c;鹅&#xff0c;鹅&#xff0c;曲项向天歌。 白毛浮绿水&#xff0c;红掌拨清波。 骆宾王是在自己7岁的时候就写下了这首杂言 Maven Helper A must have plugin for wor…

Android 桌面窗口新功能推进,聊一聊 Android 桌面化的未来

Android 桌面化支持可以说是 Android 15 里被多次提及的 new features&#xff0c;例如在 Android 15 QPR1 Beta 2 里就提到为 Pixel 平板引入了桌面窗口支持&#xff0c;桌面窗口允许用户在自由窗口同时运行多个应用&#xff0c;同时可以像在传统 PC 平台上一样调整这些窗口的…

【深度学习】四大图像分类网络之VGGNet

2014年&#xff0c;牛津大学计算机视觉组&#xff08;Visual Geometry Group&#xff09;和Google DeepMind公司一起研发了新的卷积神经网络&#xff0c;并命名为VGGNet。VGGNet是比AlexNet更深的深度卷积神经网络&#xff0c;该模型获得了2014年ILSVRC竞赛的第二名&#xff0c…

Pytest框架学习20--conftest.py

conftest.py作用 正常情况下&#xff0c;如果多个py文件之间需要共享数据&#xff0c;如一个变量&#xff0c;或者调用一个方法 需要先在一个新文件中编写函数等&#xff0c;然后在使用的文件中导入&#xff0c;然后使用 pytest中定义个conftest.py来实现数据&#xff0c;参…

【力扣】389.找不同

问题描述 思路解析 只有小写字母&#xff0c;这种设计参数小的&#xff0c;直接桶排序我最开始的想法是使用两个不同的数组&#xff0c;分别存入他们单个字符转换后的值&#xff0c;然后比较是否相同。也确实通过了 看了题解后&#xff0c;发现可以优化&#xff0c;首先因为t相…

HarmonyOS4+NEXT星河版入门与项目实战(23)------组件转场动画

文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、实现效果4、总结1、控件图解 这里我们用一张完整的图来汇整 组件转场动画的用法格式、属性和事件,如下所示: 2、案例实现 这里我们对上一节小鱼游戏进行改造,让小鱼在游戏开始的时候增加一个转场动画,让小鱼自…

Wireshark常用功能使用说明

此处用于记录下本人所使用 wireshark 所可能用到的小技巧。Wireshark是一款强大的数据包分析工具&#xff0c;此处仅介绍常用功能。 Wireshark常用功能使用说明 1.相关介绍1.1.工具栏功能介绍1.1.1.时间戳/分组列表概况等设置 1.2.Windows抓包 2.wireshark过滤器规则2.1.wiresh…

Vue3 开源UI 框架推荐 (大全)

一 、前言 &#x1f4a5;这篇文章主要推荐了支持 Vue3 的开源 UI 框架&#xff0c;包括 web 端和移动端的多个框架&#xff0c;如 Element-Plus、Ant Design Vue 等 web 端框架&#xff0c;以及 Vant、NutUI 等移动端框架&#xff0c;并分别介绍了它们的特性和资源地址。&#…

探索Python词云库WordCloud的奥秘

文章目录 探索Python词云库WordCloud的奥秘1. 背景介绍&#xff1a;为何选择WordCloud&#xff1f;2. WordCloud库简介3. 安装WordCloud库4. 简单函数使用方法5. 应用场景示例6. 常见Bug及解决方案7. 总结 探索Python词云库WordCloud的奥秘 1. 背景介绍&#xff1a;为何选择Wo…

Kali Linux系统一键汉化中文版及基础使用详细教程

Kali Linux系统一键汉化中文版及基础使用详细教程 引言 Kali Linux是一款基于Debian的Linux发行版&#xff0c;专为渗透测试和网络安全而设计。由于其强大的功能和丰富的工具&#xff0c;Kali Linux在安全领域得到了广泛应用。然而&#xff0c;许多用户在使用Kali Linux时会遇…

网络安全(三):网路安全协议

网络安全协议设计的要求是实现协议过程中的认证性、机密性与不可否认性。网络安全协议涉及网络层、传输层与应用层。 1、网络层安全与IPSec协议、IPSec VPN 1.1、IPSec安全体系结构 IP协议本质上是不安全的额&#xff0c;伪造一个IP分组、篡改IP分组的内容、窥探传输中的IP分…

2. STM32_中断

中断 中断是什么&#xff1a; 打断CPU执行正常的程序&#xff0c;转而处理紧急程序&#xff0c;然后返回原暂停的程序继续运行&#xff0c;就叫中断。 中断的意义&#xff1a; 中断可以高效处理紧急程序&#xff0c;不会一直占用CPU资源。如实时控制、故障处理、处理不确定…