当前位置: 首页 > article >正文

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

一.前提提要

上一篇,我们用python构建了燕双鹰的对线小游戏,经过了三次版本的更新使得玩家可以自主的和燕双鹰有互动,只是依旧还是被无情碾压,这很不平衡!对与玩家而言很不公平,于是我就想 如果 可以对燕双鹰有一定几率造成伤害的话,那么 这样的博弈才会更加有趣。

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

二.修改思路

基于 Python 面向对象编程实现的文本交互小游戏,通过玩家与燕双鹰角色在不同情境下的交互操作,依据设定规则改变双方生命值,直至一方生命值归零或玩家主动退出结束游戏。

1.关键类及主要属性(YanYuanYing类)

包含燕双鹰与玩家的状态(如讲话、有无子弹、翻滚等)及生命值属性,还有玩家攻击类型、未命中次数等用于游戏逻辑判定的属性。

2.核心行为方法(YanYuanYing类内)

与交互相关speak(开启对话)、handle_shoot(处理开枪行为)、handle_surround(处理包围行为)、handle_loud_speak(处理大声说话行为),各自按规则输出相应对话并影响角色状态和双方生命值。

与攻击相关handle_player_attack,根据玩家所选攻击类型,依概率判断命中情况,计算双方伤害及反击情况,影响生命值。

三.代码实现

