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

如何为文本RPG迷你游戏实现while循环以区分输赢跳转逻辑?

问题解决:迷你游戏胜负分支逻辑实现

你的核心问题是当前代码未区分游戏胜负后的分支流程,递归调用结束后会直接执行后续主剧情代码。下面改用while循环重构逻辑,实现"赢则进主剧情,输则回退出界面"的需求:

修改后的完整代码

import time, os
import ascii as a
import typewriter as typewriter

def clear_console():
    os.system('clear')

def press_enter():
    print("\n\npress enter to continue.")
    input()

# 颜色定义保留
black = "\033[0;30m"
red = "\033[0;31m"
green = "\033[0;32m"
yellow = "\033[0;93m"
blue = "\033[0;34m"
magenta = "\033[0;35m"
cyan = "\033[0;36m"
white = "\033[0;37m"
bright_black = "\033[0;90m"
bright_red = "\033[0;91m"
bright_green = "\033[0;92m"
bright_yellow = "\033[0;93m"
bright_blue = "\033[0;94m"
bright_magenta = "\033[0;95m"
bright_cyan = "\033[0;96m"
bright_white = "\033[0;97m"

# 初始引导
print("")
typewriter.write(a.evil_pixie_art, 0.0001)
press_enter()
clear_console()

def init_game():
    # 初始化游戏变量,替代原main函数,不用全局变量
    word_to_guess = "treasure"
    return {
        "word": list(word_to_guess),
        "display": ['_'] * len(word_to_guess),
        "already_guessed": [],
        "count": 0,
        "limit": 7
    }

def hangman():
    game_data = init_game()
    word = game_data["word"]
    display = game_data["display"]
    already_guessed = game_data["already_guessed"]
    count = game_data["count"]
    limit = game_data["limit"]

    # 用while循环代替递归,持续运行直到胜负分晓
    while count < limit and '_' in display:
        guess = input(f"the secret code: {' '.join(display)} enter a letter: \n").strip()
        
        # 输入校验
        if not guess.isalpha() or len(guess) != 1:
            print("This is not the correct input! Please enter letters only...\n")
            continue
        guess = guess.lower()
        
        # 已猜过的字母
        if guess in already_guessed:
            print("try again...\n")
            continue
        
        # 猜对字母
        if guess in word:
            already_guessed.append(guess)
            # 更新所有匹配的位置(修复原代码只更新第一个匹配字母的bug)
            for idx, char in enumerate(word):
                if char == guess:
                    display[idx] = guess
            print(' '.join(display) + "\n")
        # 猜错字母
        else:
            count += 1
            already_guessed.append(guess)
            # 绘制刽子手图案
            if count == 1:
                time.sleep(1)
                print("   _____ \n"
                      "  |     | \n"
                      "  |     |\n"
                      "  |     | \n"
                      "  |     O \n"
                      "  |    /|\ \n"
                      "  |    / \ \n"
                      "__|__      \n")
                print(f"Wrong guess. {limit - count} guesses remaining\n")
            elif count == 2:
                time.sleep(1)
                print("   _____ \n"
                      "  |     | \n"
                      "  |     |\n"
                      "  |     | \n"
                      "  |     O \n"
                      "  |    /|\ \n"
                      "  |      \ \n"
                      "__|__\n")
                print(f"Wrong guess. {limit - count} last guess remaining\n")
            elif count == 3:
                time.sleep(1)
                print("   _____ \n"
                      "  |     | \n"
                      "  |     |\n"
                      "  |     | \n"
                      "  |     O \n"
                      "  |    /|\ \n"
                      "  |      \n" 
                      "__|__\n")
                print(f"Wrong guess. {limit - count} guesses remaining\n")
            elif count == 4:
                time.sleep(1)
                print("   _____ \n"
                      "  |     | \n"
                      "  |     | \n"
                      "  |     | \n"
                      "  |     O \n"
                      "  |    /| \n"
                      "  |       \n"
                      "__|__\n")
                print(f"Wrong guess. {limit - count} guesses remaining\n")
            elif count == 5:
                time.sleep(1) 
                print("   _____ \n"
                      "  |     | \n"
                      "  |     |\n"
                      "  |     | \n"
                      "  |     O \n"
                      "  |     | \n"
                      "  |       \n"
                      "__|__\n")
                print(f"Wrong guess. {limit - count} guesses remaining\n")
            elif count == 6:
                time.sleep(1)
                print("   _____ \n"
                      "  |     | \n"
                      "  |     |\n"
                      "  |     | \n"
                      "  |     O \n"
                      "  |      \n"
                      "  |      \n" 
                      "__|__\n")
                print(f"Wrong guess. {limit - count} guesses remaining\n")
            elif count == 7:
                time.sleep(1)
                print("   _____ \n"
                      "  |     | \n"
                      "  |     | \n"
                      "  |     | \n"
                      "  |       \n"
                      "  |       \n"
                      "  |       \n"
                      "__|__     \n")
                typewriter.write("you lost all your chances, the evil pixie has caught up to you...\n", 0.04)
                print(" ")
                typewriter.write("before you could even think the pixie blows a dark, black powder all over you causing you to start choking. You slowly feel you lose your concious...", 0.04)
                print(" ")
    
    # 游戏结束,返回结果:True=赢,False=输
    if '_' not in display:
        typewriter.write("You found out the code and the large stone door opened to let you in, as you ran in you saw the evil pixie behind you and widened your eyes. Right before she could get in the door slammed shut causing you to breathe a sigh of relief. ", 0.04)
        print(" ")
        press_enter()
        clear_console()
        return True
    else:
        press_enter()
        clear_console()
        return False

# 主流程:根据游戏结果跳转
game_result = hangman()
if game_result:
    # 替换为你实际的主剧情线代码
    print("进入主剧情线...")
else:
    # 替换为你实际的退出界面代码
    print("返回退出界面...")

关键改动说明

  • 替换递归为while循环:避免递归深度问题,逻辑更直观,便于维护胜负判断条件
  • 移除全局变量:用函数内部变量和返回值传递状态,减少代码耦合
  • 修复字母匹配bug:原代码只更新第一个匹配的字母,现在会更新所有匹配位置
  • 添加胜负返回值:hangman函数返回布尔值表示游戏结果,主流程根据结果分别处理跳转
  • 明确分支逻辑:游戏结束后,赢则执行主剧情代码,输则执行退出界面代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:41:57