godot-genre-educational

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Genre: Educational / Gamification

类型:教育类 / Gamification

Expert blueprint for educational games that make learning engaging through game mechanics.
通过游戏机制提升学习趣味性的教育类游戏专家级设计蓝图。

NEVER Do

绝对不要做的事

  • NEVER punish failure with "Game Over" — Learning requires safe experimentation. Use "Try Again" or "Here's a Hint" instead of fail states.
  • NEVER separate learning from gameplay — "Chocolate-covered broccoli" feels like homework. Make mechanics BE the learning (e.g., Typing of the Dead).
  • NEVER use walls of text — Players skip tutorials. Show, don't tell. Interaction first, then brief explanations.
  • NEVER skip spaced repetition — Questions answered incorrectly should reappear later. One-time questions don't build mastery.
  • NEVER hide progress from learners — Visible XP bars, mastery %, and skill trees motivate continued learning. Opaque systems frustrate.

  • 绝对不要用「游戏结束」惩罚失败——学习需要安全的试错环境。请用「再试一次」或「提示一下」替代失败状态。
  • 绝对不要将学习与游戏玩法割裂——这种「巧克力裹西兰花」的设计会让用户感觉像在做作业。要让游戏机制本身成为学习过程(例如《死亡打字员》)。
  • 绝对不要使用大段文字——玩家会跳过教程。要演示,不要说教。先交互,再给出简短说明。
  • 绝对不要省略间隔重复机制——答错的题目应在后续再次出现。一次性的题目无法帮助用户掌握知识。
  • 绝对不要向学习者隐藏进度——可见的XP条、掌握度百分比和技能树能激励持续学习。不透明的系统会让用户产生挫败感。

Available Scripts

可用脚本

MANDATORY: Read the appropriate script before implementing the corresponding pattern.
强制要求:在实现对应模式前,请先阅读相应的脚本。

adaptive_difficulty_adjuster.gd

adaptive_difficulty_adjuster.gd

Success-ratio tracking with branching hints. Adjusts difficulty up/down based on sliding window, provides progressive hint disclosure on consecutive fails.

基于滑动窗口追踪成功率,调整难度升降;在用户连续答错时逐步展示提示。

Core Loop

核心循环

  1. Learn: Player receives new information (text, diagram, video).
  2. Apply: Player solves a problem or completes a task using that info.
  3. Feedback: Game provides immediate correction or reward.
  4. Adapt: System adjusts future questions based on performance.
  5. Master: Player unlocks new topics or cosmetic rewards.
  1. 学习:玩家获取新信息(文本、图表、视频)。
  2. 应用:玩家运用所学信息解决问题或完成任务。
  3. 反馈:游戏提供即时纠正或奖励。
  4. 适配:系统根据玩家表现调整后续题目。
  5. 掌握:玩家解锁新主题或外观奖励。

Skill Chain

技能链

PhaseSkillsPurpose
1. UI
godot-ui-rich-text
,
godot-ui-theming
Readable text, drag-and-drop answers
2. Data
godot-save-load-systems
,
json-serialization
Student profiles, progress tracking
3. Logic
state-machine
Quiz flow (Question -> Answer -> Result)
4. Juice
godot-particles
,
godot-tweening
Making learning feel rewarding
5. Meta
godot-scene-management
Navigating between lessons and map
阶段技能用途
1. 界面
godot-ui-rich-text
,
godot-ui-theming
易读文本、拖拽答题
2. 数据
godot-save-load-systems
,
json-serialization
学生档案、进度追踪
3. 逻辑
state-machine
测验流程(题目→作答→结果)
4. 趣味增强
godot-particles
,
godot-tweening
让学习过程更有成就感
5. 全局管理
godot-scene-management
在课程与地图间导航

Architecture Overview

架构概述

1. The Curtain (Question Manager)

1. 幕布(题目管理器)

Manages the flow of a single "Lesson" or "Quiz".
gdscript
undefined
管理单个「课程」或「测验」的流程。
gdscript
undefined

quiz_manager.gd

quiz_manager.gd

extends Node
var current_question: QuestionData var correct_streak: int = 0
func submit_answer(answer_index: int) -> void: if current_question.is_correct(answer_index): handle_success() else: handle_failure()
func handle_success() -> void: correct_streak += 1 EffectManager.play_confetti() StudentProfile.add_xp(current_question.topic, 10) load_next_question()
func handle_failure() -> void: correct_streak = 0 # Spaced Repetition: Add this question back to the queue question_queue.push_back(current_question) show_explanation()
undefined
extends Node
var current_question: QuestionData var correct_streak: int = 0
func submit_answer(answer_index: int) -> void: if current_question.is_correct(answer_index): handle_success() else: handle_failure()
func handle_success() -> void: correct_streak += 1 EffectManager.play_confetti() StudentProfile.add_xp(current_question.topic, 10) load_next_question()
func handle_failure() -> void: correct_streak = 0 # Spaced Repetition: Add this question back to the queue question_queue.push_back(current_question) show_explanation()
undefined