1.具体代码

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  # 燕双鹰的生命值属性,初始为100
        self.player_health = 100  # 新增玩家的生命值属性,初始为100
        self.player_attack_type = "普通攻击"  # 默认普通攻击,可升级为其他厉害的功法或武器
        self.miss_count = 0  # 记录玩家连续未命中次数,用于触发被动

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

    def handle_shoot(self):
        if self.is_speaking:
            if self.has_bullet:
                trigger_choice = input("你发现枪里有子弹,是否扣动扳机(1.是/2.否):").strip()
                if trigger_choice == "1":
                    print("你笑道:'死到临头还给你装上了?下辈子注意!'")
                    print("你开枪了,但燕双鹰躲过了子弹。现在枪里没子弹了。")
                    self.has_bullet = False
                    self.miss_count += 1
                elif trigger_choice == "2":
                    print("你犹豫了一下,没有扣动扳机。但是此时枪里有子弹。")
                else:
                    print("无效的选择,请重新输入。")
            else:
                print("你尝试开枪,但发现枪里没子弹。枪没子弹了,你得想别的办法了!")
                # 新增逻辑,如果在领域内开枪没子弹,有一定概率燕双鹰会主动攻击,消耗玩家生命值
                if random.random() < 0.3:
                    self.player_health -= 15
                    print(f"燕双鹰趁你没子弹发起攻击,你受到15点伤害,你的生命值剩余:{self.player_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.player_health -= 20
            print(f"燕双鹰反击,你受到20点伤害,你的生命值剩余:{self.player_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.player_health -= 10
            print(f"你受到10点燕双鹰威慑伤害,你的生命值剩余:{self.player_health}")
            # 重置大声说话状态(根据游戏设计可能需要)
            self.is_loud_spoken_to = False

    def handle_player_attack(self):
        damage = 0
        hit_rate = 0
        if self.player_attack_type == "普通攻击":
            damage = 0
            hit_rate = 0
        elif self.player_attack_type == "初级功法":
            damage = 5
            hit_rate = 0.02
        elif self.player_attack_type == "中级功法":
            damage = 12
            hit_rate = 0.05
        elif self.player_attack_type == "高级功法":
            damage = 20
            hit_rate = 0.08

        if random.random() < hit_rate:
            print(f"你的{self.player_attack_type}击中了燕双鹰,造成了{damage}点伤害!")
            self.miss_count = 0
            self.health -= damage
            print(f"燕双鹰受到{damage}点伤害,燕双鹰的生命值剩余:{self.health}")
            # 明确玩家反击让燕双鹰掉血逻辑,燕双鹰受到伤害,生命值减少
            yan_shuang_ying_health_loss = damage
            print(f"燕双鹰受到你的反击,生命值减少{yan_shuang_ying_health_loss}点!")
            # 燕双鹰有20%概率反击
            if random.random() < 0.2:
                counter_damage = damage * 0.5
                print(f"燕双鹰反击,对你造成了{counter_damage}点伤害!")
                self.player_health += counter_damage
                print(f"你受到{counter_damage}点燕双鹰反击伤害,你的生命值剩余:{self.player_health}")
        else:
            print(f"你的{self.player_attack_type}未击中燕双鹰,燕双鹰轻松躲过了攻击。")
            self.miss_count += 1
            if self.miss_count >= 3:
                print("你连续多次攻击未命中,但越挫越勇,下一次攻击必定命中!")
                self.miss_count = 0
                # 直接命中,造成伤害并判断燕双鹰反击
                damage = 0
                hit_rate = 1
                if self.player_attack_type == "初级功法":
                    damage = 5
                elif self.player_attack_type == "中级功法":
                    damage = 12
                elif self.player_attack_type == "高级功法":
                    damage = 20
                print(f"你的{self.player_attack_type}击中了燕双鹰,造成了{damage}点伤害!")
                self.health -= damage
                print(f"燕双鹰受到{damage}点伤害,燕双鹰的生命值剩余:{self.health}")
                yan_shuang_ying_health_loss = damage
                print(f"燕双鹰受到你的反击,生命值减少{yan_shuang_ying_health_loss}点!")
                if random.random() < 0.2:
                    counter_damage = damage * 0.5
                    print(f"燕双鹰反击,对你造成了{counter_damage}点伤害!")
                    self.player_health += counter_damage
                    print(f"你受到{counter_damage}点燕双鹰反击伤害,你的生命值剩余:{self.player_health}")


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

    while True:
        # 显示双方生命值
        print(f"你的生命值:{yanyuangying.player_health},燕双鹰的生命值:{yanyuangying.health}")
        if yanyuangying.player_health < 20:
            cheat_choice = input("你血量已不足,是否开外挂(1.是/2.否):").strip()
            if cheat_choice == "1":
                print("你选择了开外挂,成功逃离燕双鹰的威胁,关闭手机永久远离燕双鹰,游戏结束!")
                break
            elif cheat_choice == "2":
                print("你决定继续与燕双鹰对抗,生死在此一搏!")
            else:
                print("无效的选择,请重新输入。")

        print("请选择你的行动:")
        print("1. 讲话 2. 开枪 3. 包围 4. 大声说话 5. 使用功法 6. 退出")
        action_choice = input().strip()

        if action_choice == "1":
            yanyuangying.speak()
        elif action_choice == "2":
            yanyuangying.handle_shoot()
        elif action_choice == "3":
            yanyuangying.handle_surround()
        elif action_choice == "4":
            yanyuangying.handle_loud_speak()
        elif action_choice == "5":
            print("请选择功法或武器:")
            print("1. 普通攻击")
            print("2. 初级功法")
            print("3. 中级功法")
            print("4. 高级功法")
            attack_choice = input().strip()
            if attack_choice == "1":
                yanyuangying.player_attack_type = "普通攻击"
            elif attack_choice == "2":
                yanyuangying.player_attack_type = "初级功法"
            elif attack_choice == "3":
                yanyuangying.player_attack_type = "中级功法"
            elif attack_choice == "4":
                yanyuangying.player_attack_type = "高级功法"
            else:
                print("无效的选择,请重新输入。")
                continue
            yanyuangying.handle_player_attack()
        elif action_choice == "6":
            print("游戏结束,感谢你的参与!")
            break
        else:
            print("无效的行动,请重新输入。")

        # 判断游戏是否结束
        if yanyuangying.player_health <= 0:
            print("你已死亡,游戏结束!")
            break
        elif yanyuangying.health <= 0:
            print("燕双鹰已被击败,游戏结束!")
            break

if __name__ == "__main__":
    main()

2.调试截图

四.总结反思

        原本只是出于一时兴起,我构思想到了一个好玩的Python小游戏,没想到却深陷其中。我总是觉得时间不够用,同时也觉得自己的作品还有些简陋。但不可否认的是,这完全是我独立思考和创作的成果。接下来,我会逐步对其进行完善和优化,并且逐一记录总结反思。

        本次优化后,虽然无法战胜燕双鹰,不过好歹有了一战之力,并且整理了玩家的被动保证了一定的输出,最后就算打不过 也可以开挂遁走。现在有了一些功法,后续有时间再继续优化加一些道具等,模拟了与燕双鹰对抗的各种场景,并且后续一点点实现窗体上的动画操作,现阶段先按照文本小游戏完成代码逻辑上的实现。

        尽管我知道还有很多需要改进的地方,但我仍然希望记录下每一个版本的迭代过程,见证它的成长与蜕变。对之前版本代码感兴趣的朋友,欢迎查阅我的上一篇博客。同时,也期待各位大佬给予宝贵的建议和指导。

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

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


http://www.kler.cn/a/445696.html

相关文章:

  • 苹果手机怎么清理空间:拯救你的拥挤手机
  • Go 1.24即将到来!
  • 楚慧杯-Web
  • 【Flutter_Web】Flutter编译Web第二篇(webview篇):flutter_inappwebview如何改造方法,变成web之后数据如何交互
  • 基于w25q128的智能门禁
  • js常用方法之: 预览大图(uniapp原生方法封装)
  • 【YOLO 项目实战】(11)YOLO8 数据集与模型训练
  • JS子页面调用父页面函数,监听刷新事件
  • jdk 离线安装脚本
  • DL作业11 LSTM
  • 2024年全球安全护栏行业总体规模、主要企业国内外市场占有率及排名
  • Android上传到Minio本地存储
  • php学习资料分享
  • U-Boot的编译与烧写
  • vue el-dialog实现可拖拉
  • RabbitMQ全局流量控制
  • 基于字节大模型的论文翻译(含免费源码)
  • CPU性能优化-磁盘空间和解析时间
  • 谷歌浏览器的扩展市场使用指南
  • 共享模型之无锁(乐观锁,CAS,原子类,LongAdder)
  • postman-9.12.2–安装包及汉化
  • 轨迹优化 | 基于Savitzky-Golay滤波的无约束路径平滑(附ROS C++/Python仿真)
  • OpenGL ES 01 渲染一个四边形
  • [Unity]【图形渲染】【游戏开发】Shader数学基础4-更多矢量运算
  • PC寄存器(Program Counter Register)jvm
  • 2024年云计算的发展趋势如何?