修复 Python 文本冒险游戏中的获胜条件并添加失败条件

花韻仙語
发布: 2025-10-19 13:22:10
原创
989人浏览过

修复 python 文本冒险游戏中的获胜条件并添加失败条件

本文旨在帮助开发者修复 Python 文本冒险游戏中获胜条件无法触发的问题,并指导如何添加失败条件。通过分析现有代码,找出获胜条件判断的错误,并提供修改后的代码示例。同时,给出一些代码风格和类型检查方面的建议,以提高代码质量和可维护性。

修复获胜条件

原代码中,inventory 列表存储的是 Item 对象,而 required_items 列表存储的是字符串类型的物品名称。因此,在 win_condition 函数中直接判断物品名称是否在 inventory 列表中,结果始终为 False。

要修复这个问题,需要修改 win_condition 函数,使其从 inventory 列表中提取出物品名称,然后再进行比较。

修改后的 win_condition 函数如下:

立即学习Python免费学习笔记(深入)”;

def win_condition(inventory, required_items):
    item_names = [item.name for item in inventory]
    for item in required_items:
        if item not in item_names:
            return False
    return True
登录后复制

这段代码首先使用列表推导式从 inventory 列表中提取出所有物品的名称,存储到 item_names 列表中。然后,遍历 required_items 列表,判断每个物品名称是否在 item_names 列表中。如果所有必需物品都在 item_names 列表中,则返回 True,否则返回 False。

此外,还需要确保 required_items 列表中的物品名称与 Item 类的 name 属性值完全一致。例如,如果 Item 类的 name 属性值为 "fire stone",则 required_items 列表中也必须包含 "fire stone",而不是 "Fire Stone" 或 "fire_stone"。

添加失败条件

添加失败条件的方法有很多种,以下提供两种常见的实现方式:

1. 基于时间限制:

可以设置一个时间限制,例如游戏开始后经过一定时间,玩家仍未收集到所有必需物品,则游戏失败。

绘蛙AI修图
绘蛙AI修图

绘蛙平台AI修图工具,支持手脚修复、商品重绘、AI扩图、AI换色

绘蛙AI修图 129
查看详情 绘蛙AI修图
import time

start_time = time.time()
time_limit = 60  # 游戏时间限制为 60 秒

if __name__ == '__main__':
    while True:
        # ... (游戏逻辑) ...

        if time.time() - start_time > time_limit:
            print('Time is up! You lose!')
            break

        if win_condition(inventory, required_items):
            print('Congratulations! You have collected all the stones and won the game!')
            break
登录后复制

2. 基于生命值:

可以设置一个生命值,玩家在游戏中遇到敌人或陷阱时,生命值会减少。当生命值降为 0 时,游戏失败。

player_health = 100

def encounter_enemy():
    global player_health
    print("You encounter a monster!")
    player_health -= 20
    print(f"You lost 20 health. Current health: {player_health}")
    if player_health <= 0:
        print("You have been defeated! Game Over!")
        return True
    return False

if __name__ == '__main__':
    while True:
        # ... (游戏逻辑) ...
        if current_room == 'square' and encounter_enemy():
            break


        if win_condition(inventory, required_items):
            print('Congratulations! You have collected all the stones and won the game!')
            break
登录后复制

代码风格和类型检查建议

为了提高代码质量和可维护性,建议遵循以下代码风格和类型检查建议:

  1. 使用 dataclasses: 使用 dataclasses 可以简化类的定义,并自动生成一些常用的方法,例如 __init__、__repr__ 等。

    from dataclasses import dataclass
    
    @dataclass
    class Item:
        name: str
        description: str
    
    @dataclass
    class Room:
        description: str
        exits: dict
        items: list[Item]
    登录后复制
  2. 代码行长度限制: 建议将代码行长度限制在 100 个字符以内,可以使用 black 工具自动格式化代码。

  3. 添加类型注解: 添加类型注解可以帮助开发者更好地理解代码,并减少运行时错误。可以使用 mypy 工具进行类型检查。

    def win_condition(inventory: list[Item], required_items: list[str]) -> bool:
        item_names = [item.name for item in inventory]
        for item in required_items:
            if item not in item_names:
                return False
        return True
    登录后复制
  4. 使用枚举类型: 对于物品名称等常量,可以使用枚举类型,以避免拼写错误。

    from enum import Enum
    
    class ItemName(Enum):
        FIRE_STONE = "fire stone"
        ICE_STONE = "ice stone"
        WATER_STONE = "water stone"
        EARTH_STONE = "earth stone"
        WIND_STONE = "wind stone"
        LIGHTNING_STONE = "lightning stone"
    
    required_items = [item.value for item in ItemName]
    登录后复制

通过以上修改和建议,可以修复 Python 文本冒险游戏中的获胜条件,并添加失败条件,提高代码质量和可维护性。

以上就是修复 Python 文本冒险游戏中的获胜条件并添加失败条件的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号