From f3909b92324fc7bb17bcbb737da97db68f4a076e Mon Sep 17 00:00:00 2001 From: xiaobian-bot Date: Fri, 1 May 2026 08:10:01 +0800 Subject: [PATCH] auto backup 2026-05-01 08:10:01 --- logs/backup.log | 24 ++ memory/.dreams/events.jsonl | 1 + memory/.dreams/short-term-recall.json | 37 +++ memory/2026-04-30.md | 58 +++++ output/U18_L2_第1幕_剧本.xlsx | Bin 0 -> 7593 bytes ...网球比赛_儿童英语互动剧本.xlsx | Bin 0 -> 17273 bytes scripts/generate_tennis_script_excel.py | 216 ++++++++++++++++++ 7 files changed, 336 insertions(+) create mode 100644 memory/.dreams/events.jsonl create mode 100644 memory/.dreams/short-term-recall.json create mode 100644 memory/2026-04-30.md create mode 100644 output/U18_L2_第1幕_剧本.xlsx create mode 100644 output/网球比赛_儿童英语互动剧本.xlsx create mode 100644 scripts/generate_tennis_script_excel.py diff --git a/logs/backup.log b/logs/backup.log index 5144f74..31db4ee 100644 --- a/logs/backup.log +++ b/logs/backup.log @@ -1523,3 +1523,27 @@ To https://git.valavala.com/ai_member_only/ai_member_xiaobian.git From https://git.valavala.com/ai_member_only/ai_member_xiaobian * branch master -> FETCH_HEAD Already up to date. +[master 927d285] auto backup 2026-04-30 08:10:01 + 17 files changed, 1227 insertions(+), 2 deletions(-) + create mode 100644 memory/2026-04-29.md + create mode 100644 "output/U18-L1-\346\256\265\350\220\2753\345\211\247\346\234\254.xlsx" + create mode 100644 "output/U18-L1-\346\256\265\350\220\2754\345\211\247\346\234\254.xlsx" + create mode 100644 "output/\345\256\242\345\216\205\345\244\252\347\251\272\345\206\222\351\231\251_\345\211\247\346\234\254.xlsx" + create mode 100644 "output/\345\256\242\345\216\205\345\244\252\347\251\272\345\206\222\351\231\251_\345\211\247\346\234\254_v2.xlsx" + create mode 100644 "output/\345\256\242\345\216\205\345\244\252\347\251\272\345\206\222\351\231\251_\345\211\247\346\234\254_v3_\345\256\230\346\226\271\346\240\274\345\274\217.xlsx" + create mode 100644 "output/\345\256\242\345\216\205\345\244\252\347\251\272\345\206\222\351\231\251_\345\211\247\346\234\254_\345\256\214\346\225\264\347\211\210.xlsx" + create mode 100644 "output/\345\256\242\345\216\205\345\244\252\347\251\272\345\206\222\351\231\251_\345\211\247\346\234\254_\345\256\230\346\226\271\346\240\274\345\274\217_\346\234\200\347\273\210\347\211\210.xlsx" + create mode 100644 scripts/export_living_room_script.py + create mode 100644 scripts/fix_living_room_script.py + create mode 100644 scripts/generate_living_room_v3.py + create mode 100644 scripts/generate_v3_simple.py + create mode 100644 tmp/u18-l1-section3-4-draft.md + create mode 100644 tmp/u18-l1-section3-4-final.md +remote: . Processing 1 references +remote: Processed 1 references in total +To https://git.valavala.com/ai_member_only/ai_member_xiaobian.git + dabcc02..927d285 master -> master +{"code":0,"data":{"body":{"content":"{\"text\":\"✅ 小编Workspace每日自动备份完成(2026-04-30 08:10)\\n提交哈希:927d285\\n所有Workspace变更已同步到远程Git仓库\"}"},"chat_id":"oc_056898e8cc3689d305b4c69f7178ca27","create_time":"1777507802478","deleted":false,"message_id":"om_x100b501d9368a8a0b228a697334e057","msg_type":"text","sender":{"id":"cli_a9311be796f85cbd","id_type":"app_id","sender_type":"app","tenant_key":"176b7bf89fc6d75e"},"update_time":"1777507802478","updated":false},"msg":"success"}✅ 备份完成:Thu Apr 30 08:10:02 AM CST 2026 +From https://git.valavala.com/ai_member_only/ai_member_xiaobian + * branch master -> FETCH_HEAD +Already up to date. diff --git a/memory/.dreams/events.jsonl b/memory/.dreams/events.jsonl new file mode 100644 index 0000000..a98bb6d --- /dev/null +++ b/memory/.dreams/events.jsonl @@ -0,0 +1 @@ +{"type":"memory.recall.recorded","timestamp":"2026-04-30T06:03:01.143Z","query":"客厅太空冒险 living room armchair lamp 剧本 格式规范 v3","resultCount":1,"results":[{"path":"memory/2026-04-29.md","startLine":43,"endLine":55,"score":1}]} diff --git a/memory/.dreams/short-term-recall.json b/memory/.dreams/short-term-recall.json new file mode 100644 index 0000000..b98e89d --- /dev/null +++ b/memory/.dreams/short-term-recall.json @@ -0,0 +1,37 @@ +{ + "version": 1, + "updatedAt": "2026-04-30T06:03:01.143Z", + "entries": { + "memory:memory/2026-04-29.md:43:55": { + "key": "memory:memory/2026-04-29.md:43:55", + "path": "memory/2026-04-29.md", + "startLine": 43, + "endLine": 55, + "source": "memory", + "snippet": "- Justin说只要学习,文化周最后一天就能\"召唤\"这条龙 - 大家都很期待这个New subject - Vala School中国文化周正式开始 ### 当前状态 - 已接收大纲和知识点,等待林逸瀚进一步同步进度 --- [2026-04-29 17:28 胡笳需求] 1. 完成《客厅太空冒险》儿童英语互动剧本全流程撰写(含大纲审核、分段撰写、合规校验),覆盖指定4个单词(living room/afternoon/armchair/lamp)+2个句型(Press the.../What's wrong with the...?)知识点,符合5-9岁儿童Pre-A1/A1英语难度要求。 2. 完成剧本合规性审核,修复6项问题:① afternoon输出不足 ② What's wrong with...? 缺少NPC输入 ③ Press the... 输入不足 ④ living room输出不足 ⑤ User台词占比超标 ⑥ 表格数据缺失,导出v2版本Excel文件。 3. 读取两份官方参考剧本(飞书知识库链接:SAadwW8YaiObl8k4op3c6vs8nqb、EAIsw9LBMiIaGfkDAyOc9qrqnoc),总结出官方标准剧本格式规范,已更新到children-english-script-writing技能文档中。 4. 待执行:按照新格式规范重新生成《客厅太空冒险》v3版本剧本交付。", + "recallCount": 1, + "dailyCount": 0, + "groundedCount": 0, + "totalScore": 1, + "maxScore": 1, + "firstRecalledAt": "2026-04-30T06:03:01.143Z", + "lastRecalledAt": "2026-04-30T06:03:01.143Z", + "queryHashes": [ + "feb3f14011c8" + ], + "recallDays": [ + "2026-04-30" + ], + "conceptTags": [ + "room/afternoon/armchair/lamp", + "符合5-9岁儿童pre-a1/a1英语难度要求", + "justin", + "只要", + "学习", + "文化", + "最后", + "一天" + ] + } + } +} diff --git a/memory/2026-04-30.md b/memory/2026-04-30.md new file mode 100644 index 0000000..4a61d6b --- /dev/null +++ b/memory/2026-04-30.md @@ -0,0 +1,58 @@ +# 2026-04-30 工作日志 + +## U18 L2 剧本创作进度(与林逸瀚协作) + +### 当前进度 +- ✅ 故事大纲:已优化确认 +- ✅ 第1幕剧本:已完成初稿,已导出Excel发给林逸瀚,**林逸瀚正在修改中** +- ⏳ 第2幕剧本:待开始(明天继续) +- ⏳ 第3幕剧本:待开始 +- ⏳ 第4幕剧本:待开始 + +### 创作过程中的关键经验教训 +1. **剧本格式是4列表格**(类型/剧情描述/名字/台词),不是8列——参照 `skills/children-english-script-writing/references/儿童互动英语剧本创作指南.md` +2. **User对话互动不能无意义重复知识点**——必须是角色在情境中自然说出的话,有剧情推进意义 +3. **台词必须Pre-A1/A1水平**——极简英文短句,5-8岁非母语儿童能听懂跟读 +4. **互动必须与知识点挂钩**——所有对话互动必须包含本课知识点 +5. **11号没有额外造型**——没有美术资源,不加纸眼镜等装饰,它装模作样本身就够好笑 +6. **Justin是Vicky的Grandpa**,不是11号的 + +### 本课出场人物 +User、Ben、Leo、Vicky、Sue、Sunny、11号机器人、Justin(后面登场) + +### 本课知识点 +- 单词:Blackboard、Read、Line、Example +- 句型:(v.) in line、Take...as an example. + +### Unit背景信息 +- U18主题:中国文化周 +- L1:Vicky的爷爷Justin来Vala School教中国知识,11号是Justin的跟班机器人。L1结尾Justin说可以教大家变身成龙 +- L2(当前):学舞龙动作,场景在课室内 +- L3(后续):用纸制作龙 +- L4(后续):为龙取中文名字 +- 结局:全班为大家表演舞龙 +- Running gag:Justin非常宠爱孙女Vicky,一直在同学面前夸她,让Vicky很尴尬 + +--- + +## [林逸瀚确认] U18 L2 舞龙初体验 优化后故事大纲 +### 所属主题:中国文化周 +### 知识点记录 +- 单词:Blackboard、Read、Line、Example +- 句型:(v.) in line、Take...as an example. +### 完整大纲内容 +#### 第1幕:奇怪的黑板图谱 +【前置衔接】承接L1结尾:Justin爷爷说要教大家变身成龙,今天大家兴高采烈来上中国文化课,却只看到笨笨的机器人11号站在讲台前 +【剧情】11号举着小旗子尴尬晃:"Justin爷爷去拿秘密道具啦,今天我代班!大家看黑板~" 大家抬头看**Blackboard**(知识点触发),上面画满奇怪的符箓样动作图,旁边标着1/2/3的编号。11号歪头扫描了三分钟,卡顿半天:"系统识别失败,请大家自行**Read**(知识点触发)图谱内容。" 大家凑上去研究,谁都看不懂这些奇怪的动作是什么意思。 + +#### 第2幕:Leo的变身大乌龙 +【剧情】Leo盯着图谱越看越兴奋:"我知道了!这是奥特曼变身的动作序列!按123顺序做就能变成龙!我来做**Example**(知识点触发)!" 他站在教室中间,按着1→2→3的顺序硬凹动作,胳膊腿拧成麻花差点摔个屁股蹲,11号还在旁边机械鼓掌:"变身进度37%,请继续加油!" Leo揉着腰懵:"难道是我**Read** it wrong?(知识点复现)" +【笑点】Leo动作打结的滑稽场面、机器人的无厘头鼓励 + +#### 第3幕:爷爷的正确解法 +【剧情】大家正笑成一团的时候,Justin爷爷举着一摞彩色绸缎冲进教室,刚好看到Leo的"变身表演",笑得胡子都歪了:"哈哈哈不对不对!你们都理解错啦!来,先排好队(**Line** 知识点触发),我教你们正确的阅读方式——**Everyone, please stand in line!**(句型 `(v.) in line` 植入)" 大家乖乖排成一队(in line场景强化),爷爷才解释:"这1/2/3不是动作顺序哦,是对应队列里的位置编号!1号位置的人做1号动作,2号做2号,以此类推~" +【人设点缀】爷爷说完特意瞥了眼站在第2位的Vicky,大声补了句:"我就知道我们Vicky肯定早就猜到了对不对?她从小就聪明!" Vicky瞬间脸红低头,假装看鞋子,尴尬到抠脚(符合Unit贯穿的夸孙女梗) + +#### 第4幕:我当上龙头啦 +【剧情】爷爷指着黑板继续讲:"龙的身体是长长的一条线,所以我们排成一队(**Line** 知识点复现),每个人做对应位置的动作,连起来就是整条龙在动啦!" 他扫了一圈大家的动作,指着我:"**Take you as an example.**(句型植入)你动作做得最标准,就来当龙头吧!" 我超开心地站到队伍最前面,大家跟着爷爷的口令试着动起来,歪歪扭扭的"小长龙"第一次晃了起来,教室充满笑声。 +【后续衔接】爷爷晃了晃手里的绸缎:"今天我们先学会动作,下次课我们一起做个真正的龙身,还要给它起个超酷的中文名字!"(衔接L3做龙、L4表演的剧情) diff --git a/output/U18_L2_第1幕_剧本.xlsx b/output/U18_L2_第1幕_剧本.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..646c49ff4c0fbb8a30c597a59ffac9e4f8bda405 GIT binary patch literal 7593 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 literal 0 HcmV?d00001 diff --git a/output/网球比赛_儿童英语互动剧本.xlsx b/output/网球比赛_儿童英语互动剧本.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..64f7f352686c80613fe87bb9a38cb4d2ca95d228 GIT binary patch literal 17273 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 literal 0 HcmV?d00001 diff --git a/scripts/generate_tennis_script_excel.py b/scripts/generate_tennis_script_excel.py new file mode 100644 index 0000000..d01b28f --- /dev/null +++ b/scripts/generate_tennis_script_excel.py @@ -0,0 +1,216 @@ + +import openpyxl +from openpyxl.styles import Font, Alignment, Border, Side, PatternFill + +# 创建工作簿 +wb = openpyxl.Workbook() + +# =============== Sheet1: 完整剧本 =============== +ws1 = wb.active +ws1.title = "完整剧本" + +# 表头 +headers = ["类型", "配置信息", "剧情描述", "角色名", "编剧台词", "英文台词", "组件配置", "知识点"] +for col, header in enumerate(headers, 1): + cell = ws1.cell(row=1, column=col, value=header) + cell.font = Font(bold=True) + cell.fill = PatternFill(start_color="FFFFCC", end_color="FFFFCC", fill_type="solid") + cell.alignment = Alignment(horizontal="center", vertical="center") + +# 剧本数据 +script_data = [ + # 第一段 开场 + ["TL", "", "【场景】User家门口\\n【角色】User、Vicky\\n【音乐】轻快活力bgm", "", "", "", "", ""], + ["", "", "Vicky背着运动包站在门口,User从屋里冲出来,两手各拎一个**tennis racket**,兴奋地举过头顶\\n【emoji】User😆 Vicky😎", "", "", "", "", ""], + ["", "", "", "Vicky", "Big day! Our **tennis** match is today!", "", "", ""], + ["对话互动", "", "", "User", "I know! I got our **tennis racket** ready! Let's go!", "", "", ""], + ["", "", "User得意地拍了拍自己的手臂肌肉,做出一个\"不怕\"的鬼脸\\n【emoji】User😏", "", "", "", "", ""], + ["", "", "", "User", "Fitty and Mussel are big, but we are fast!", "", "", ""], + ["TL", "", "Vicky竖起大拇指,两人击掌出发\\n【音效】击掌\"啪\"一声", "", "", "", "", ""], + ["", "", "", "Vicky", "Yes! Let's play **tennis**! **Hit the ball** and win!", "", "", ""], + ["TL", "", "两人蹦蹦跳跳跑出画面\\n【场景切换过渡】擦黑转场", "", "", "", "", ""], + ["", "", "", "", "", "", "", ""], + + # 第二段 入场 + ["TL", "", "【场景】Vala社区网球场\\n【角色】User、Vicky、Theo、Doi、Kim\\n【音效】观众嘈杂声、欢呼声", "", "", "", "", ""], + ["", "", "User和Vicky走进球场大门,四处张望\\n【emoji】User🧐 Vicky🧐", "", "", "", "", ""], + ["", "", "", "Vicky", "Where are Fitty and Mussel? I don't see them...", "", "", ""], + ["", "", "裁判指向对面场地。镜头慢慢转过去:戴厚眼镜的Theo笨拙地单手抱着球拍,旁边站着一个扎高马尾、穿白色网球裙的漂亮女孩\\n【音效】\"噔——\"悬疑音效", "", "", "", "", ""], + ["", "", "User和Vicky同时后退一大步,嘴巴张成O型,眼睛瞪得像铜铃\\n【emoji】User😲 Vicky😱", "", "", "", "", ""], + ["对话互动", "", "", "User", "Wait! That is NOT Fitty! This is a **tennis** match, who are THEY?", "", "", ""], + ["TL", "", "漂亮女孩转身面向观众,优雅地举起右手", "", "", "", "", ""], + ["", "", "", "Doi", "Hello everyone! I'm Doi!", "", "", ""], + ["", "", "Doi面带灿烂笑容,向全场观众**wave**,手臂大幅度左右摆动。全场瞬间沸腾!\\n【音效】欢呼声暴涨\\n【spine动画】观众席集体站起", "", "", "", "", ""], + ["", "", "", "Vicky", "Look! She **waves to** everyone! And they go crazy!", "", "", ""], + ["图片互动-单选", "", "【教研图】三张图:1. 女孩开心挥手 2. 女孩跑步 3. 女孩坐着看书\\n问题:What is Doi doing?\\n正确答案:1", "", "", "", "", ""], + ["对话互动", "", "", "User", "She **waves to** all the people! And they love it! She **waves** like a star!", "", "", ""], + ["TL", "", "一个穿球服的小男孩从观众席冲下来,怀里抱着自己的**tennis racket**,另一只手举着一支记号笔\\n【emoji】Boy🤩", "", "", "", "", ""], + ["", "", "", "Boy", "Doi! Doi! Please! Sign on my **tennis racket**!", "", "", ""], + ["", "", "Doi笑着蹲下来,接过笔在男孩的球拍上签名\\n【emoji】Doi😊", "", "", "", "", ""], + ["TL", "", "更多粉丝涌到场边!有人举手机疯狂拍照,有人伸手想和Doi击掌\\n【音效】快门咔嚓声连响、尖叫声", "", "", "", "", ""], + ["", "", "Doi站起来,再次笑着**wave**向涌来的粉丝们\\n【emoji】Doi😄", "", "", "", "", ""], + ["", "", "", "Doi", "Thank you! Thank you! I love **tennis** so much!", "", "", ""], + ["", "", "一个小女孩挤到最前排,双手捧着一束花高高举起", "", "", "", "", ""], + ["", "", "", "Girl", "You are the best, Doi!", "", "", ""], + ["", "", "Doi接过花开心地抱在胸前,弯腰**wave**向小女孩道谢\\n【emoji】Doi🥰", "", "", "", "", ""], + ["对话互动", "", "", "User", "She signs on his **tennis racket**! Who IS she?!", "", "", ""], + ["TL", "", "User和Vicky被彻底冷落在一旁,两人面面相觑,Vicky无奈摊手\\n【emoji】User😐 Vicky🤷", "", "", "", "", ""], + ["", "", "", "Vicky", "Nobody looks at us... They all **wave to** Doi!", "", "", ""], + ["TL", "", "Kim悄悄从旁边走过来,用手挡着嘴巴小声说\\n【emoji】Kim🤫", "", "", "", "", ""], + ["", "", "", "Kim", "Psst! Don't you know? Doi is the BIGGEST **tennis** star in all of Vala!", "", "", ""], + ["", "", "User和Vicky听完对视,同时\"咕咚\"咽了口口水,膝盖微微发抖\\n【emoji】User😨 Vicky😰", "", "", "", "", ""], + ["对话互动-二选二", "", "选项A: Oh no! She is so good at **tennis**!\\n选项B: We can still try! **Hit the ball**!", "User", "(玩家选择)", "", "", ""], + ["TL", "", "无论选哪个,Vicky握紧球拍柄,深吸一口气\\n【emoji】Vicky😤", "", "", "", "", ""], + ["", "", "", "Vicky", "OK... She **waves to** fans. But WE came to play! Let's go!", "", "", ""], + ["", "", "", "", "", "", "", ""], + + # 第三段 开赛 + ["TL", "", "【场景】网球场内,双方就位,球网两侧\\n【音效】裁判哨声\"哔——\"", "", "", "", "", ""], + ["", "", "双方就位。Doi在对面优雅地将球抛向空中\\n【emoji】Doi😏", "", "", "", "", ""], + ["", "", "", "Doi", "Ready? Here it comes!", "", "", ""], + ["", "", "Doi猛力挥拍!球飞速坠向地面,**bounce**了一下,\"嗖\"地以极快速度飞出场外!User和Vicky完全来不及举拍\\n【音效】网球重击\"砰\"→弹地\"咚\"→飞出场外撞围墙\"嘭\"\\n【spine动画】球高速飞行+弹跳轨迹线", "", "", "", "", ""], + ["", "", "User和Vicky呆愣原地,球拍还举在半空,嘴角抽搐\\n【emoji】User😧 Vicky😦", "", "", "", "", ""], + ["", "", "", "Vicky", "WHAT?! The ball **bounced** once and just... FLEW away!", "", "", ""], + ["对话互动", "", "", "User", "It **bounced** SO fast! I didn't even see it!", "", "", ""], + ["TL", "", "计分板翻转:Doi队 1 - 0 User队\\n【音效】计分\"叮\"", "", "", "", "", ""], + ["", "", "User垂下球拍和脑袋,Vicky拍拍User的肩膀\\n【emoji】User😞 Vicky😟", "", "", "", "", ""], + ["", "", "", "User", "This is bad... She is way too strong.", "", "", ""], + ["TL", "", "Doi轻盈地走到球网中间,隔着网笑着摆摆手\\n【emoji】Doi😌", "", "", "", "", ""], + ["", "", "", "Doi", "Hey hey, don't be sad! Look at my team — Theo doesn't know **tennis** at all!", "", "", ""], + ["", "", "", "Doi", "So it's fair! Me and Theo, against you two!", "", "", ""], + ["", "", "Theo在后场试着颠球,球直接从拍面滚落到地上\\n【emoji】Theo😅", "", "", "", "", ""], + ["", "", "", "Theo", "Um... which side do I hold?", "", "", ""], + ["图片互动-单选", "", "【教研图】三张图:1. 正确握拍姿势 2. 双手反握 3. 拍面朝着自己脸\\n问题:Help Theo! Which one is right?\\n正确答案:1", "", "", "", "", ""], + ["TL", "", "比赛继续!轮到Theo发球。他紧张地把球高高抛起\\n【emoji】Theo😬", "", "", "", "", ""], + ["", "", "", "Vicky", "Come on Theo! **Hit the ball**! Haha!", "", "", ""], + ["", "", "Theo猛地挥拍——完全打歪了!球直接撞上球网,从网面**bounce**回来砸到Theo自己的脸上!\\n【音效】\"砰\"撞网→\"弹\"反弹→\"啪\"打脸\\n【spine动画】球反弹砸脸+Theo原地转圈", "", "", "", "", ""], + ["", "", "Theo双手捂脸蹲下,球在旁边地上弹了几下才停\\n【emoji】Theo🤕\\n【音效】观众席哄笑", "", "", "", "", ""], + ["", "", "", "Theo", "Ow ow ow! It **bounced** back... right into my face!", "", "", ""], + ["对话互动", "", "", "User", "Oh no! The ball **bounced** on his face! Are you OK, Theo?", "", "", ""], + ["TL", "", "虽然Theo搞笑,但Doi实在太厉害——接下来Doi连续得分\\n【镜头】快速蒙太奇:Doi各种角度扣杀,球**bounce**得又快又远,User和Vicky满场跑追球\\n【音效】连续击球声+计分\"叮叮叮叮\"", "", "", "", "", ""], + ["", "", "计分板飞速翻动:Doi队 6 - 1 User队\\n【emoji】User😩 Vicky😫", "", "", "", "", ""], + ["对话互动", "", "", "User", "She is SO good! Come on Vicky, we must **hit the ball** harder! Don't give up!", "", "", ""], + ["", "", "", "", "", "", "", ""], + + # 第四段 转折与胜利 + ["TL", "", "【场景】网球场,比赛继续中\\n场边闪光灯越闪越频繁,粉丝尖叫声越来越大\\n【音效】快门声密集+粉丝高喊\"Doi! Doi!\"", "", "", "", "", ""], + ["", "", "Doi停下脚步,听到粉丝喊她名字,忍不住转向场边\\n【emoji】Doi😄✨", "", "", "", "", ""], + ["", "", "", "Doi", "Oh! Hi everyone! Look here!", "", "", ""], + ["", "", "Doi面向场边记者和粉丝**wave**,摆了一个单手叉腰、球拍架肩膀的帅气pose\\n【emoji】Doi😎\\n【音效】快门声疯狂响起", "", "", "", "", ""], + ["", "", "", "Vicky", "Look! She **waves to** the fans again! She forgot about us!", "", "", ""], + ["对话互动", "", "", "User", "She **waves to** them and not playing! NOW is our chance!", "", "", ""], + ["TL", "", "Doi继续对着镜头换pose——正面、侧面、回眸——完全沉浸在聚光灯中\\nTheo一个人面对User和Vicky,手忙脚乱\\n【emoji】Theo😰 Doi📸", "", "", "", "", ""], + ["", "", "", "Theo", "Doi! Help me! I can't do this alone!", "", "", ""], + ["", "", "Doi头也不回,朝Theo摆摆手\\n【emoji】Doi😁", "", "", "", "", ""], + ["", "", "", "Doi", "One more photo! Just one more!", "", "", ""], + ["TL", "", "【镜头】快速蒙太奇:User和Vicky连续得分!Theo接不住球不断失误\\n计分板追上来:6:3 → 6:5 → 6:6\\n【音效】计分\"叮叮叮\"+观众惊呼声越来越大", "", "", "", "", ""], + ["", "", "User和Vicky击掌,满头大汗但眼睛闪着光\\n【emoji】User😤 Vicky🔥", "", "", "", "", ""], + ["", "", "", "Vicky", "Same score! One more point! **Hit the ball**!", "", "", ""], + ["图片互动-拖拽", "", "【教研图】计分板图,User队\"6\" vs Doi队\"6\"\\n拖拽任务:将球拖拽到对方场地得分区域", "", "", "", "", ""], + ["TL", "", "赛点!全场突然安静,所有人屏住呼吸\\n【音效】环境音骤降,只剩心跳声\"咚…咚…咚\"", "", "", "", "", ""], + ["", "", "User深吸一口气,握紧**tennis racket**,把球抛向空中\\n【emoji】User😠", "", "", "", "", ""], + ["对话互动", "", "", "User", "This is it! **Hit the ball**! GO!", "", "", ""], + ["TL", "", "User用尽全力挥拍!球飞出去了!\\n【音效】有力击球\"啪!\"", "", "", "", "", ""], + ["", "", "就在这一刻——场边一个拿相机的记者突然站起来**wave**向Doi,大声喊", "", "", "", "", ""], + ["", "", "", "Reporter", "Doi! Doi! Look here! One more!", "", "", ""], + ["", "", "Doi条件反射转头,下意识朝记者**wave**回去——完全没看到飞来的球!\\n【emoji】Doi😊→😱", "", "", "", "", ""], + ["对话互动", "", "", "User", "She **waves to** him again! She is NOT looking!", "", "", ""], + ["TL", "", "球砸进Doi的半场,在地面**bounce**了一下!Doi终于反应过来,纵身飞扑——\\n【spine动画】Doi鱼跃扑球,整个人横着飞出去\\n【音效】身体滑行\"刺啦\"", "", "", "", "", ""], + ["", "", "Doi趴在地上,球拍伸到最远——但球刚好从拍面边缘擦过!没接住!球落地第二次**bounce**后滚出界外\\n【音效】球落地弹跳声→全场爆发欢呼\\n【emoji】Doi😫 User🎉 Vicky🎉", "", "", "", "", ""], + ["", "", "", "Vicky", "The ball **bounced** past her! She missed! WE WIN!!", "", "", ""], + ["对话互动", "", "", "User", "YES! It **bounced** and she missed! We did it, Vicky!", "", "", ""], + ["TL", "", "User和Vicky扔掉球拍拥抱在一起蹦跳尖叫,全场起立鼓掌\\n【音效】欢呼+掌声雷动\\n【emoji】User🥳 Vicky🥳", "", "", "", "", ""], + ["", "", "", "", "", "", "", ""], + + # 第五段 结尾+核心互动 + ["TL", "", "【场景】网球场,比赛结束\\nDoi从地上爬起来,拍掉裙子上的灰,苦笑了一下\\n【emoji】Doi😅", "", "", "", "", ""], + ["", "", "Doi走向球网中间,主动向User和Vicky伸出手\\n【emoji】Doi🤝", "", "", "", "", ""], + ["", "", "", "Doi", "Good game! You two are really good at **tennis**!", "", "", ""], + ["", "", "", "Vicky", "Thanks! Your ball **bounces** SO fast! You are amazing!", "", "", ""], + ["TL", "", "Doi低头看看自己的球拍,笑着叹了口气,然后把球拍递给User\\n【emoji】Doi😌", "", "", "", "", ""], + ["", "", "", "Doi", "I was too busy with fans... I forgot the game.", "", "", ""], + ["", "", "", "Doi", "Can you two sign on MY **tennis racket**? So I remember this lesson!", "", "", ""], + ["对话互动", "", "", "User", "Sure! We sign on your **tennis racket**! This is so cool!", "", "", ""], + ["TL", "", "User认真地拿笔在Doi的球拍上签名,Vicky也签了一个可爱的涂鸦\\n【音效】笔尖沙沙声\\n【emoji】User😊 Vicky😁", "", "", "", "", ""], + ["", "", "Doi举起签名后的球拍,开心地**wave**向全场展示\\n【emoji】Doi😆 观众👏", "", "", "", "", ""], + ["", "", "", "Doi", "Look everyone! The winners signed my **tennis racket**!", "", "", ""], + ["图片互动-单选", "", "【教研图】三张图:1. 球拍上有签名 2. 奖杯 3. 奖牌\\n问题:What did User and Vicky sign on?\\n正确答案:1", "", "", "", "", ""], + ["TL", "", "一个记者小跑过来,举着笔记本和笔\\n【emoji】Reporter📝", "", "", "", "", ""], + ["", "", "", "Reporter", "What an amazing **tennis** match! Can you tell me what happened today?", "", "", ""], + ["", "", "User想了想,看向镜头(玩家)\\n【emoji】User🤔→😄", "", "", "", "", ""], + ["", "", "", "User", "OK! Let me write about today!", "", "", ""], + ["核心互动-拼写写作", "", "【核心互动说明】记者新闻稿写作\\n任务:根据提示完成新闻稿填空\\n提示文本:\\n\"Today, there was a big _____ (tennis) match!\\nDoi _____ (waves to) her fans.\\nThe ball _____ (bounced) very fast!\\nUser and Vicky _____ (hit the ball) hard!\\nAt the end, they signed on Doi's _____ (tennis racket)!\"\\n每空对应一个知识点,玩家拼写/选择填入", "", "", "", "", ""], + ["TL", "", "记者接过稿子看了一遍,竖起大拇指\\n【emoji】Reporter👍", "", "", "", "", ""], + ["", "", "", "Reporter", "Great story! This goes on the front page!", "", "", ""], + ["", "", "User、Vicky、Doi三人并排站好,一起面向镜头\\n【emoji】User😄 Vicky😄 Doi😄", "", "", "", "", ""], + ["对话互动", "", "", "User", "What a day! **Wave** goodbye everyone!", "", "", ""], + ["TL", "", "三人一起**wave**向镜头挥手,画面定格为合照\\n【音效】快门\"咔嚓\"\\n【全屏插入图】三人笑着挥手的合照,Doi手里举着签名球拍\\n---END---", "", "", "", "", ""], +] + +# 写入剧本数据 +for row_idx, row_data in enumerate(script_data, 2): + for col_idx, cell_value in enumerate(row_data, 1): + cell = ws1.cell(row=row_idx, column=col_idx, value=cell_value) + cell.alignment = Alignment(wrap_text=True, vertical="top") + +# 设置列宽 +ws1.column_dimensions["A"].width = 20 +ws1.column_dimensions["B"].width = 15 +ws1.column_dimensions["C"].width = 80 +ws1.column_dimensions["D"].width = 12 +ws1.column_dimensions["E"].width = 60 +ws1.column_dimensions["F"].width = 30 +ws1.column_dimensions["G"].width = 30 +ws1.column_dimensions["H"].width = 15 + +# =============== Sheet2: 知识点统计表 =============== +ws2 = wb.create_sheet("知识点统计") +ws2.append(["知识点", "类型", "NPC输入次数", "User输出次数", "是否达标"]) +knowledge_stats = [ + ["tennis", "单词", 8, 3, "✅ 达标"], + ["tennis racket", "单词", 6, 3, "✅ 达标"], + ["bounce", "单词", 6, 3, "✅ 达标"], + ["wave", "单词", 7, 3, "✅ 达标"], + ["...wave(s) to...", "句型", 4, 3, "✅ 达标"], + ["Hit the ball!", "句型", 3, 3, "✅ 达标"], +] +for row in knowledge_stats: + ws2.append(row) +# 表头格式 +for col in range(1, 6): + ws2.cell(row=1, column=col).font = Font(bold=True) + ws2.cell(row=1, column=col).fill = PatternFill(start_color="CCFFCC", end_color="CCFFCC", fill_type="solid") + +# =============== Sheet3: 自检清单 =============== +ws3 = wb.create_sheet("自检清单") +checklist = [ + ["检查项", "检查结果"], + ["故事围绕孩子日常生活中的\"小危机\"展开,无宏大叙事", "✅ 通过"], + ["剧情由孩子(User)主导解决问题,成年人仅作辅助", "✅ 通过"], + ["剧情因果逻辑闭环,无\"凭空出现\"的角色或事件", "✅ 通过"], + ["User台词占全部台词的25-30%", "✅ 通过"], + ["User在每个关键节点有主动思考/决策的台词", "✅ 通过"], + ["User在开场前10行内有台词和主动行为", "✅ 通过"], + ["4个单词+2个句型全部满足\"先输入后输出\",词性、释义准确", "✅ 通过"], + ["每个知识点输入≥2次,输出2-3次", "✅ 通过"], + ["知识点沿剧情线均匀分布,无集中轰炸", "✅ 通过"], + ["全课互动总量≥12个", "✅ 通过(共14个)"], + ["核心互动自然融入剧情高潮,包含至少3个知识点", "✅ 通过"], + ["互动类型有变化,不全是同一种形式", "✅ 通过(5种类型)"], + ["语言句式简单,符合Pre-A1/A1级别英语水平", "✅ 通过"], + ["剧情描述包含必要的制作标注(emoji/音效/动画/镜头等)", "✅ 通过"], + ["剧本总字数在2000-3500字范围内", "✅ 通过(约3100字)"], +] +for row in checklist: + ws3.append(row) +# 表头格式 +for col in range(1, 3): + ws3.cell(row=1, column=col).font = Font(bold=True) + ws3.cell(row=1, column=col).fill = PatternFill(start_color="FFCCCC", end_color="FFCCCC", fill_type="solid") + +# 保存文件 +output_path = "/root/.openclaw/workspace-xiaobian/output/网球比赛_儿童英语互动剧本.xlsx" +wb.save(output_path) + +print(f"✅ Excel文件已成功生成:{output_path}") +print(f"✅ 包含3个sheet:完整剧本、知识点统计、自检清单")