You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化文本冒险游戏中的多选项look命令实现?

优化文本冒险游戏Look命令的几种方案

针对你现在用一堆elif处理look命令的情况,有几个更简洁易维护的优化方向:

1. 合并相同输出的命令判断

把触发相同文本的命令放到一个集合里,用in关键字判断,省去重复的elif块:

from colorama import Back, Fore, Style

# 把输出相同的命令归为一组
river_related_looks = {"look river", "look river bank"}
water_look = "look water"

if choice in river_related_looks:
    print(f"{Back.BLUE}河水浑浊不清。{Style.RESET_ALL}")
    print(f"{Fore.YELLOW}河里有什么东西在反射阳光。{Style.RESET_ALL}")
elif choice == water_look:
    print(f"{Back.BLUE}河水浑浊不清。{Style.RESET_ALL}")
    print(f"{Fore.YELLOW}河里有什么东西。{Style.RESET_ALL}")

这种方式比一堆elif清爽很多,后续要加同类命令直接往集合里加就行。

2. 用字典做命令-输出映射(更适合扩展)

如果后续要加大量look命令,用字典映射是最优解,把每个命令对应到它的输出内容,灵活性拉满:

from colorama import Back, Fore, Style

# 提取重复的输出片段,避免冗余
murky_water = f"{Back.BLUE}河水浑浊不清。{Style.RESET_ALL}"
river_sun_reflect = f"{Fore.YELLOW}河里有什么东西在反射阳光。{Style.RESET_ALL}"
river_something = f"{Fore.YELLOW}河里有什么东西。{Style.RESET_ALL}"

# 定义命令与输出的映射关系
look_commands = {
    "look river": [murky_water, river_sun_reflect],
    "look river bank": [murky_water, river_sun_reflect],
    "look water": [murky_water, river_something]
}

# 执行命令逻辑
output = look_commands.get(choice)
if output:
    for line in output:
        print(line)
else:
    print("你不知道要看什么。")  # 处理无效命令

后续新增命令只需要往字典里加键值对就行,完全不用改判断逻辑,维护起来特别方便。

3. 支持模糊匹配(进阶玩法)

如果想让玩家输入更灵活(比如输入"look at river"也能触发),可以拆分命令关键词,判断是否包含目标对象:

from colorama import Back, Fore, Style

murky_water = f"{Back.BLUE}河水浑浊不清。{Style.RESET_ALL}"
river_sun_reflect = f"{Fore.YELLOW}河里有什么东西在反射阳光。{Style.RESET_ALL}"
river_something = f"{Fore.YELLOW}河里有什么东西。{Style.RESET_ALL}"

choice_parts = choice.lower().split()
if "river" in choice_parts:
    print(murky_water)
    print(river_sun_reflect)
elif "water" in choice_parts:
    print(murky_water)
    print(river_something)

这样玩家输入的命令容错率更高,游戏体验更好。

内容的提问来源于stack exchange,提问作者Python_enjoyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:30:48