feat: AICODE-06 春季后半 7 课大纲 + 第 12 课教案 + prototype 工程产物

## 主要变更

### 课程设计
- 大纲扩展到 18 课(新增第 12-18 课:单词塔防 3D 大项目)
- 引入 AI 三角色协作工作流(Planner / Reviewer / Tester)作为整学期框架
- 每课详化:核心概念 + 误概念预设 + 教学锚点 + 学生产出 + 老师课前要准备

### 第 12 课教案(完整逐字稿)
- 主题:Skills 入门 - 用 game-studio 做跳一跳
- 90 分钟 4C 结构 + 诊断点 + 分支策略
- 5 个误概念预设 + AI 助教提示词模板 + 教师备课指南

### prototype 工程产物(可玩 demo)
- 跳一跳-3d/index.html:Three.js 3D 跳一跳(蓄力 + Web Audio 音效 + PERFECT 命中)
- 单词塔防/game-3d.html:完整 3D 塔防(三阶段 + 商店 + 卡片 + 战斗循环,15 击杀完美胜利)
- 单词塔防/level-editor-3d.html:3D 关卡设计器(Kenney GLB 模型 + localStorage 保存)
- 单词塔防/level-editor.html:2D 关卡设计器(原型保留)
- 单词塔防/index.html:2D 塔防原型(原型保留)

### 工程加固
- .gitignore 加强:排除 token、Kenney 大素材、调试截图、第三方插件、Playwright 临时
- 从 git tracking 移除 scripts/.dingtalk_token.json(本地保留)
- scripts/sync_to_dingtalk.py:OAuth 流程改为手动 authCode 粘贴(避免本地 server 受限)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Rocky
2026-05-18 23:04:54 +02:00
parent 25ec5f0c9c
commit 1c5e72676b
13 changed files with 5290 additions and 23 deletions

View File

@@ -1,7 +0,0 @@
{
"accessToken": "dcfa7be67b303944afd07dd110cb8710",
"refreshToken": "22be4dcc392d3085be63bf2ff0b8aa2b",
"expireTime": 1775203708.1550488,
"clientId": "dingxtxlbrv3zv2uuep4",
"clientSecret": "fBe5GthCC9mG6lv73Mb4KB13pWzW7gcVCdDKPjWmWj6wQ1kNtzLaxIDrsVvb2lTh"
}

View File

@@ -94,20 +94,20 @@ def do_oauth(config):
f"&prompt=consent"
)
print("正在启动本地服务器等待授权回调...")
print(f"请在浏览器中完成钉钉登录授权。")
print(f"如果浏览器没有自动打开,请手动访问:\n{auth_url}\n")
# 启动本地 HTTP 服务器
server = HTTPServer(("127.0.0.1", 18765), OAuthCallbackHandler)
# 直接手动模式:打印链接,让用户粘贴 authCode
print("=" * 60)
print("请用浏览器打开以下链接,完成钉钉登录授权:")
print(f"\n{auth_url}\n")
print("授权后浏览器地址栏会出现类似:")
print(" http://127.0.0.1:18765/callback?authCode=xxxxxx&...")
print("\n从地址栏复制 authCode= 后面的值粘贴到这里:")
print("=" * 60)
webbrowser.open(auth_url)
auth_code = input("authCode: ").strip()
if not auth_code:
print("[auth] 未输入 authCode授权取消")
return None
# 等待回调
while OAuthCallbackHandler.auth_code is None:
server.handle_request()
auth_code = OAuthCallbackHandler.auth_code
server.server_close()
print(f"[auth] 收到授权码")
# 用 auth_code 换取 user access token