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

基于Flask的聋哑儿童法语猜词游戏:循环值多页面展示问题

解决方案:Flask猜词游戏的分步交互实现

核心问题拆解

Web应用是请求-响应模型,后端无法直接运行while循环来自动更新页面。你需要把原来的循环逻辑拆成单次请求处理:用户点击「是/否」按钮触发一次后端请求,处理一轮猜测,更新游戏状态后返回页面展示结果。


1. 修复Session失效问题

首先确保Session能正常存储数据,这是状态保留的核心:

  • 必须设置Flask的SECRET_KEY,否则Session无法持久化:
    from flask import Flask, session, request, render_template
    
    app = Flask(__name__)
    app.secret_key = "your_random_secret_key_here"  # 随便生成一个随机字符串即可
    
  • 在游戏初始化时(进入commencer_partie页面),一次性存入所有初始状态:
    @app.route("/commencer_partie", methods=["GET"])
    def start_game():
        # 从txt文件加载对应难度的单词,随机选一个目标词
        target_word = load_random_word()  # 替换成你的选词逻辑
        # 初始化Session状态
        session["target_word"] = target_word
        session["correct_letters"] = []
        session["attempts"] = 0
        session["guess_type"] = "letter"  # 初始为猜字母模式
        session["current_guess"] = ""
        session["game_over"] = False
        return render_template("commencer_partie.html")
    

2. 拆解循环,用按钮触发单轮逻辑

把原来的while循环拆成每次用户点击按钮时的单次请求处理:

@app.route("/process_guess", methods=["POST"])
def process_guess():
    # 从Session读取当前游戏状态
    target_word = session.get("target_word")
    correct_letters = session.get("correct_letters", [])
    attempts = session.get("attempts", 0)
    guess_type = session.get("guess_type", "letter")
    user_choice = request.form.get("response")  # 获取用户点击的「是/否」

    # 处理猜字母模式
    if guess_type == "letter":
        # 生成下一个要猜的字母(复用你原来的字母猜测逻辑)
        current_letter = generate_next_letter(correct_letters)
        # 根据用户反馈更新状态
        if user_choice == "yes":
            correct_letters.append(current_letter)
        attempts += 1
        # 判断是否切换到猜单词模式
        correct_ratio = len(correct_letters) / len(target_word)
        if correct_ratio >= 0.6 or attempts >= 8:
            session["guess_type"] = "word"
            # 生成候选单词(根据已猜对的字母从词库筛选)
            current_word = generate_candidate_word(correct_letters, target_word)
            session["current_guess"] = current_word
        else:
            session["current_guess"] = current_letter

    # 处理猜单词模式
    elif guess_type == "word":
        current_word = session.get("current_guess")
        if user_choice == "yes":
            session["game_over"] = True
            session["result"] = "win"
        else:
            attempts += 1
            # 生成下一个候选单词
            current_word = generate_candidate_word(correct_letters, target_word)
            session["current_guess"] = current_word
            # 判断是否耗尽尝试次数
            if attempts >= 10:  # 自定义单词猜测的最大次数
                session["game_over"] = True
                session["result"] = "lose"

    # 更新Session中的状态
    session["correct_letters"] = correct_letters
    session["attempts"] = attempts

    # 返回游戏页面,渲染最新状态
    return render_template("commencer_partie.html")

3. 页面模板渲染状态

在commencer_partie.html中直接读取Session的值,动态展示当前游戏状态:

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Jeu de devinettes</title>
</head>
<body>
    {% if session.game_over %}
        <h2>Fin du jeu !</h2>
        <p>Résultat : {{ session.result }}</p>
        <p>Le mot correct était : {{ session.target_word }}</p>
        <a href="/choisir_diff">Recommencer</a>
    {% else %}
        <h2>Devinette actuelle : {{ session.current_guess }}</h2>
        <p>Lettres trouvées : {{ ', '.join(session.correct_letters) if session.correct_letters else 'Aucune' }}</p>
        <p>Tentatives : {{ session.attempts }}</p>
        <form method="POST" action="/process_guess">
            <button type="submit" name="response" value="yes">Oui</button>
            <button type="submit" name="response" value="no">Non</button>
        </form>
    {% endif %}
</body>
</html>

4. 常见问题排查

  • Session值为空:检查是否设置了SECRET_KEY,是否在游戏初始化时正确存入了初始状态,避免在请求外修改Session。
  • 页面不更新:确保每次处理请求后都返回渲染后的模板,且Session中的状态已正确更新。
  • 猜测逻辑异常:把原来while循环里的字母/单词生成逻辑,完全复用拆到单次请求处理中,保证每轮逻辑和本地运行一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:23:25