godot-genre-educational
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGenre: 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
核心循环
- Learn: Player receives new information (text, diagram, video).
- Apply: Player solves a problem or completes a task using that info.
- Feedback: Game provides immediate correction or reward.
- Adapt: System adjusts future questions based on performance.
- Master: Player unlocks new topics or cosmetic rewards.
- 学习:玩家获取新信息(文本、图表、视频)。
- 应用:玩家运用所学信息解决问题或完成任务。
- 反馈:游戏提供即时纠正或奖励。
- 适配:系统根据玩家表现调整后续题目。
- 掌握:玩家解锁新主题或外观奖励。
Skill Chain
技能链
| Phase | Skills | Purpose |
|---|---|---|
| 1. UI | | Readable text, drag-and-drop answers |
| 2. Data | | Student profiles, progress tracking |
| 3. Logic | | Quiz flow (Question -> Answer -> Result) |
| 4. Juice | | Making learning feel rewarding |
| 5. Meta | | Navigating between lessons and map |
| 阶段 | 技能 | 用途 |
|---|---|---|
| 1. 界面 | | 易读文本、拖拽答题 |
| 2. 数据 | | 学生档案、进度追踪 |
| 3. 逻辑 | | 测验流程(题目→作答→结果) |
| 4. 趣味增强 | | 让学习过程更有成就感 |
| 5. 全局管理 | | 在课程与地图间导航 |
Architecture Overview
架构概述
1. The Curtain (Question Manager)
1. 幕布(题目管理器)
Manages the flow of a single "Lesson" or "Quiz".
gdscript
undefined管理单个「课程」或「测验」的流程。
gdscript
undefinedquiz_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()
undefinedextends 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()
undefined2. The Student Profile
2. 学生档案
Persistent data tracking mastery.
gdscript
undefined用于追踪掌握程度的持久化数据模块。
gdscript
undefinedstudent_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)
undefinedclass_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)
undefined3. Curriculum Tree
3. 课程树
Defining the dependency graph of knowledge.
gdscript
undefined定义知识的依赖关系图。
gdscript
undefinedcurriculum_node.gd
curriculum_node.gd
extends Resource
@export var id: String
@export var title: String
@export var required_topics: Array[String] # Prereqs
undefinedextends Resource
@export var id: String
@export var title: String
@export var required_topics: Array[String] # Prereqs
undefinedKey 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 and
_get_drag_datamethods. Perfect for "Match the items" puzzles._drop_data - Localization: Educational games often need to support multiple languages. Use Godot's from day one.
TranslationServer
- RichTextLabel:对于显示数学公式或为关键词着色(BBCode)至关重要。
- 拖拽功能:Godot的Control节点内置了和
_get_drag_data方法,非常适合「匹配物品」类谜题。_drop_data - 本地化:教育类游戏通常需要支持多语言。从项目初期就应使用Godot的。
TranslationServer
Common Pitfalls
常见陷阱
- Chocolate-Covered Broccoli: Game loop and Learning loop are separate. Fix: Make the mechanic be the learning (e.g., Typing of the Dead).
- Punishing Failure: Player gets "Game Over" for being wrong. Fix: Never fail state. Just "Try Again" or "Here's a hint".
- Wall of Text: Too much reading. Fix: Interaction first. Show, don't tell.
- 巧克力裹西兰花:游戏循环与学习循环相互割裂。解决方法:让游戏机制本身成为学习过程(例如《死亡打字员》)。
- 惩罚失败:玩家因答错而触发「游戏结束」。解决方法:绝不设置失败状态,只提供「再试一次」或「提示一下」选项。
- 大段文字:过多阅读内容。解决方法:先交互,后说明。演示,而非说教。
Reference
参考
- Master Skill: godot-master
- 核心技能:godot-master