2. The Student Profile

2. 学生档案

Persistent data tracking mastery.
gdscript
undefined
用于追踪掌握程度的持久化数据模块。
gdscript
undefined

student_profile.gd

student_profile.gd

class_name StudentProfile extends Resource
@export var topic_mastery: Dictionary = {} # "math_add": 0.5 (50%) @export var total_xp: int = 0 @export var badges: Array[String] = []
func get_mastery(topic: String) -> float: return topic_mastery.get(topic, 0.0)
undefined
class_name StudentProfile extends Resource
@export var topic_mastery: Dictionary = {} # "math_add": 0.5 (50%) @export var total_xp: int = 0 @export var badges: Array[String] = []
func get_mastery(topic: String) -> float: return topic_mastery.get(topic, 0.0)
undefined

3. Curriculum Tree

3. 课程树

Defining the dependency graph of knowledge.
gdscript
undefined
定义知识的依赖关系图。
gdscript
undefined

curriculum_node.gd

curriculum_node.gd

extends Resource @export var id: String @export var title: String @export var required_topics: Array[String] # Prereqs
undefined
extends Resource @export var id: String @export var title: String @export var required_topics: Array[String] # Prereqs
undefined

Key Mechanics Implementation

核心机制实现

Adaptive Difficulty algorithm

自适应难度算法

If player is crushing it, give harder questions. If struggling, ease up.
gdscript
func get_next_question() -> QuestionData:
    var player_rating = StudentProfile.get_rating(current_topic)
    # Target a 70% success rate for "Flow State"
    var target_difficulty = player_rating + 0.1 
    return QuestionBank.find_question(target_difficulty)
如果玩家表现出色,就提供更难的题目;如果玩家遇到困难,就降低难度。
gdscript
func get_next_question() -> QuestionData:
    var player_rating = StudentProfile.get_rating(current_topic)
    # Target a 70% success rate for "Flow State"
    var target_difficulty = player_rating + 0.1 
    return QuestionBank.find_question(target_difficulty)

Juice (The "Duolingo Effect")

趣味增强(「多邻国效应」)

Learning is hard. The game must heavily reward effort visually.
  • Sound: Satisfying "Ding!" on correct.
  • Visuals: Screen shake, godot-particles, multiplier popup.
  • UI: Progress bars filling up smoothly (Tweening).
学习本身是枯燥的。游戏必须通过视觉效果大力奖励用户的努力。
  • 音效:答对时播放令人愉悦的「叮!」声。
  • 视觉:屏幕震动、godot-particles、倍数弹窗。
  • 界面:进度条平滑填充(Tweening)。

Godot-Specific Tips

Godot专属技巧

  • RichTextLabel: Essential for mathematical formulas or coloring keywords (BBCode).
  • Drag and Drop: Godot's Control nodes have built-in
    _get_drag_data
    and
    _drop_data
    methods. Perfect for "Match the items" puzzles.
  • Localization: Educational games often need to support multiple languages. Use Godot's
    TranslationServer
    from day one.
  • RichTextLabel:对于显示数学公式或为关键词着色(BBCode)至关重要。
  • 拖拽功能:Godot的Control节点内置了
    _get_drag_data
    _drop_data
    方法,非常适合「匹配物品」类谜题。
  • 本地化:教育类游戏通常需要支持多语言。从项目初期就应使用Godot的
    TranslationServer

Common Pitfalls

常见陷阱

  1. Chocolate-Covered Broccoli: Game loop and Learning loop are separate. Fix: Make the mechanic be the learning (e.g., Typing of the Dead).
  2. Punishing Failure: Player gets "Game Over" for being wrong. Fix: Never fail state. Just "Try Again" or "Here's a hint".
  3. Wall of Text: Too much reading. Fix: Interaction first. Show, don't tell.
  1. 巧克力裹西兰花:游戏循环与学习循环相互割裂。解决方法:让游戏机制本身成为学习过程(例如《死亡打字员》)。
  2. 惩罚失败:玩家因答错而触发「游戏结束」。解决方法:绝不设置失败状态,只提供「再试一次」或「提示一下」选项。
  3. 大段文字:过多阅读内容。解决方法:先交互,后说明。演示,而非说教。

Reference

参考

  • Master Skill: godot-master
  • 核心技能:godot-master