0

0

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

花韻仙語

花韻仙語

发布时间:2025-10-19 13:22:10

|

1008人浏览过

|

来源于php中文网

原创

修复 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. 基于时间限制:

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

Supercreator
Supercreator

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开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

772

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

679

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1365

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

570

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

730

2023.08.11

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 14.1万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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