From 16171e151f5631e54864146dcb06050ff59d2893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=96=8C?= <259278618@qq.com> Date: Thu, 13 Aug 2026 12:10:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=8D=E5=AD=90=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=8836=20=E8=AE=A1=E5=86=B3=E7=AD=96=E6=A0=91/=E5=85=83?= =?UTF-8?q?=E7=B4=A0=E5=BA=93/=E5=A5=96=E5=93=81/=E5=BE=BD=E7=AB=A0/?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- biz/service/seed/seed.go | 441 ++++++++++++++++++++- biz/service/seed/seed_36_ji/group1.json | 292 ++++++++++++++ biz/service/seed/seed_36_ji/group2.json | 292 ++++++++++++++ biz/service/seed/seed_36_ji/group3.json | 292 ++++++++++++++ biz/service/seed/seed_36_ji/group4.json | 292 ++++++++++++++ biz/service/seed/seed_36_ji/group5.json | 292 ++++++++++++++ biz/service/seed/seed_36_ji/group6.json | 292 ++++++++++++++ biz/service/seed/seed_36_ji/seed_meta.json | 11 + go.mod | 7 +- go.sum | 14 +- 10 files changed, 2214 insertions(+), 11 deletions(-) create mode 100644 biz/service/seed/seed_36_ji/group1.json create mode 100644 biz/service/seed/seed_36_ji/group2.json create mode 100644 biz/service/seed/seed_36_ji/group3.json create mode 100644 biz/service/seed/seed_36_ji/group4.json create mode 100644 biz/service/seed/seed_36_ji/group5.json create mode 100644 biz/service/seed/seed_36_ji/group6.json create mode 100644 biz/service/seed/seed_36_ji/seed_meta.json diff --git a/biz/service/seed/seed.go b/biz/service/seed/seed.go index d3d30c8..feacaa0 100644 --- a/biz/service/seed/seed.go +++ b/biz/service/seed/seed.go @@ -1,7 +1,444 @@ package seed -import "context" +import ( + "context" + "embed" + "encoding/json" + "fmt" + "io/fs" + "sort" -// EnsureSeeded 幂等导入种子数据(36 计决策树/元素库/奖品/徽章/管理员),已存在则跳过。 + "golang.org/x/crypto/bcrypt" + + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/util/gconv" + + "36wisdom/biz/consts" + "36wisdom/biz/dao" +) + +//go:embed seed_36_ji/*.json +var seedFS embed.FS + +// ---------- JSON 结构 ---------- + +type seedFile struct { + Elements []seedElement `json:"elements"` + Strategies []seedStrategy `json:"strategies"` + Prizes []seedPrize `json:"prizes"` + Badges []seedBadge `json:"badges"` + Admin *seedAdmin `json:"admin"` +} + +type seedElement struct { + EType int `json:"e_type"` + Name string `json:"name"` + Image string `json:"image"` + Audio string `json:"audio"` + Description string `json:"description"` +} + +type seedStrategy struct { + Name string `json:"name"` + Pinyin string `json:"pinyin"` + GroupNo int `json:"group_no"` + GroupName string `json:"group_name"` + Meaning string `json:"meaning"` + TeachContent string `json:"teach_content"` + TeachImage string `json:"teach_image"` + TeachAudio string `json:"teach_audio"` + SummaryQ string `json:"summary_q"` + SummaryOptions string `json:"summary_options"` + SummaryAudio string `json:"summary_audio"` + Icon string `json:"icon"` + SortOrder int `json:"sort_order"` + UnlockBefore int64 `json:"unlock_before"` + Levels []seedLevel `json:"levels"` +} + +type seedLevel struct { + Title string `json:"title"` + SceneName string `json:"scene_name"` + SceneContent string `json:"scene_content"` + SceneImage string `json:"scene_image"` + SceneAudio string `json:"scene_audio"` + AgeGroup string `json:"age_group"` + Nodes []seedNode `json:"nodes"` +} + +type seedNode struct { + Title string `json:"title"` + CharacterName string `json:"character_name"` + Content string `json:"content"` + Image string `json:"image"` + Audio string `json:"audio"` + InteractionType int `json:"interaction_type"` + Config string `json:"config"` + NodeType int `json:"node_type"` + ResultType int `json:"result_type"` + IsEntry int `json:"is_entry"` + Options []seedOption `json:"options"` +} + +type seedOption struct { + Text string `json:"text"` + PropName string `json:"prop_name"` + Audio string `json:"audio"` + NextIndex int `json:"next_index"` + Feedback string `json:"feedback"` + FeedbackAudio string `json:"feedback_audio"` +} + +type seedPrize struct { + Name string `json:"name"` + Description string `json:"description"` + Icon string `json:"icon"` + PType int `json:"p_type"` + PointsCost int `json:"points_cost"` + Stock int `json:"stock"` + SortOrder int `json:"sort_order"` +} + +type seedBadge struct { + Name string `json:"name"` + Icon string `json:"icon"` + CondType int `json:"cond_type"` + CondValue int `json:"cond_value"` +} + +type seedAdmin struct { + Username string `json:"username"` + Password string `json:"password"` +} + +// ---------- 导入 ---------- + +// EnsureSeeded 幂等导入种子数据:strategy 表非空即跳过。 func EnsureSeeded(ctx context.Context) { + count, err := dao.Strategy.Model().Ctx(ctx).Count() + if err != nil { + g.Log().Fatal(ctx, err) + } + if count > 0 { + g.Log().Info(ctx, "seed: 数据已存在,跳过种子导入") + return + } + if err := doSeed(ctx); err != nil { + g.Log().Fatal(ctx, err) + } + g.Log().Info(ctx, "seed: 种子数据导入完成") +} + +func doSeed(ctx context.Context) (err error) { + files, err := loadSeedFiles() + if err != nil { + return err + } + + tx, err := g.DB().Begin(ctx) + if err != nil { + return err + } + defer func() { + if err != nil { + _ = tx.Rollback() + } + }() + + // 1. 元素库:按 (e_type, name) 去重 + elementIds := make(map[string]int64) // key: "1:操场" + for _, f := range files { + for _, el := range f.Elements { + if err := insertElement(ctx, tx, elementIds, el); err != nil { + return err + } + } + } + + // 2. 计策 → 关卡 → 节点 → 选项 + for _, f := range files { + for _, s := range f.Strategies { + if err := insertStrategy(ctx, tx, elementIds, s); err != nil { + return err + } + } + } + + // 3. 奖品 / 徽章 / 管理员 + for _, f := range files { + for _, p := range f.Prizes { + if _, err := tx.Model(consts.TablePrize).Ctx(ctx).Data(g.Map{ + "name": p.Name, "description": p.Description, "icon": p.Icon, + "p_type": p.PType, "points_cost": p.PointsCost, "stock": p.Stock, + "status": consts.StatusEnabled, "sort_order": p.SortOrder, + }).Insert(); err != nil { + return err + } + } + for _, b := range f.Badges { + if _, err := tx.Model(consts.TableBadge).Ctx(ctx).Data(g.Map{ + "name": b.Name, "icon": b.Icon, "cond_type": b.CondType, + "cond_value": b.CondValue, "status": consts.StatusEnabled, + }).Insert(); err != nil { + return err + } + } + if f.Admin != nil && f.Admin.Username != "" { + hash, err := bcrypt.GenerateFromPassword([]byte(f.Admin.Password), bcrypt.DefaultCost) + if err != nil { + return err + } + if _, err := tx.Model(consts.TableAdminUser).Ctx(ctx).Data(g.Map{ + "username": f.Admin.Username, "password": string(hash), + "status": consts.StatusEnabled, + }).Insert(); err != nil { + return err + } + } + } + return tx.Commit() +} + +func insertElement(ctx context.Context, tx gdb.TX, ids map[string]int64, el seedElement) error { + key := fmt.Sprintf("%d:%s", el.EType, el.Name) + if _, ok := ids[key]; ok { + return nil + } + res, err := tx.Model(consts.TableElement).Ctx(ctx).Data(g.Map{ + "e_type": el.EType, "name": el.Name, "image": el.Image, "audio": el.Audio, + "description": el.Description, "status": consts.StatusEnabled, + }).Insert() + if err != nil { + return err + } + id, err := res.LastInsertId() + if err != nil { + return err + } + ids[key] = id + return nil +} + +// ensureElement 按 (e_type, name) 引用自动建元素,返回元素 id;name 为空返回 0。 +func ensureElement(ctx context.Context, tx gdb.TX, ids map[string]int64, eType int, name string) (int64, error) { + if name == "" { + return 0, nil + } + if err := insertElement(ctx, tx, ids, seedElement{EType: eType, Name: name}); err != nil { + return 0, err + } + return ids[fmt.Sprintf("%d:%s", eType, name)], nil +} + +func insertStrategy(ctx context.Context, tx gdb.TX, elementIds map[string]int64, s seedStrategy) error { + unlockBefore := gconv.Int64(s.UnlockBefore) + data := g.Map{ + "name": s.Name, "pinyin": s.Pinyin, "group_no": s.GroupNo, "group_name": s.GroupName, + "meaning": s.Meaning, "teach_content": s.TeachContent, "teach_image": s.TeachImage, + "teach_audio": s.TeachAudio, "summary_q": s.SummaryQ, "summary_options": s.SummaryOptions, + "summary_audio": s.SummaryAudio, "icon": s.Icon, "sort_order": s.SortOrder, + "status": consts.StatusEnabled, + } + if unlockBefore > 0 { + data["unlock_before"] = unlockBefore + } + res, err := tx.Model(consts.TableStrategy).Ctx(ctx).Data(data).Insert() + if err != nil { + return err + } + strategyId, err := res.LastInsertId() + if err != nil { + return err + } + + for li, lv := range s.Levels { + if err := insertLevel(ctx, tx, elementIds, strategyId, li+1, lv); err != nil { + return err + } + } + return nil +} + +func insertLevel(ctx context.Context, tx gdb.TX, elementIds map[string]int64, strategyId int64, sortOrder int, lv seedLevel) error { + if len(lv.Nodes) == 0 { + return fmt.Errorf("seed: 计策关卡 %s 无节点", lv.Title) + } + // 节点数组内校验 + 有向无环检测(next_index 边) + if err := validateLevelGraph(lv); err != nil { + return fmt.Errorf("seed: 关卡「%s」校验失败: %w", lv.Title, err) + } + + sceneId, err := ensureElement(ctx, tx, elementIds, 1, lv.SceneName) + if err != nil { + return err + } + ageGroup := lv.AgeGroup + if ageGroup == "" { + ageGroup = consts.AgeGroup4_6 + } + res, err := tx.Model(consts.TableLevel).Ctx(ctx).Data(g.Map{ + "strategy_id": strategyId, "title": lv.Title, "scene_id": sceneId, + "scene_content": lv.SceneContent, "scene_image": lv.SceneImage, "scene_audio": lv.SceneAudio, + "age_group": ageGroup, "content_version": 1, "sort_order": sortOrder, + "status": consts.StatusEnabled, + }).Insert() + if err != nil { + return err + } + levelId, err := res.LastInsertId() + if err != nil { + return err + } + + // 节点先入库,按数组下标记录 id + nodeIds := make([]int64, len(lv.Nodes)) + for i, nd := range lv.Nodes { + nodeType := nd.NodeType + if nodeType == 0 { + nodeType = consts.NodeDecision + } + interactionType := nd.InteractionType + if interactionType == 0 { + interactionType = consts.InteractionOption + } + characterId, err := ensureElement(ctx, tx, elementIds, 2, nd.CharacterName) + if err != nil { + return err + } + nres, err := tx.Model(consts.TableSceneNode).Ctx(ctx).Data(g.Map{ + "level_id": levelId, "title": nd.Title, "character_id": characterId, + "content": nd.Content, "image": nd.Image, "audio": nd.Audio, + "node_type": nodeType, "interaction_type": interactionType, "config": nd.Config, + "result_type": nd.ResultType, "is_entry": nd.IsEntry, "sort_order": i + 1, + "status": consts.StatusEnabled, + }).Insert() + if err != nil { + return err + } + id, err := nres.LastInsertId() + if err != nil { + return err + } + nodeIds[i] = id + } + + for i, nd := range lv.Nodes { + for oi, opt := range nd.Options { + propId, err := ensureElement(ctx, tx, elementIds, 3, opt.PropName) + if err != nil { + return err + } + nextNodeId := int64(0) + if opt.NextIndex > 0 { + nextNodeId = nodeIds[opt.NextIndex] + } + if _, err := tx.Model(consts.TableNodeOption).Ctx(ctx).Data(g.Map{ + "node_id": nodeIds[i], "text": opt.Text, "prop_id": propId, + "audio": opt.Audio, "next_node_id": nextNodeId, "feedback": opt.Feedback, + "feedback_audio": opt.FeedbackAudio, "sort_order": oi + 1, + "status": consts.StatusEnabled, + }).Insert(); err != nil { + return err + } + } + } + return nil +} + +// validateLevelGraph 校验关卡节点图:入口唯一、决策节点≥2 选项、终局无选项、终局评级合法、next_index 有界且无环。 +func validateLevelGraph(lv seedLevel) error { + n := len(lv.Nodes) + if n == 0 { + return fmt.Errorf("无节点") + } + entryCount := 0 + hasFinal := false + adj := make([][]int, n) + indegree := make([]int, n) + for i, nd := range lv.Nodes { + if nd.IsEntry == 1 { + entryCount++ + } + if nd.NodeType == consts.NodeFinal { + hasFinal = true + if nd.ResultType <= consts.ResultNone || nd.ResultType > consts.ResultBest { + return fmt.Errorf("节点 %d 终局评级非法: %d", i, nd.ResultType) + } + if len(nd.Options) > 0 { + return fmt.Errorf("终局节点 %d 不应有选项", i) + } + } else if nd.NodeType == 0 || nd.NodeType == consts.NodeDecision { + if len(nd.Options) < 2 { + return fmt.Errorf("决策节点 %d 选项少于 2 个", i) + } + if nd.ResultType != 0 { + return fmt.Errorf("决策节点 %d 不应有终局评级", i) + } + } else { + return fmt.Errorf("节点 %d 类型非法: %d", i, nd.NodeType) + } + for _, opt := range nd.Options { + if opt.NextIndex < 0 || opt.NextIndex >= n { + return fmt.Errorf("选项 next_index 越界: %d", opt.NextIndex) + } + adj[i] = append(adj[i], opt.NextIndex) + indegree[opt.NextIndex]++ + } + } + if entryCount != 1 { + return fmt.Errorf("入口节点数量应为 1,实际 %d", entryCount) + } + if !hasFinal { + return fmt.Errorf("缺少终局节点") + } + // Kahn 拓扑排序检测环 + queue := make([]int, 0, n) + for i, d := range indegree { + if d == 0 { + queue = append(queue, i) + } + } + visited := 0 + for len(queue) > 0 { + u := queue[0] + queue = queue[1:] + visited++ + for _, v := range adj[u] { + indegree[v]-- + if indegree[v] == 0 { + queue = append(queue, v) + } + } + } + if visited != n { + return fmt.Errorf("决策图存在环") + } + return nil +} + +func loadSeedFiles() ([]*seedFile, error) { + entries, err := fs.ReadDir(seedFS, "seed_36_ji") + if err != nil { + return nil, err + } + var names []string + for _, e := range entries { + names = append(names, e.Name()) + } + sort.Strings(names) // 固定顺序:group1..group6、seed_meta 最后 + + var files []*seedFile + for _, name := range names { + data, err := seedFS.ReadFile("seed_36_ji/" + name) + if err != nil { + return nil, err + } + var f seedFile + if err := json.Unmarshal(data, &f); err != nil { + return nil, fmt.Errorf("seed 文件 %s 解析失败: %w", name, err) + } + files = append(files, &f) + } + return files, nil } diff --git a/biz/service/seed/seed_36_ji/group1.json b/biz/service/seed/seed_36_ji/group1.json new file mode 100644 index 0000000..be9bd2f --- /dev/null +++ b/biz/service/seed/seed_36_ji/group1.json @@ -0,0 +1,292 @@ +{ + "strategies": [ + { + "name": "瞒天过海", + "pinyin": "mán tiān guò hǎi", + "group_no": 1, + "group_name": "胜战计", + "meaning": "趁着别人不注意,悄悄把事情做好。", + "teach_content": "名字里有个「海」字,说的是从前有个人,偷偷坐着船渡过了大海。用到生活里:想做好一件事,不用大吵大闹,安安静静、趁着大家不注意,悄悄把它做好,也是一种厉害的本领哦。", + "summary_q": "下面哪个说法,是在说「瞒天过海」?", + "summary_options": "[{\"text\":\"大吵大闹,让大家都知道我要做什么\",\"correct\":false},{\"text\":\"趁着别人不注意,悄悄把事情做好\",\"correct\":true},{\"text\":\"把事情拖到明天再说\",\"correct\":false}]", + "sort_order": 1, + "unlock_before": 0, + "levels": [ + { + "title": "午睡时间的小任务", + "scene_name": "幼儿园教室", + "scene_content": "午睡时间,教室安安静静。大家都睡着了。", + "age_group": "4-6", + "nodes": [ + { + "title": "悄悄下床", + "character_name": "小明", + "content": "午睡时间,大家都睡着了。你想起妈妈嘱咐你把画带回家给奶奶,可是老师说过午睡时不能下床。怎么办?", + "is_entry": 1, + "options": [ + {"text": "趁老师出去,悄悄下床装画", "prop_name": "画", "next_index": 1, "feedback": "你轻轻地、悄悄地下了床,一点声音都没有……"}, + {"text": "继续躺着,等起床了再装", "next_index": 2, "feedback": "画只能明天再带了……"}, + {"text": "在床上翻来翻去不睡觉", "next_index": 3, "feedback": "床吱呀吱呀响,吵醒了旁边的同学……"} + ] + }, + { + "title": "同桌醒了", + "character_name": "小明", + "content": "装到一半,同桌醒了,睁大眼睛看着你。怎么办?", + "options": [ + {"text": "小声请他保密,拉他一起轻手轻脚帮忙", "prop_name": "画", "next_index": 4, "feedback": "你们像小特工一样,谁都没吵醒!"}, + {"text": "马上停手,躺回床上", "next_index": 5, "feedback": "画没装好,但你也没吵到别人"}, + {"text": "紧张得大喊「别告诉老师!」", "next_index": 6, "feedback": "把大家都吵醒了,老师批评了你"} + ] + }, + {"content": "起床后你装好了画,虽然晚了,但你没违反规则。", "node_type": 2, "result_type": 2}, + {"content": "你翻来翻去,床吱呀吱呀地响,吵醒了小朋友,老师批评了你。", "node_type": 2, "result_type": 1}, + {"content": "画装进书包啦!同桌还帮你放哨,你们谁都没吵醒,真像两个小特工!", "node_type": 2, "result_type": 3}, + {"content": "你躺回了床上,谁也没吵醒。起床后你装好了画,但奶奶的画晚了一天到。", "node_type": 2, "result_type": 2}, + {"content": "你这一喊,把大家都吵醒了。老师让大家继续睡觉,画也没装成。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "围魏救赵", + "pinyin": "wéi wèi jiù zhào", + "group_no": 1, + "group_name": "胜战计", + "meaning": "别人挡着你的路,不硬闯,想办法让他自己让开。", + "teach_content": "从前打仗,有人围住了魏国,救出了赵国,不用直接去赵国硬拼。生活中也一样:遇到挡路的人,硬挤硬抢会吵架;换个办法,请别人帮忙,或者解决让他「挡路」的原因,路自然就通了。", + "summary_q": "硬碰硬打不过的时候,最好的办法是?", + "summary_options": "[{\"text\":\"冲上去硬抢\",\"correct\":false},{\"text\":\"想办法让他自己走开\",\"correct\":true},{\"text\":\"蹲在地上哭\",\"correct\":false}]", + "sort_order": 2, + "unlock_before": 1, + "levels": [ + { + "title": "跷跷板的大哥哥", + "scene_name": "公园", + "scene_content": "阳光真好,公园里到处是小朋友的笑声。", + "age_group": "4-6", + "nodes": [ + { + "title": "被占的跷跷板", + "character_name": "大哥哥", + "content": "你走到跷跷板旁边,大哥哥坐在上面玩手机,根本不让你玩。你很想玩,怎么办?", + "is_entry": 1, + "options": [ + {"text": "跑去找管理员爷爷帮忙,请他把大哥哥叫走", "next_index": 1, "feedback": "爷爷说「我正忙着呢」……"}, + {"text": "冲上去抢跷跷板", "next_index": 2, "feedback": "你被大哥哥凶了一顿,还摔了一跤"}, + {"text": "先去玩滑梯,过会儿再来", "next_index": 3, "feedback": "你玩了滑梯,心情好多了"} + ] + }, + { + "title": "爷爷在忙", + "character_name": "小明", + "content": "管理员爷爷正忙,说「小朋友你自己去跟大哥哥商量呀」。怎么办?", + "options": [ + {"text": "去找大哥哥的妈妈,请她来叫大哥哥", "next_index": 4, "feedback": "大哥哥的妈妈正在长椅上坐着呢"}, + {"text": "站到大哥哥旁边,等他玩够了", "next_index": 5, "feedback": "你等啊等,等了好久"}, + {"text": "推大哥哥下来", "next_index": 6, "feedback": "你这一推,大哥哥摔倒了"} + ] + }, + {"content": "你冲上去抢,大哥哥凶了你一顿,你摔了一跤,哭着跑开了。", "node_type": 2, "result_type": 1}, + {"content": "你玩了滑梯,回来时大哥哥走了,你玩了一会儿跷跷板。", "node_type": 2, "result_type": 2}, + {"content": "大哥哥的妈妈来了,带走了他。你坐上跷跷板,笑得合不拢嘴!", "node_type": 2, "result_type": 3}, + {"content": "你等了好久,大哥哥终于走了,但你只玩了一小会儿,天就快黑了。", "node_type": 2, "result_type": 2}, + {"content": "大哥哥摔倒了,哭起来,大家都围过来,你也吓坏了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "借刀杀人", + "pinyin": "jiè dāo shā rén", + "group_no": 1, + "group_name": "胜战计", + "meaning": "自己不方便出面,请更有办法的人帮忙。", + "teach_content": "从前打仗,不用自己的刀,借别人的力量打败敌人。小朋友记住:遇到自己搞不定的事,不硬来,请老师、请保安叔叔、请爸爸妈妈帮忙,是聪明的做法。", + "summary_q": "自己搞不定的时候,聪明的做法是?", + "summary_options": "[{\"text\":\"借别人的力量帮忙\",\"correct\":true},{\"text\":\"自己硬来\",\"correct\":false},{\"text\":\"生气哭闹\",\"correct\":false}]", + "sort_order": 3, + "unlock_before": 2, + "levels": [ + { + "title": "树上的皮球", + "scene_name": "小区花园", + "scene_content": "花园里的树很高很高,小鸟在树上唱歌。", + "age_group": "4-6", + "nodes": [ + { + "title": "皮球上树了", + "character_name": "大孩子", + "content": "大孩子把你的皮球扔到了高高的树上,还冲你做鬼脸。你想把球拿下来,怎么办?", + "is_entry": 1, + "options": [ + {"text": "请保安叔叔用长杆把球够下来", "prop_name": "长杆", "next_index": 1, "feedback": "保安叔叔答应了,扛着长杆走过来"}, + {"text": "自己爬树去拿", "next_index": 2, "feedback": "你差点摔下来,被妈妈批评"}, + {"text": "捡小石头扔球,想把球砸下来", "next_index": 3, "feedback": "石头没砸中球,差点砸到人"} + ] + }, + { + "title": "捣乱的大孩子", + "character_name": "大孩子", + "content": "保安叔叔正要够球,大孩子又跑过来捣乱。怎么办?", + "options": [ + {"text": "请保安叔叔帮帮你,把大孩子也劝走", "next_index": 4, "feedback": "保安叔叔和蔼地跟大孩子讲道理"}, + {"text": "拿到球就飞快跑开", "next_index": 5, "feedback": "你抱着球跑回家了"}, + {"text": "朝大孩子喊「你这个坏蛋!」", "next_index": 6, "feedback": "大孩子又生气了,追着你们跑"} + ] + }, + {"content": "你自己爬树,树枝一滑,差点摔下来,妈妈吓得心怦怦跳,狠狠批评了你。", "node_type": 2, "result_type": 1}, + {"content": "石头没砸中球,还差点砸到路过的小朋友,大家都说你太危险了。", "node_type": 2, "result_type": 1}, + {"content": "球拿下来了!保安叔叔还和大孩子讲了道理,他以后再也不敢欺负你了。", "node_type": 2, "result_type": 3}, + {"content": "你抱着球跑回家了,球回来了,可是下次他还会欺负你。", "node_type": 2, "result_type": 2}, + {"content": "大孩子追着你们跑,保安叔叔拦了好久才拦住,你吓出了一身汗。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "以逸待劳", + "pinyin": "yǐ yì dài láo", + "group_no": 1, + "group_name": "胜战计", + "meaning": "先休息好、准备好,等最合适的时机再出手。", + "teach_content": "打仗的时候,聪明的将军先让士兵好好休息,等敌人跑累了,再冲出去,一下就能赢。小朋友做事也一样:不急着乱冲,先想想、先准备好,抓住好时机,做事又快又好。", + "summary_q": "做事之前,最好的准备是?", + "summary_options": "[{\"text\":\"先休息好想想办法\",\"correct\":true},{\"text\":\"立刻乱冲乱撞\",\"correct\":false},{\"text\":\"什么都不想直接做\",\"correct\":false}]", + "sort_order": 4, + "unlock_before": 3, + "levels": [ + { + "title": "搬家大行动", + "scene_name": "家里", + "scene_content": "妈妈要搬家了,客厅里堆满了大箱子。", + "age_group": "4-6", + "nodes": [ + { + "title": "我也想帮忙", + "character_name": "妈妈", + "content": "妈妈要搬家,好多大箱子。你太小搬不动大箱子,可是很想帮忙。怎么办?", + "is_entry": 1, + "options": [ + {"text": "先喝口水休息好,等搬东西的叔叔阿姨来", "next_index": 1, "feedback": "你喝饱了水,精神满满"}, + {"text": "冲上去搬最大的箱子", "next_index": 2, "feedback": "箱子纹丝不动,还差点砸到脚"}, + {"text": "把玩具箱往门口拖", "next_index": 3, "feedback": "你拖动了玩具箱,帮了一点小忙"} + ] + }, + { + "title": "妈妈问你了", + "character_name": "妈妈", + "content": "叔叔阿姨来了,大家都在忙。妈妈问你能帮忙做什么?", + "options": [ + {"text": "帮妈妈看住小弟弟,陪他玩", "prop_name": "玩具熊", "next_index": 4, "feedback": "你用玩具熊逗弟弟,他咯咯笑"}, + {"text": "抢着搬箱子,结果搬不动", "next_index": 5, "feedback": "箱子太重,还差点砸到脚"}, + {"text": "自己去看动画片", "next_index": 6, "feedback": "你看得入迷,妈妈忙得满头大汗"} + ] + }, + {"content": "箱子太重了,你使出了吃奶的劲,箱子纹丝不动,还差点砸到脚,把妈妈吓坏了。", "node_type": 2, "result_type": 1}, + {"content": "你把玩具箱拖到了门口,帮妈妈省了一趟力气,妈妈夸了你。", "node_type": 2, "result_type": 2}, + {"content": "你陪弟弟玩得开开心心,妈妈专心指挥搬家,搬得又快又好!妈妈夸你是小帮手!", "node_type": 2, "result_type": 3}, + {"content": "你抢着搬箱子,箱子太重,差点砸到脚,叔叔赶紧来帮忙,大家吓了一跳。", "node_type": 2, "result_type": 1}, + {"content": "你看动画片看得入迷,妈妈忙得满头大汗,一个人搬了好久。", "node_type": 2, "result_type": 2} + ] + } + ] + }, + { + "name": "趁火打劫", + "pinyin": "chèn huǒ dǎ jié", + "group_no": 1, + "group_name": "胜战计", + "meaning": "趁着大家乱哄哄的时候,抓住机会做对的事。", + "teach_content": "这个名字听起来有点吓人,其实是说「抓住时机」。大家都乱成一团的时候,正是安静做事的好时候。别人吵吵闹闹,你悄悄把该做的事做好,就是会抓时机的小高手。", + "summary_q": "别人都在吵闹的时候,你会?", + "summary_options": "[{\"text\":\"悄悄做好自己的事\",\"correct\":true},{\"text\":\"也跟着吵闹\",\"correct\":false},{\"text\":\"趁机欺负别人\",\"correct\":false}]", + "sort_order": 5, + "unlock_before": 4, + "levels": [ + { + "title": "乱哄哄的图书馆", + "scene_name": "图书馆", + "scene_content": "图书馆的书架上,摆满了各种各样的书。", + "age_group": "4-6", + "nodes": [ + { + "title": "找恐龙书", + "character_name": "管理员阿姨", + "content": "图书馆里小朋友吵成一团,管理员阿姨忙得团团转。你想找那本恐龙书,怎么办?", + "is_entry": 1, + "options": [ + {"text": "趁乱悄悄去书架安静地找书", "next_index": 1, "feedback": "你轻手轻脚走到书架前,恐龙书就在那里!"}, + {"text": "跑进人群一起看热闹", "next_index": 2, "feedback": "你挤来挤去,什么也没看成"}, + {"text": "大声喊「阿姨我要借书!」", "next_index": 3, "feedback": "阿姨忙得顾不上你"} + ] + }, + { + "title": "安静的借书人", + "character_name": "管理员阿姨", + "content": "你找到了恐龙书,特别高兴。可是旁边还在吵,阿姨很着急。怎么办?", + "options": [ + {"text": "轻轻走到阿姨身边,小声说「阿姨,我找到书啦」", "next_index": 4, "feedback": "阿姨笑了,弯下腰听你说话"}, + {"text": "抱着书躲到角落自己看,不登记", "next_index": 5, "feedback": "你看得津津有味"}, + {"text": "加入吵闹的小朋友,一起喊叫", "next_index": 6, "feedback": "图书馆更乱了"} + ] + }, + {"content": "你挤进人群,什么热闹也没看成,还被挤得东倒西歪。", "node_type": 2, "result_type": 1}, + {"content": "你喊得嗓子都哑了,阿姨也没听见。恐龙书还是没借到。", "node_type": 2, "result_type": 1}, + {"content": "阿姨夸你真懂事,还教你自己用借书卡!你抱着恐龙书,开心极了!", "node_type": 2, "result_type": 3}, + {"content": "你在角落看完了书,可没有登记,书差点被当成弄丢了。", "node_type": 2, "result_type": 2}, + {"content": "你这一喊,图书馆更乱了,阿姨没收了大家的书,恐龙书也没看成。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "声东击西", + "pinyin": "shēng dōng jī xī", + "group_no": 1, + "group_name": "胜战计", + "meaning": "假装要往东,其实要往西,让对方猜不到你的想法。", + "teach_content": "从前打仗,有人假装攻打东边,把敌人骗过去,然后偷偷打西边,一下就赢了。生活中,你想去一个地方,故意先往另一个方向走,让对方猜错,你就能轻松办成事啦。", + "summary_q": "哪个说法总结了「声东击西」?", + "summary_options": "[{\"text\":\"假装往东其实往西\",\"correct\":true},{\"text\":\"一直往东跑\",\"correct\":false},{\"text\":\"站在中间不动\",\"correct\":false}]", + "sort_order": 6, + "unlock_before": 5, + "levels": [ + { + "title": "足球场上的假动作", + "scene_name": "操场", + "scene_content": "比赛最后一分钟,比分平了!全场都在呐喊。", + "age_group": "4-6", + "nodes": [ + { + "title": "被挡住了", + "character_name": "小明", + "content": "足球比赛最后一分钟,你带着球冲向球门,一个大个子队员挡在面前,硬冲会被抢走球。怎么办?", + "is_entry": 1, + "options": [ + {"text": "假装向右跑,骗他转身", "prop_name": "足球", "next_index": 1, "feedback": "大个子果然上当了,转身追向右边!"}, + {"text": "硬冲过去", "next_index": 2, "feedback": "你被拦住了,球丢了……"}, + {"text": "把球传给队友", "next_index": 3, "feedback": "队友接住了球"} + ] + }, + { + "title": "面对守门员", + "character_name": "小明", + "content": "大个子被骗去右边了!你从左边冲出来,可是守门员也扑过来了。怎么办?", + "options": [ + {"text": "轻轻把球推进球门远角", "prop_name": "足球", "next_index": 4, "feedback": "守门员扑向左边,球却滚向了右边远角!"}, + {"text": "用力猛踢一脚", "next_index": 5, "feedback": "球飞向球门,可惜偏了"}, + {"text": "停下来等队友接应", "next_index": 6, "feedback": "大个子已经追上来了!"} + ] + }, + {"content": "硬冲被拦住了,球被抢走,哨声响起,比赛结束了。", "node_type": 2, "result_type": 1}, + {"content": "队友射门,球擦着门柱飞了出去,差点进了!你的配合很棒。", "node_type": 2, "result_type": 2}, + {"content": "球滚进了球门远角!进球啦!队友们把你举起来欢呼,你是大英雄!", "node_type": 2, "result_type": 3}, + {"content": "球踢偏了,打在门柱上弹了出去。可惜!但你的假动作骗倒了所有人。", "node_type": 2, "result_type": 2}, + {"content": "你停下来等队友,球却被赶回来的大个子抢走了,哨声响了,比赛结束了。", "node_type": 2, "result_type": 1} + ] + } + ] + } + ] +} diff --git a/biz/service/seed/seed_36_ji/group2.json b/biz/service/seed/seed_36_ji/group2.json new file mode 100644 index 0000000..4e175c5 --- /dev/null +++ b/biz/service/seed/seed_36_ji/group2.json @@ -0,0 +1,292 @@ +{ + "strategies": [ + { + "name": "无中生有", + "pinyin": "wú zhōng shēng yǒu", + "group_no": 2, + "group_name": "敌战计", + "meaning": "从什么都没有,动脑筋想出新办法变出东西来。", + "teach_content": "别人觉得不可能的事,你动动脑筋,想出一个新点子,把它变成真的。美术课上,没有绿色颜料,却想画草地——把蓝色和黄色调在一起,绿色就有了!", + "summary_q": "没有的东西,怎么变出来?", + "summary_options": "[{\"text\":\"动脑筋想新办法\",\"correct\":true},{\"text\":\"哭鼻子\",\"correct\":false},{\"text\":\"抢别人的\",\"correct\":false}]", + "sort_order": 1, + "unlock_before": 6, + "levels": [ + { + "title": "没有绿色的草地", + "scene_name": "美术教室", + "scene_content": "美术课上,大家都趴在小桌上认真画画。", + "age_group": "4-6", + "nodes": [ + { + "title": "绿色用光了", + "character_name": "老师", + "content": "美术课画草地,可是你的绿色颜料用光了。别的颜色都还有,怎么办?", + "is_entry": 1, + "options": [ + {"text": "动脑筋:把蓝色和黄色调在一起", "prop_name": "调色盘", "next_index": 1, "feedback": "你挤了一点蓝色,又挤了一点黄色,搅一搅……"}, + {"text": "找好朋友借绿色,别人不给就哭", "next_index": 2, "feedback": "好朋友也没有多余的绿色"}, + {"text": "把草地画成白色", "next_index": 3, "feedback": "草地上像盖了一层雪"} + ] + }, + { + "title": "浅绿色", + "character_name": "老师", + "content": "调出来的绿色有点浅,和真的草地不一样。怎么办?", + "options": [ + {"text": "再加一点蓝色,慢慢调成深绿", "prop_name": "调色盘", "next_index": 4, "feedback": "你一点一点加蓝色,绿色越来越深!"}, + {"text": "就这样画,草地像刚发芽", "next_index": 5, "feedback": "浅绿也挺好看"}, + {"text": "把颜料全混在一起", "next_index": 6, "feedback": "你干脆把所有颜料都倒了进去"} + ] + }, + {"content": "你哭着找好朋友借,可他也没有多余的绿色,你哭得更伤心了,画也没画成。", "node_type": 2, "result_type": 1}, + {"content": "你画了一片白色的草地,老师奇怪地问:「草地怎么是白的呀?」你答不上来。", "node_type": 2, "result_type": 2}, + {"content": "深绿的草地画好啦!老师看了直夸你:「没有绿色也能变出来,你真会动脑筋!」", "node_type": 2, "result_type": 3}, + {"content": "浅绿的草地也挺好看,像春天的草地刚发芽。老师给你打了个「良」。", "node_type": 2, "result_type": 2}, + {"content": "所有颜色混在一起变成了脏兮兮的褐色,画也毁掉了,你伤心地哭了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "暗渡陈仓", + "pinyin": "àn dù chén cāng", + "group_no": 2, + "group_name": "敌战计", + "meaning": "表面上做一件事,暗地里悄悄准备另一件事。", + "teach_content": "从前打仗,有人表面修路,暗地里却偷偷走另一条路,把敌人骗得团团转。生活中:想给妈妈一个惊喜,就表面说「我去写作业」,暗地里偷偷准备生日礼物!", + "summary_q": "想悄悄准备惊喜,应该?", + "summary_options": "[{\"text\":\"表面不动声色,暗地准备\",\"correct\":true},{\"text\":\"大声宣布我要准备惊喜\",\"correct\":false},{\"text\":\"什么都不准备\",\"correct\":false}]", + "sort_order": 2, + "unlock_before": 7, + "levels": [ + { + "title": "妈妈的生日惊喜", + "scene_name": "家里", + "scene_content": "明天就是妈妈的生日了,客厅里还挂着上次的照片。", + "age_group": "4-6", + "nodes": [ + { + "title": "秘密贺卡", + "character_name": "妈妈", + "content": "明天是妈妈生日,你想做一张贺卡。可是妈妈就在客厅,看见你就不好玩了。怎么办?", + "is_entry": 1, + "options": [ + {"text": "跟妈妈说「我去房间写作业」,关上门悄悄做贺卡", "prop_name": "彩纸", "next_index": 1, "feedback": "你关上门,拿出彩纸,开始画呀剪呀"}, + {"text": "直接在客厅大声说「我要给妈妈做贺卡!」", "next_index": 2, "feedback": "妈妈又惊又喜,但惊喜没了"}, + {"text": "告诉妈妈明天有惊喜,让她猜", "next_index": 3, "feedback": "妈妈猜了半天,好奇心更重了"} + ] + }, + { + "title": "妈妈推门进来了", + "character_name": "妈妈", + "content": "你在房间做贺卡,妈妈推门进来问「作业写完了吗?」怎么办?", + "options": [ + {"text": "把贺卡藏进抽屉,说「快啦快啦」,等妈妈走了再继续", "prop_name": "彩纸", "next_index": 4, "feedback": "妈妈一走,你又拿出贺卡继续做"}, + {"text": "老老实实告诉妈妈在做贺卡", "next_index": 5, "feedback": "妈妈笑了:「原来你在准备惊喜呀」"}, + {"text": "吓得把贺卡揉成一团", "next_index": 6, "feedback": "你太紧张了,贺卡变成了纸团"} + ] + }, + {"content": "你在客厅宣布了惊喜,妈妈很开心,但你也觉得少了点什么——惊喜说出来就不惊喜啦。", "node_type": 2, "result_type": 2}, + {"content": "你让妈妈猜,妈妈猜了一晚上也没猜着,还一直追着问你。", "node_type": 2, "result_type": 2}, + {"content": "贺卡做好了!第二天妈妈看到贺卡,开心得抱住了你:「这真是最好的生日礼物!」", "node_type": 2, "result_type": 3}, + {"content": "你告诉了妈妈,惊喜没了,但妈妈还是很开心地等着收贺卡。", "node_type": 2, "result_type": 2}, + {"content": "贺卡揉皱了,你伤心得直哭,妈妈安慰你,可贺卡已经皱巴巴的了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "隔岸观火", + "pinyin": "gé àn guān huǒ", + "group_no": 2, + "group_name": "敌战计", + "meaning": "别人吵架,不掺和,先看看再说。", + "teach_content": "从前打仗,看到对岸着火了,聪明的将军不慌不忙,等着看。小朋友也一样:别人吵架的时候,不要冲进去掺和,站在旁边看一看,等他们自己冷静下来,说不定自己就和好了。有时候,不去添乱就是帮忙。", + "summary_q": "别人吵架时,聪明的做法是?", + "summary_options": "[{\"text\":\"不掺和,在旁边看看\",\"correct\":true},{\"text\":\"冲进去帮一方打架\",\"correct\":false},{\"text\":\"在旁边喊打起来打起来\",\"correct\":false}]", + "sort_order": 3, + "unlock_before": 8, + "levels": [ + { + "title": "不掺和的小观众", + "scene_name": "幼儿园教室", + "scene_content": "玩具角里,两个小朋友为了一个玩具吵得面红耳赤。", + "age_group": "4-6", + "nodes": [ + { + "title": "他们吵起来了", + "character_name": "小朋友", + "content": "两个小朋友为了一个玩具吵起来了,越吵越凶,马上就要动手。你刚好在旁边,怎么办?", + "is_entry": 1, + "options": [ + {"text": "不掺和,往后退一步,不帮任何一方", "next_index": 1, "feedback": "你退到一边,看着他们"}, + {"text": "冲上去帮自己的好朋友抢玩具", "next_index": 2, "feedback": "你冲进去,自己也吵起来了"}, + {"text": "在旁边喊「打起来!打起来!」", "next_index": 3, "feedback": "你喊得正起劲"} + ] + }, + { + "title": "老师来了", + "character_name": "老师", + "content": "老师听到声音赶过来了,问「发生什么事了?」你当时在场,怎么办?", + "options": [ + {"text": "把看到的情况原原本本告诉老师", "next_index": 4, "feedback": "你说得清清楚楚"}, + {"text": "说「我不知道,我什么都没看见」", "next_index": 5, "feedback": "老师只好自己问"}, + {"text": "说「都是他的错,全怪他!」", "next_index": 6, "feedback": "你只说了其中一个人的不是"} + ] + }, + {"content": "你冲进去帮忙,结果自己也吵起来了,三个人乱成一团,老师批评了你们。", "node_type": 2, "result_type": 1}, + {"content": "你在一旁起哄,老师也批评了你:「别人吵架,你添什么乱!」", "node_type": 2, "result_type": 1}, + {"content": "你把事情说清楚,老师公平地解决了,两个小朋友和好了,还谢谢你当小证人!", "node_type": 2, "result_type": 3}, + {"content": "你说不知道,老师只好自己猜,有个小朋友觉得自己被冤枉了,更委屈了。", "node_type": 2, "result_type": 2}, + {"content": "你只说了一个人的错,老师批评了你:「没看全就不要乱说。」你脸红红的。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "笑里藏刀", + "pinyin": "xiào lǐ cáng dāo", + "group_no": 2, + "group_name": "敌战计", + "meaning": "对谁都笑眯眯,但要小心那些「假好人」。", + "teach_content": "从前有个人,脸上笑眯眯,心里却打着坏主意。小朋友要记住:对人有礼貌、笑呵呵是好事,但是要小心——有人笑嘻嘻地给你糖,说要带你去玩,可你并不认识他,这时候要赶紧跑开,去找爸爸妈妈!对陌生人要保持警惕。", + "summary_q": "陌生人笑嘻嘻给你糖吃,还说带你去玩,你怎么办?", + "summary_options": "[{\"text\":\"赶紧跑开找爸爸妈妈\",\"correct\":true},{\"text\":\"开心地接过来\",\"correct\":false},{\"text\":\"跟他走\",\"correct\":false}]", + "sort_order": 4, + "unlock_before": 9, + "levels": [ + { + "title": "游乐场的小警惕", + "scene_name": "游乐场", + "scene_content": "游乐场里热热闹闹,到处是小朋友的笑声。", + "age_group": "4-6", + "nodes": [ + { + "title": "陌生的叔叔", + "character_name": "陌生人", + "content": "你在游乐场玩,一个不认识的叔叔笑嘻嘻地走过来,拿出糖说「小朋友,叔叔带你去买玩具吧!」你怎么办?", + "is_entry": 1, + "options": [ + {"text": "不接糖,马上跑开,去找爸爸妈妈", "next_index": 1, "feedback": "你撒腿就跑,跑到妈妈身边"}, + {"text": "开心地接过糖,谢谢叔叔", "next_index": 2, "feedback": "你接过了糖,心里美滋滋的"}, + {"text": "犹豫地站着,听叔叔说话", "next_index": 3, "feedback": "你站在原地,不知道怎么办"} + ] + }, + { + "title": "告诉妈妈", + "character_name": "妈妈", + "content": "你跑开找到妈妈,回头一看,那个叔叔还在东张西望。怎么办?", + "options": [ + {"text": "把这件事告诉妈妈,妈妈找工作人员来处理", "next_index": 4, "feedback": "妈妈马上告诉工作人员,他们围住了那个叔叔"}, + {"text": "觉得没事了,自己继续去玩", "next_index": 5, "feedback": "你以为没事了,可那个叔叔还在附近"}, + {"text": "跑回去告诉叔叔「我妈妈来了,你敢怎样」", "next_index": 6, "feedback": "你又一个人跑回去了!"} + ] + }, + {"content": "你接过了陌生人的糖,还差点跟他走,还好妈妈发现得早,一把拉住了你。太危险了!", "node_type": 2, "result_type": 1}, + {"content": "你站在原地听叔叔说话,越来越想跟他去,幸好妈妈及时找过来了。", "node_type": 2, "result_type": 2}, + {"content": "工作人员把那个叔叔带走了,警察叔叔还夸你:「警惕的小朋友最棒!」", "node_type": 2, "result_type": 3}, + {"content": "你觉得没事了,可是那个叔叔又去找别的小朋友了,真危险!", "node_type": 2, "result_type": 2}, + {"content": "叔叔看你一个人跑回来,一把抓住你,还好妈妈跟来了!太危险了!", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "李代桃僵", + "pinyin": "lǐ dài táo jiāng", + "group_no": 2, + "group_name": "敌战计", + "meaning": "用小东西保护重要的东西。", + "teach_content": "从前李树替桃树受过,宁可自己受伤,也要保护朋友。小朋友也能做到:下雨天,书包里最重要的是书和作业本,淋湿了就没法用。可以把雨衣盖在书包上,自己淋一点雨没关系,重要的东西不能湿。", + "summary_q": "下雨了,雨衣只有一件,你会?", + "summary_options": "[{\"text\":\"盖在书包上保护书本\",\"correct\":true},{\"text\":\"自己穿上让书淋湿\",\"correct\":false},{\"text\":\"扔在地上\",\"correct\":false}]", + "sort_order": 5, + "unlock_before": 10, + "levels": [ + { + "title": "下雨天的书包", + "scene_name": "放学路上", + "scene_content": "放学了,天边飘来大片乌云,哗啦啦下起雨来。", + "age_group": "4-6", + "nodes": [ + { + "title": "只有一件雨衣", + "character_name": "妈妈", + "content": "放学突然下雨了,你只有一件小雨衣。书包里装着要交的作业和图画本,淋湿就惨了。怎么办?", + "is_entry": 1, + "options": [ + {"text": "把雨衣盖在书包上,自己快跑回家", "next_index": 1, "feedback": "你抱着包着雨衣的书包跑了起来"}, + {"text": "自己穿上雨衣,书包露在外面", "next_index": 2, "feedback": "你穿好雨衣,书包淋在雨里"}, + {"text": "在屋檐下等雨停,不管时间", "next_index": 3, "feedback": "你在屋檐下等啊等"} + ] + }, + { + "title": "路边的亭子", + "character_name": "小明", + "content": "你抱着包着雨衣的书包往家跑,可是雨更大了。你发现可以躲进路边的亭子。怎么办?", + "options": [ + {"text": "先躲进亭子,等雨小了再走", "next_index": 4, "feedback": "你躲进亭子,甩了甩身上的水"}, + {"text": "继续冲,不怕雨", "next_index": 5, "feedback": "你咬着牙往前冲"}, + {"text": "把雨衣从书包上拿下来自己穿", "next_index": 6, "feedback": "你脱下雨衣穿在自己身上"} + ] + }, + {"content": "你穿上了雨衣,可书包淋透了,作业本上的字都花了。你哭着想:早知道就保护书包了。", "node_type": 2, "result_type": 1}, + {"content": "你在屋檐下等了好久,雨也没停,最后妈妈带伞来接你,回家都晚了。", "node_type": 2, "result_type": 2}, + {"content": "你在亭子里等了一会儿,雨小了才回家。作业干干净净,妈妈夸你:「真会保护重要的东西!」", "node_type": 2, "result_type": 3}, + {"content": "你冲回家,浑身湿透,但书包没湿!作业保住了,不过你第二天感冒了。", "node_type": 2, "result_type": 2}, + {"content": "书包湿透了,作业本上的字都花了,图画本也皱成一团,你哇哇大哭。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "顺手牵羊", + "pinyin": "shùn shǒu qiān yáng", + "group_no": 2, + "group_name": "敌战计", + "meaning": "抓住顺手的机会,轻轻松松把事情办成。", + "teach_content": "这个名字原意是「顺手把羊牵走」,但我们要学会正向用它:看到路上有垃圾,顺手捡起来;发现同学的笔掉了,顺手帮他捡起来;路过水龙头没关,顺手关掉。小小的顺手,就是大大的好事!", + "summary_q": "看到地上有垃圾,你会?", + "summary_options": "[{\"text\":\"顺手捡起来扔进垃圾桶\",\"correct\":true},{\"text\":\"装作没看见\",\"correct\":false},{\"text\":\"踢到一边\",\"correct\":false}]", + "sort_order": 6, + "unlock_before": 11, + "levels": [ + { + "title": "放学路上的小顺手", + "scene_name": "放学路上", + "scene_content": "放学路上,阳光洒在干干净净的马路上。", + "age_group": "4-6", + "nodes": [ + { + "title": "地上的瓶子", + "character_name": "小明", + "content": "放学路上,你看到地上躺着一个矿泉水瓶,旁边的垃圾桶离你只有几步远。怎么办?", + "is_entry": 1, + "options": [ + {"text": "顺手捡起来扔进垃圾桶", "next_index": 1, "feedback": "你弯腰捡起瓶子,扔进了垃圾桶"}, + {"text": "装作没看见,绕过去", "next_index": 2, "feedback": "你绕开了瓶子"}, + {"text": "把它踢到草丛里", "next_index": 3, "feedback": "瓶子滚进了草丛"} + ] + }, + { + "title": "栏杆上的塑料袋", + "character_name": "环卫爷爷", + "content": "你刚把瓶子扔进垃圾桶,又看到前面的栏杆上挂着一个塑料袋,风一吹就要飞走。怎么办?", + "options": [ + {"text": "顺手也把它取下来扔进垃圾桶", "next_index": 4, "feedback": "你踮起脚,把塑料袋取了下来"}, + {"text": "已经扔了一个了,够了", "next_index": 5, "feedback": "你觉得做得够多了"}, + {"text": "不管了,反正不是自己扔的", "next_index": 6, "feedback": "你头也不回地走了"} + ] + }, + {"content": "你绕开了瓶子,可瓶子还在路上,有人踩上去差点滑倒。", "node_type": 2, "result_type": 2}, + {"content": "你把瓶子踢进草丛,草丛里藏了不少垃圾,还引来小虫。", "node_type": 2, "result_type": 1}, + {"content": "你把路上的垃圾都收拾干净了,正好遇到环卫爷爷,他竖着大拇指:「小雷锋!」", "node_type": 2, "result_type": 3}, + {"content": "你扔了瓶子就走了,塑料袋被风吹到了树上,环卫爷爷爬上去取,好辛苦。", "node_type": 2, "result_type": 2}, + {"content": "塑料袋被风吹到了小河里,保洁员叔叔捞了半天。你有点不好意思了。", "node_type": 2, "result_type": 1} + ] + } + ] + } + ] +} diff --git a/biz/service/seed/seed_36_ji/group3.json b/biz/service/seed/seed_36_ji/group3.json new file mode 100644 index 0000000..22b434b --- /dev/null +++ b/biz/service/seed/seed_36_ji/group3.json @@ -0,0 +1,292 @@ +{ + "strategies": [ + { + "name": "打草惊蛇", + "pinyin": "dǎ cǎo jīng shé", + "group_no": 3, + "group_name": "攻战计", + "meaning": "先轻轻试探一下,看看会有什么反应,再决定怎么办。", + "teach_content": "打草的时候会惊动草里的蛇。聪明的猎人会先用棍子敲敲草丛,看看有没有蛇再走。小朋友也一样:不确定的事情,先轻轻试一下,看看反应,再行动,就不会闯祸啦。", + "summary_q": "不清楚情况的时候,先?", + "summary_options": "[{\"text\":\"轻轻试探一下看看\",\"correct\":true},{\"text\":\"直接冲进去\",\"correct\":false},{\"text\":\"闭着眼睛乱来\",\"correct\":false}]", + "sort_order": 1, + "unlock_before": 12, + "levels": [ + { + "title": "找猫咪大行动", + "scene_name": "家里", + "scene_content": "今天家里静悄悄的,小猫咪不知躲到哪里去了。", + "age_group": "4-6", + "nodes": [ + { + "title": "猫咪不见了", + "character_name": "小猫咪", + "content": "猫咪不见了,你猜它可能躲在床底下。可是窗帘后面、柜子里都有可能。怎么办?", + "is_entry": 1, + "options": [ + {"text": "先趴在床下看看,再轻轻喊「喵喵」试探", "next_index": 1, "feedback": "你趴下看了看,又轻轻喊了两声"}, + {"text": "直接扑进床底下乱摸", "next_index": 2, "feedback": "床下黑漆漆的,你什么也没摸到"}, + {"text": "把家里翻个底朝天", "next_index": 3, "feedback": "你把沙发垫、抽屉全翻了一遍"} + ] + }, + { + "title": "窗帘在动", + "character_name": "小猫咪", + "content": "床下没有,你发现窗帘在动!怎么办?", + "options": [ + {"text": "轻轻拉开一点窗帘看看", "next_index": 4, "feedback": "你小心翼翼地拉开一角"}, + {"text": "一把掀开窗帘大喊「找到你了!」", "next_index": 5, "feedback": "你猛地把窗帘掀开"}, + {"text": "对着窗帘扔枕头", "next_index": 6, "feedback": "你抓起枕头就扔了过去"} + ] + }, + {"content": "床下黑漆漆的,你摸了半天什么也没摸到,还蹭了一身灰。", "node_type": 2, "result_type": 1}, + {"content": "你把家里翻得乱七八糟,妈妈回来以为进了小偷,猫咪却还在窝里睡大觉。", "node_type": 2, "result_type": 1}, + {"content": "窗帘后面果然是小猫咪!它正在玩你的玩具老鼠。你轻轻抱它出来,猫咪蹭蹭你,好乖!", "node_type": 2, "result_type": 3}, + {"content": "窗帘一掀,猫咪吓得窜出去躲到了沙发底下,怎么哄都不出来。", "node_type": 2, "result_type": 2}, + {"content": "枕头砸过去,猫咪被吓坏了,窜到书架上,还把花瓶碰倒了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "借尸还魂", + "pinyin": "jiè shī huán hún", + "group_no": 3, + "group_name": "攻战计", + "meaning": "让旧东西动动脑筋,重新派上用场。", + "teach_content": "从前有个将军,借助别人的旗号重新出发,这叫「借尸还魂」。小朋友可以这样用:旧盒子变成小汽车的停车场,旧瓶子变成笔筒,旧衣服变成抹布——旧东西动动脑筋,就能重新变得有用!", + "summary_q": "旧盒子没用了,你会?", + "summary_options": "[{\"text\":\"动脑筋把它变成新东西\",\"correct\":true},{\"text\":\"扔进垃圾桶\",\"correct\":false},{\"text\":\"生气地踩扁\",\"correct\":false}]", + "sort_order": 2, + "unlock_before": 13, + "levels": [ + { + "title": "旧盒子大变身", + "scene_name": "家里", + "scene_content": "周末的下午,阳光照在茶几上的空饼干盒上。", + "age_group": "4-6", + "nodes": [ + { + "title": "饼干盒没用了", + "character_name": "妈妈", + "content": "家里有个空饼干盒,妈妈说「没用了,扔了吧」。你觉得它还能有用,怎么办?", + "is_entry": 1, + "options": [ + {"text": "想一想,把它变成玩具停车场", "next_index": 1, "feedback": "你眼前一亮,想到了好主意"}, + {"text": "同意妈妈,扔进垃圾桶", "next_index": 2, "feedback": "饼干盒进了垃圾桶"}, + {"text": "把它装水当水枪玩", "next_index": 3, "feedback": "你装了一盒水,洒得到处都是"} + ] + }, + { + "title": "停车场做好了", + "character_name": "妈妈", + "content": "停车场做好了!可是盒子里空空的,缺点什么。你发现旁边有一辆小汽车玩具。怎么办?", + "options": [ + {"text": "把小汽车放进去,再画上停车位", "prop_name": "小汽车", "next_index": 4, "feedback": "你画了一排整整齐齐的停车位"}, + {"text": "就这样放着,也很棒", "next_index": 5, "feedback": "你满意地看了看盒子"}, + {"text": "又想要别的盒子,把停车场拆了", "next_index": 6, "feedback": "你拆了停车场,又去找新盒子"} + ] + }, + {"content": "饼干盒进了垃圾桶,妈妈扔垃圾的时候,它真的没用了。", "node_type": 2, "result_type": 2}, + {"content": "你装水玩,水洒了一地,妈妈擦了半天地,饼干盒也湿透了。", "node_type": 2, "result_type": 1}, + {"content": "停车场画好了停车位,小汽车停得整整齐齐!妈妈看了直夸:「旧盒子变成宝贝了!」", "node_type": 2, "result_type": 3}, + {"content": "停车场做好了,虽然空空的,但你很有成就感,妈妈夸你手真巧。", "node_type": 2, "result_type": 2}, + {"content": "停车场刚做完你就拆了,什么都剩不下。做事情要有始有终哦。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "调虎离山", + "pinyin": "diào hǔ lí shān", + "group_no": 3, + "group_name": "攻战计", + "meaning": "把对方引开,再去做自己的事。", + "teach_content": "从前打仗,把凶猛的老虎从山上引开,再上山。小朋友也能用:弟弟霸占着电视机不让你看动画片,你可以把他喜欢的气球放到阳台上,他跑去看气球,你就可以看动画片啦!(当然,看完要分享)", + "summary_q": "弟弟霸占电视,聪明的办法是?", + "summary_options": "[{\"text\":\"把他引开再去看\",\"correct\":true},{\"text\":\"抢遥控器\",\"correct\":false},{\"text\":\"哭着喊妈妈\",\"correct\":false}]", + "sort_order": 3, + "unlock_before": 14, + "levels": [ + { + "title": "遥控器争夺战", + "scene_name": "家里", + "scene_content": "客厅里,动画片马上就要开始了。", + "age_group": "4-6", + "nodes": [ + { + "title": "霸占电视的弟弟", + "character_name": "弟弟", + "content": "弟弟霸着电视看广告,你要看动画片,可节目马上要开始了。怎么办?", + "is_entry": 1, + "options": [ + {"text": "把弟弟喜欢的皮球滚到门口,引他去追", "prop_name": "皮球", "next_index": 1, "feedback": "皮球咕噜噜滚到门口,弟弟眼睛一亮"}, + {"text": "抢过遥控器", "next_index": 2, "feedback": "你一把抢过遥控器,弟弟哇地哭了"}, + {"text": "直接换台", "next_index": 3, "feedback": "你趁弟弟不注意按了换台键"} + ] + }, + { + "title": "遥控器不见了", + "character_name": "小明", + "content": "弟弟去追球了!你正要调台,发现遥控器被压在沙发垫下面。怎么办?", + "options": [ + {"text": "轻轻拿出遥控器,调到自己要看的台", "next_index": 4, "feedback": "你拿出遥控器,调好了台"}, + {"text": "大声喊「遥控器呢?谁拿了!」", "next_index": 5, "feedback": "你喊得太大声了"}, + {"text": "用力把沙发垫掀起来", "next_index": 6, "feedback": "你把沙发垫掀翻在地"} + ] + }, + {"content": "你抢走遥控器,弟弟哇哇大哭,妈妈批评了你,电视关了,谁也看不成。", "node_type": 2, "result_type": 1}, + {"content": "你趁弟弟不注意换了台,弟弟回头一看,又哭又闹,妈妈只好关了电视。", "node_type": 2, "result_type": 1}, + {"content": "你调好台,动画片刚好开始!弟弟回来想看广告,你答应他看完动画片就一起玩球,他高高兴兴答应了!", "node_type": 2, "result_type": 3}, + {"content": "你喊得太大声,弟弟跑回来,发现你在偷偷换台,又哭又闹,电视还是关了。", "node_type": 2, "result_type": 2}, + {"content": "沙发垫被你掀翻在地,妈妈走过来问怎么回事,批评你动静太大。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "欲擒故纵", + "pinyin": "yù qín gù zòng", + "group_no": 3, + "group_name": "攻战计", + "meaning": "想抓住它,先故意放松,让它自己靠近。", + "teach_content": "想捉住一只小鸟,追着跑会把它吓跑;停下不动,撒一把米,小鸟反而会自己飞过来。小朋友:想和小伙伴和好,追着他道歉会把他吓跑;先不追,安静地玩自己的,他反而会过来找你。", + "summary_q": "想和小伙伴和好,应该?", + "summary_options": "[{\"text\":\"先不追他,安静等他过来\",\"correct\":true},{\"text\":\"追着他不放\",\"correct\":false},{\"text\":\"叫别人都不理他\",\"correct\":false}]", + "sort_order": 4, + "unlock_before": 15, + "levels": [ + { + "title": "怕人的小仓鼠", + "scene_name": "家里", + "scene_content": "小仓鼠的新笼子摆在书桌上,里面铺着软软的木屑。", + "age_group": "4-6", + "nodes": [ + { + "title": "躲起来的小仓鼠", + "character_name": "小仓鼠", + "content": "妈妈买了一只小仓鼠,它一看到你就躲进木屑里。你想和它做朋友,怎么办?", + "is_entry": 1, + "options": [ + {"text": "不追它,放一点瓜子,安静地等着", "prop_name": "瓜子", "next_index": 1, "feedback": "你放了几颗瓜子,坐在旁边一动不动"}, + {"text": "一把抓住它摸摸", "next_index": 2, "feedback": "你伸手就抓,小仓鼠吓得吱吱叫"}, + {"text": "敲笼子让它出来", "next_index": 3, "feedback": "你敲了敲笼子,它缩得更深了"} + ] + }, + { + "title": "它出来了!", + "character_name": "小仓鼠", + "content": "小仓鼠闻了闻瓜子,慢慢出来了,可你一伸手它又躲回去。怎么办?", + "options": [ + {"text": "收回手,保持安静,等它自己来吃", "prop_name": "瓜子", "next_index": 4, "feedback": "你又安静地坐好,一动不动"}, + {"text": "飞快地抓住它", "next_index": 5, "feedback": "你眼疾手快,一把抓住了它"}, + {"text": "失去耐心,把瓜子收走", "next_index": 6, "feedback": "你收起瓜子,不喂了"} + ] + }, + {"content": "你伸手就抓,小仓鼠吓得吱吱叫,钻到木屑最深处,再也不出来了。", "node_type": 2, "result_type": 1}, + {"content": "你敲笼子,小仓鼠缩成一团,躲在角落里发抖,好可怜。", "node_type": 2, "result_type": 1}, + {"content": "你安静地等了一会儿,小仓鼠终于爬到你手心里吃瓜子!它还在你手心打了个滚,你们成了好朋友!", "node_type": 2, "result_type": 3}, + {"content": "你飞快一抓,小仓鼠被吓到,好几天都不肯出窝,看来要慢慢来。", "node_type": 2, "result_type": 2}, + {"content": "你把瓜子收走了,小仓鼠失望地缩回窝里。信任可不是一天能建立的。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "抛砖引玉", + "pinyin": "pāo zhuān yǐn yù", + "group_no": 3, + "group_name": "攻战计", + "meaning": "先拿出自己的好东西分享,引来大家的好东西。", + "teach_content": "从前有人先扔出一块砖头,结果引出别人一块宝玉。小朋友:在幼儿园拿出自己的新积木分享,大家开心了,也会把自己的玩具分享给你。想收获,先付出。", + "summary_q": "想让别人分享玩具,先?", + "summary_options": "[{\"text\":\"拿出自己的玩具分享\",\"correct\":true},{\"text\":\"抢别人的玩具\",\"correct\":false},{\"text\":\"藏起自己的玩具\",\"correct\":false}]", + "sort_order": 5, + "unlock_before": 16, + "levels": [ + { + "title": "分享的魔法", + "scene_name": "幼儿园教室", + "scene_content": "自由活动时间,教室里热热闹闹的。", + "age_group": "4-6", + "nodes": [ + { + "title": "新蜡笔", + "character_name": "小朋友", + "content": "你带了一盒新蜡笔到幼儿园。大家都想用,可你也想看看别人有什么好玩的。怎么办?", + "is_entry": 1, + "options": [ + {"text": "大方地把蜡笔借给大家,一起画", "prop_name": "蜡笔", "next_index": 1, "feedback": "大家围过来,谢谢你,一起画了起来"}, + {"text": "把蜡笔藏起来自己用", "next_index": 2, "feedback": "你把蜡笔藏进书包里"}, + {"text": "告诉别人「想用蜡笔就得拿玩具换」", "next_index": 3, "feedback": "大家听了,都走开了"} + ] + }, + { + "title": "恐龙玩具", + "character_name": "好朋友", + "content": "你把蜡笔借给了大家,画得正开心,好朋友拿出了他的恐龙玩具模型说「给你玩!」怎么办?", + "options": [ + {"text": "开心地接过恐龙,还谢谢他", "prop_name": "蜡笔", "next_index": 4, "feedback": "你接过恐龙,大声说了谢谢"}, + {"text": "说「我才不要呢,我要我的蜡笔」", "next_index": 5, "feedback": "好朋友有点失望"}, + {"text": "一把抢过来", "next_index": 6, "feedback": "你伸手就抢"} + ] + }, + {"content": "你藏起蜡笔,大家都不跟你玩了,你一个人孤零零地画画。", "node_type": 2, "result_type": 1}, + {"content": "你说要拿玩具换,大家觉得你小气,都不愿意跟你玩了。", "node_type": 2, "result_type": 1}, + {"content": "你用蜡笔换来了恐龙玩具,大家画了最漂亮的一幅画,都谢谢你!分享让快乐翻倍!", "node_type": 2, "result_type": 3}, + {"content": "你说不要,好朋友有点失望,收起了恐龙。其实你也很想玩吧?", "node_type": 2, "result_type": 2}, + {"content": "你抢过恐龙,好朋友哭了,老师说:「分享是互相的。」你脸红了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "擒贼擒王", + "pinyin": "qín zéi qín wáng", + "group_no": 3, + "group_name": "攻战计", + "meaning": "解决问题,先抓住最关键的地方。", + "teach_content": "打仗要先抓头领,头领被抓,士兵就散了。小朋友:班里有人带头起哄吵闹,你劝了这个那个又闹;不如找到带头的那个小朋友,跟他说清楚道理,问题就解决了。抓住关键,事半功倍。", + "summary_q": "一群人起哄,先劝谁?", + "summary_options": "[{\"text\":\"先劝带头的那个人\",\"correct\":true},{\"text\":\"挨个劝每个人\",\"correct\":false},{\"text\":\"不管他们\",\"correct\":false}]", + "sort_order": 6, + "unlock_before": 17, + "levels": [ + { + "title": "起哄的小课堂", + "scene_name": "教室", + "scene_content": "自习课的铃声刚响过,教室里响起一阵吵闹声。", + "age_group": "4-6", + "nodes": [ + { + "title": "自习课好吵", + "character_name": "值日班长", + "content": "自习课,几个小朋友起哄吵闹,连值日班长都管不住。你想安静学习,怎么办?", + "is_entry": 1, + "options": [ + {"text": "找到带头吵闹的那个小朋友,小声提醒他", "next_index": 1, "feedback": "你找到带头的「小司令」"}, + {"text": "大声喊「都别吵了!」", "next_index": 2, "feedback": "你喊了一声,大家都愣了"}, + {"text": "捂住耳朵继续学习", "next_index": 3, "feedback": "你捂住耳朵,可还是听得见"} + ] + }, + { + "title": "小司令", + "character_name": "小司令", + "content": "你找到带头的「小司令」,他正吵得起劲。怎么办?", + "options": [ + {"text": "小声跟他说「老师说自习课表现好的能当值日班长,你带个头安静下来?」", "next_index": 4, "feedback": "小司令眼睛一亮"}, + {"text": "当着大家面批评他", "next_index": 5, "feedback": "你当着大家的面说了他"}, + {"text": "也加入吵闹", "next_index": 6, "feedback": "你觉得无聊,也喊了起来"} + ] + }, + {"content": "你喊「都别吵了」,安静了两秒,大家又吵了起来,反而更热闹了。", "node_type": 2, "result_type": 1}, + {"content": "你捂住耳朵,可吵闹声还是钻进来,一个字也看不进去。", "node_type": 2, "result_type": 2}, + {"content": "带头的听进去了,故意咳嗽一声:「安静!」全班都安静了!老师回来表扬了你们,你还当上了值日小班长!", "node_type": 2, "result_type": 3}, + {"content": "你当着大家批评他,他恼羞成怒,吵得更凶了,还把你也拉下水。", "node_type": 2, "result_type": 1}, + {"content": "你加入吵闹,被老师抓个正着,和起哄的人一起被批评了。", "node_type": 2, "result_type": 1} + ] + } + ] + } + ] +} diff --git a/biz/service/seed/seed_36_ji/group4.json b/biz/service/seed/seed_36_ji/group4.json new file mode 100644 index 0000000..2481d68 --- /dev/null +++ b/biz/service/seed/seed_36_ji/group4.json @@ -0,0 +1,292 @@ +{ + "strategies": [ + { + "name": "釜底抽薪", + "pinyin": "fǔ dǐ chōu xīn", + "group_no": 4, + "group_name": "混战计", + "meaning": "从根上解决问题:锅底下把柴火抽掉,水就烧不开了。", + "teach_content": "锅里的水烧得再开,把锅底的柴火抽走,水就凉了。小朋友:抽屉老是乱,收拾了又乱——因为里面的东西太多了,先把不用的东西拿出来,根子解决了,抽屉自然就整齐了。", + "summary_q": "抽屉总乱,根本原因可能是?", + "summary_options": "[{\"text\":\"东西太多放不下\",\"correct\":true},{\"text\":\"运气不好\",\"correct\":false},{\"text\":\"抽屉自己会乱\",\"correct\":false}]", + "sort_order": 1, + "unlock_before": 18, + "levels": [ + { + "title": "乱糟糟的抽屉", + "scene_name": "家里", + "scene_content": "书桌的抽屉鼓鼓的,好像随时要撑开。", + "age_group": "4-6", + "nodes": [ + { + "title": "总也收拾不好的抽屉", + "character_name": "妈妈", + "content": "你的抽屉塞满了东西,每次找文具都要翻半天,刚收拾好又乱了。怎么办?", + "is_entry": 1, + "options": [ + {"text": "把抽屉里不用的东西都拿出来,只留常用的", "next_index": 1, "feedback": "你把抽屉里的东西一件件拿出来"}, + {"text": "把抽屉关上不看,眼不见心不烦", "next_index": 2, "feedback": "你啪地关上抽屉"}, + {"text": "再买一个大一点的抽屉", "next_index": 3, "feedback": "你央求妈妈买新抽屉"} + ] + }, + { + "title": "堆了一桌", + "character_name": "妈妈", + "content": "你拿出来的东西堆了一桌:旧作业本、断铅笔、小石头……怎么办?", + "options": [ + {"text": "分类:能用的留下,没用的扔掉或送给别人", "next_index": 4, "feedback": "你开始分类整理"}, + {"text": "全部又塞回抽屉", "next_index": 5, "feedback": "你又把它们全塞了回去"}, + {"text": "看着这堆东西发呆", "next_index": 6, "feedback": "你坐在桌前发呆"} + ] + }, + {"content": "你关上抽屉,可第二天找铅笔,又翻了半天,抽屉更乱了。", "node_type": 2, "result_type": 1}, + {"content": "你买了大抽屉,可东西更多了,乱得更厉害,找东西更难了。", "node_type": 2, "result_type": 1}, + {"content": "抽屉里只留下有用的东西,整整齐齐!找文具一秒钟就能找到,妈妈夸你是整理小能手!", "node_type": 2, "result_type": 3}, + {"content": "你又把东西全塞回去了,抽屉更挤了,刚关上,拉手就被撑掉了。", "node_type": 2, "result_type": 1}, + {"content": "你发呆半天,最后还是妈妈帮你收拾的。下次试试自己动手?", "node_type": 2, "result_type": 2} + ] + } + ] + }, + { + "name": "混水摸鱼", + "pinyin": "hún shuǐ mō yú", + "group_no": 4, + "group_name": "混战计", + "meaning": "大家乱成一团的时候,正是悄悄做事的好机会。", + "teach_content": "水搅浑了,鱼看不清方向,正好摸鱼。小朋友要用它做好事:大家抢着玩滑梯乱成一团,你悄悄把散落的积木收拾好,等大家安静下来,老师会表扬你,积木也整齐了。", + "summary_q": "大家抢玩具乱成一团,你会?", + "summary_options": "[{\"text\":\"悄悄把散落的玩具收好\",\"correct\":true},{\"text\":\"也冲进去抢\",\"correct\":false},{\"text\":\"在旁边看热闹\",\"correct\":false}]", + "sort_order": 2, + "unlock_before": 19, + "levels": [ + { + "title": "乱成一团的积木角", + "scene_name": "幼儿园教室", + "scene_content": "积木角里,积木散了一地,几个小朋友吵成一团。", + "age_group": "4-6", + "nodes": [ + { + "title": "抢积木", + "character_name": "小朋友", + "content": "自由活动时间,好几个小朋友抢积木,吵成一团,积木撒了一地。你想玩积木,怎么办?", + "is_entry": 1, + "options": [ + {"text": "先悄悄把地上的积木一块块收进筐里", "prop_name": "积木", "next_index": 1, "feedback": "你蹲下,一块块把积木收进筐里"}, + {"text": "冲进去一起抢", "next_index": 2, "feedback": "你也冲进去抢,越抢越乱"}, + {"text": "在旁边看他们抢,等他们抢完", "next_index": 3, "feedback": "你站在旁边看"} + ] + }, + { + "title": "小伙伴来帮忙", + "character_name": "小朋友", + "content": "你收着积木,一个小伙伴看见了,也蹲下来帮你收。怎么办?", + "options": [ + {"text": "谢谢你,一起把积木收完,再一起搭城堡", "prop_name": "积木", "next_index": 4, "feedback": "你们一起收,筐子很快就满了"}, + {"text": "说「你别动,我自己收」", "next_index": 5, "feedback": "小伙伴站起来,走开了"}, + {"text": "叫他别收了,一起去抢", "next_index": 6, "feedback": "你拉着小伙伴去抢积木"} + ] + }, + {"content": "你冲进去抢积木,抢得最凶,老师走过来,把积木全收走了,谁也玩不成。", "node_type": 2, "result_type": 1}, + {"content": "你站在旁边看他们抢,等他们抢完,积木已经踩坏了好几块。", "node_type": 2, "result_type": 2}, + {"content": "积木收好了!老师让大家安静搭积木,你和小伙伴搭了一座大城堡,老师夸你们:「乱中不乱,真棒!」", "node_type": 2, "result_type": 3}, + {"content": "你一个人收完了积木,有点累,但老师表扬了你。要是有人帮忙会更快哦。", "node_type": 2, "result_type": 2}, + {"content": "你们冲进去抢积木,越抢越乱,最后积木被老师全部收走,谁也玩不成了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "金蝉脱壳", + "pinyin": "jīn chán tuō qiào", + "group_no": 4, + "group_name": "混战计", + "meaning": "留个假象,自己悄悄离开。", + "teach_content": "蝉蜕掉壳飞走了,壳还留在树上,别人以为它还在。小朋友:玩得正高兴,可是该回家吃饭了,硬走会闹;可以跟朋友说「我去喝口水」,然后跟爸爸妈妈回家,朋友还以为你还在呢。(当然,第二天记得告诉朋友)", + "summary_q": "玩得正高兴却要回家了,怎么走?", + "summary_options": "[{\"text\":\"找个理由悄悄离开\",\"correct\":true},{\"text\":\"大哭大闹不走\",\"correct\":false},{\"text\":\"偷跑不告诉任何人\",\"correct\":false}]", + "sort_order": 3, + "unlock_before": 20, + "levels": [ + { + "title": "再见游乐场", + "scene_name": "游乐场", + "scene_content": "游乐场里,滑梯、秋千、跷跷板,样样都好玩。", + "age_group": "4-6", + "nodes": [ + { + "title": "该回家了", + "character_name": "妈妈", + "content": "在游乐场玩得正开心,妈妈说该回家吃饭了。你不想被大家说「玩得好好的怎么走了」,怎么办?", + "is_entry": 1, + "options": [ + {"text": "跟小伙伴说「我去买水」,然后跟妈妈悄悄离开", "next_index": 1, "feedback": "你跟小伙伴挥挥手,悄悄走向门口"}, + {"text": "哭着说「我不走!」", "next_index": 2, "feedback": "你抱着滑梯不放,大哭起来"}, + {"text": "趁妈妈不注意偷偷躲起来", "next_index": 3, "feedback": "你躲到了滑梯底下"} + ] + }, + { + "title": "落下的书包", + "character_name": "小明", + "content": "你跟妈妈走到门口,突然想起小书包还落在滑梯那边。怎么办?", + "options": [ + {"text": "回去拿书包,跟小伙伴说实话「我回家啦,明天见」", "next_index": 4, "feedback": "你跑回去拿了书包"}, + {"text": "跟妈妈说「算了,不要了」", "next_index": 5, "feedback": "你拉着妈妈就走"}, + {"text": "跑回去再玩一会儿", "next_index": 6, "feedback": "你跑回滑梯又玩了起来"} + ] + }, + {"content": "你抱着滑梯大哭,妈妈哄了半天,最后只好让你多玩五分钟,饭都凉了。", "node_type": 2, "result_type": 1}, + {"content": "你躲了起来,妈妈找不到你,急得团团转,最后在滑梯底下找到了浑身是灰的你。", "node_type": 2, "result_type": 1}, + {"content": "你拿回书包,跟小伙伴挥挥手:「明天见!」大家都不难过,还约好明天再来!妈妈夸你懂礼貌。", "node_type": 2, "result_type": 3}, + {"content": "你到家了才想起书包,妈妈只好明天帮你拿。重要的东西可不能丢三落四。", "node_type": 2, "result_type": 2}, + {"content": "你跑回去又玩了起来,妈妈找了半天,急得团团转,回家晚了,饭也凉了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "关门捉贼", + "pinyin": "guān mén zhuō zéi", + "group_no": 4, + "group_name": "混战计", + "meaning": "把问题困在门里,关起门来解决。", + "teach_content": "发现坏人进了院子,先关好门,不让他跑掉,再叫大人来抓。小朋友:家里飞进来一只大蛾子,你怕它跑,先关上窗户,再请爸爸用纸把它捉住放出去。", + "summary_q": "屋里飞进虫子,第一步先?", + "summary_options": "[{\"text\":\"关好门窗不让它跑\",\"correct\":true},{\"text\":\"追着它满屋跑\",\"correct\":false},{\"text\":\"大哭\",\"correct\":false}]", + "sort_order": 4, + "unlock_before": 21, + "levels": [ + { + "title": "抓蛾子大作战", + "scene_name": "家里", + "scene_content": "晚上,台灯亮着,房间里安安静静。", + "age_group": "4-6", + "nodes": [ + { + "title": "飞来一只大蛾子", + "character_name": "爸爸", + "content": "晚上,一只大蛾子飞进了你的房间,在你头顶转来转去。你有点害怕,怎么办?", + "is_entry": 1, + "options": [ + {"text": "先关好窗户和门,不让它飞出去,再请爸爸帮忙", "next_index": 1, "feedback": "你关好门窗,跑去找爸爸"}, + {"text": "用枕头乱打乱赶", "next_index": 2, "feedback": "你举起枕头一阵乱打"}, + {"text": "关上灯假装睡觉", "next_index": 3, "feedback": "你关了灯,蒙着被子"} + ] + }, + { + "title": "爸爸来了", + "character_name": "爸爸", + "content": "爸爸拿着一个纸杯和一张卡片来了,蛾子停在窗帘上。怎么办?", + "options": [ + {"text": "用纸杯轻轻扣住蛾子,再用卡片从下面一划,捉住了", "prop_name": "纸杯", "next_index": 4, "feedback": "你学着爸爸的样子,轻轻地……"}, + {"text": "让爸爸用手拍死它", "next_index": 5, "feedback": "爸爸伸手一拍"}, + {"text": "你躲在爸爸身后,让他自己想办法", "next_index": 6, "feedback": "你躲在爸爸身后探出头"} + ] + }, + {"content": "你举着枕头乱打,蛾子吓得满屋乱飞,最后飞进了窗帘缝里,怎么也找不到。", "node_type": 2, "result_type": 1}, + {"content": "你关灯蒙着被子,可蛾子嗡嗡的声音一直在耳边,一晚上都没睡好。", "node_type": 2, "result_type": 2}, + {"content": "爸爸用纸杯轻轻扣住蛾子,打开窗户放了出去!你学会了这个办法:「下次我自己来!」", "node_type": 2, "result_type": 3}, + {"content": "爸爸用手拍,蛾子飞走了,还在房间里乱转。拍虫子不但没捉住,还弄脏了窗帘。", "node_type": 2, "result_type": 1}, + {"content": "爸爸捉住了蛾子,但你全程躲在身后。下次勇敢一点,你也能学会!", "node_type": 2, "result_type": 2} + ] + } + ] + }, + { + "name": "远交近攻", + "pinyin": "yuǎn jiāo jìn gōng", + "group_no": 4, + "group_name": "混战计", + "meaning": "先解决眼前的问题,再想远处的事。", + "teach_content": "打仗时,先和远处的国家做朋友,先攻打眼前的敌人。小朋友:你有一个远方的笔友,但眼前和小明闹别扭了。先跟小明和好,把眼前的事解决好,再写信给笔友,就是远交近攻。", + "summary_q": "和眼前的人闹矛盾,先?", + "summary_options": "[{\"text\":\"先和眼前的人和好\",\"correct\":true},{\"text\":\"先不理他去找别人玩\",\"correct\":false},{\"text\":\"等他来找你\",\"correct\":false}]", + "sort_order": 5, + "unlock_before": 22, + "levels": [ + { + "title": "和好的第一步", + "scene_name": "幼儿园教室", + "scene_content": "午后的教室里,小朋友们三三两两在玩。", + "age_group": "4-6", + "nodes": [ + { + "title": "闹别扭的同桌", + "character_name": "小明", + "content": "你和同桌小明因为一支铅笔闹别扭了,谁也不理谁。可是你们每天都坐在一起,怎么办?", + "is_entry": 1, + "options": [ + {"text": "先主动跟小明和好,把眼前的矛盾解决", "next_index": 1, "feedback": "你鼓起勇气,走到小明面前"}, + {"text": "换座位,再也不跟他坐一起", "next_index": 2, "feedback": "你搬着书换到了最后一排"}, + {"text": "跟别的小朋友玩,不理他", "next_index": 3, "feedback": "你去找别人玩,可心里还惦记着小明"} + ] + }, + { + "title": "小明的别扭", + "character_name": "小明", + "content": "你鼓起勇气跟小明说话,他还有点别扭。怎么办?", + "options": [ + {"text": "把铅笔还给他,说「对不起,我们一起用吧」", "next_index": 4, "feedback": "你把铅笔递过去"}, + {"text": "说「你不理我就算了」", "next_index": 5, "feedback": "你有点委屈"}, + {"text": "威胁他「不跟你好了」", "next_index": 6, "feedback": "你撅起了嘴"} + ] + }, + {"content": "你换了座位,可新同桌不熟,画画时也没有人借你橡皮了。", "node_type": 2, "result_type": 2}, + {"content": "你去找别人玩,可心里总惦记着小明,玩得一点也不开心。", "node_type": 2, "result_type": 2}, + {"content": "小明接过了铅笔,笑了:「我也对不起!」你们又成了好朋友,一起画画,比吵架前还要好!", "node_type": 2, "result_type": 3}, + {"content": "你说了句「算了」,小明也没接话,你们和好了,但总觉得少了点什么。", "node_type": 2, "result_type": 2}, + {"content": "你说「不跟你好了」,小明难过地哭了。你自己也觉得心里不好受。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "假道伐虢", + "pinyin": "jiǎ dào fá guó", + "group_no": 4, + "group_name": "混战计", + "meaning": "借路要通过,必须先说清楚原因,不能骗人。", + "teach_content": "从前有人假借路过,其实想打人家,这是不对的。小朋友要学正向的:借用别人的东西或地方,一定要说清楚为什么借、借多久,不能骗人。想从同学那借彩纸,就说「我要做手工,借两张,下午还你」,别人放心,你也能借到。", + "summary_q": "想借别人的东西,应该?", + "summary_options": "[{\"text\":\"说清楚理由和归还时间\",\"correct\":true},{\"text\":\"骗他说马上还其实不还\",\"correct\":false},{\"text\":\"直接拿走\",\"correct\":false}]", + "sort_order": 6, + "unlock_before": 23, + "levels": [ + { + "title": "借彩纸", + "scene_name": "教室", + "scene_content": "美术课开始了,桌子上摆满了彩纸和剪刀。", + "age_group": "4-6", + "nodes": [ + { + "title": "彩纸用完了", + "character_name": "同桌", + "content": "美术课你的彩纸用完了,同桌有一大包。你想借几张,怎么办?", + "is_entry": 1, + "options": [ + {"text": "跟同桌说清楚:「我想做贺卡,借我三张,下午还你」", "next_index": 1, "feedback": "同桌抬起头看你"}, + {"text": "趁他不注意拿几张", "next_index": 2, "feedback": "你悄悄伸手拿了几张"}, + {"text": "直接伸手拿,「用你几张没关系吧」", "next_index": 3, "feedback": "你伸手就拿"} + ] + }, + { + "title": "没还的尺子", + "character_name": "同桌", + "content": "同桌说「行,但你上次借我的尺子还没还呢」。怎么办?", + "options": [ + {"text": "马上把尺子找出来还给他,再借彩纸", "next_index": 4, "feedback": "你翻出书包,找到了尺子"}, + {"text": "说「尺子?我忘啦,下次吧」", "next_index": 5, "feedback": "同桌收回了彩纸"}, + {"text": "生气地说「小气鬼!」", "next_index": 6, "feedback": "同桌委屈地哭了"} + ] + }, + {"content": "你偷偷拿了彩纸,同桌发现少了,在教室里问了一圈,你脸红红的,不敢说话。", "node_type": 2, "result_type": 1}, + {"content": "你直接拿,同桌说「你还没问我呢!」可纸已经撕开了,他很不高兴。", "node_type": 2, "result_type": 1}, + {"content": "尺子还了,彩纸也借到了。同桌说:「跟你借东西最放心!」你心里美滋滋的。", "node_type": 2, "result_type": 3}, + {"content": "你又说话不算话,同桌收回了彩纸。信用就像小树苗,骗一次就折一次。", "node_type": 2, "result_type": 1}, + {"content": "你说他小气,同桌委屈地哭了。其实不还东西的人是你呀。", "node_type": 2, "result_type": 2} + ] + } + ] + } + ] +} diff --git a/biz/service/seed/seed_36_ji/group5.json b/biz/service/seed/seed_36_ji/group5.json new file mode 100644 index 0000000..46bdcf4 --- /dev/null +++ b/biz/service/seed/seed_36_ji/group5.json @@ -0,0 +1,292 @@ +{ + "strategies": [ + { + "name": "偷梁换柱", + "pinyin": "tōu liáng huàn zhù", + "group_no": 5, + "group_name": "并战计", + "meaning": "把关键的东西换掉,事情就变好了。", + "teach_content": "从前有人把房子的梁柱偷偷换掉。小朋友正向用它:遥控汽车不动了,原来是电池没电了,换上新电池,汽车又跑起来了!换个关键零件,问题就解决了。", + "summary_q": "遥控车不动了,先检查?", + "summary_options": "[{\"text\":\"是不是电池没电了\",\"correct\":true},{\"text\":\"车坏了扔掉\",\"correct\":false},{\"text\":\"敲一敲\",\"correct\":false}]", + "sort_order": 1, + "unlock_before": 24, + "levels": [ + { + "title": "遥控车复活记", + "scene_name": "家里", + "scene_content": "客厅地板上,红色的遥控车静静地停着。", + "age_group": "4-6", + "nodes": [ + { + "title": "遥控车不动了", + "character_name": "爸爸", + "content": "你的遥控车突然不动了,怎么按都没反应。你有点着急,怎么办?", + "is_entry": 1, + "options": [ + {"text": "检查一下:是不是电池没电了", "prop_name": "电池", "next_index": 1, "feedback": "你打开电池盒,看了一眼"}, + {"text": "生气地把车扔到一边", "next_index": 2, "feedback": "你把车扔到了沙发上"}, + {"text": "一直按遥控器,觉得它会好", "next_index": 3, "feedback": "你按了又按,车还是不动"} + ] + }, + { + "title": "电池软软的", + "character_name": "爸爸", + "content": "打开电池盒,果然电池软软的没电了。抽屉里有两节新电池。怎么办?", + "options": [ + {"text": "换上新电池,再试试", "prop_name": "电池", "next_index": 4, "feedback": "你装上新电池,按下开关"}, + {"text": "只换一节,另一节留着", "next_index": 5, "feedback": "你只换了一节电池"}, + {"text": "不会换,等着爸爸来", "next_index": 6, "feedback": "你放下电池,等爸爸"} + ] + }, + {"content": "你生气地把车扔到一边,车摔坏了轮子,更跑不动了。", "node_type": 2, "result_type": 1}, + {"content": "你按了又按,车还是纹丝不动,原来是没电了,白按了半天。", "node_type": 2, "result_type": 2}, + {"content": "换上新电池,遥控车「呜——」地跑了起来!你学会了:遇到问题先检查关键的地方!", "node_type": 2, "result_type": 3}, + {"content": "只换一节电池,车跑得慢吞吞的。原来新旧电池不能混着用,你学到了新知识。", "node_type": 2, "result_type": 2}, + {"content": "爸爸来了,帮你换好电池,车跑起来了。下次你可以自己试试换电池哦。", "node_type": 2, "result_type": 2} + ] + } + ] + }, + { + "name": "指桑骂槐", + "pinyin": "zhǐ sāng mà huái", + "group_no": 5, + "group_name": "并战计", + "meaning": "不直接批评,用别的办法提醒对方。", + "teach_content": "从前有人想批评手下,却不直接说,指着桑树骂槐树。小朋友:弟弟把玩具扔得到处都是,直接说他他会哭;可以讲故事:「有个小朋友把玩具收好,妈妈夸他棒!」弟弟听了,就会学着收拾啦。", + "summary_q": "想让弟弟收拾玩具,直接批评他会哭,可以?", + "summary_options": "[{\"text\":\"讲故事提醒他\",\"correct\":true},{\"text\":\"骂他一顿\",\"correct\":false},{\"text\":\"打他\",\"correct\":false}]", + "sort_order": 2, + "unlock_before": 25, + "levels": [ + { + "title": "故事提醒法", + "scene_name": "家里", + "scene_content": "客厅地板上,玩具散得到处都是。", + "age_group": "4-6", + "nodes": [ + { + "title": "满地的玩具", + "character_name": "弟弟", + "content": "弟弟又把玩具扔了一地,妈妈快下班回来了,看见会生气。直接批评弟弟,他会大哭。怎么办?", + "is_entry": 1, + "options": [ + {"text": "给弟弟讲故事:「有个小朋友把玩具送回家,妈妈夸他小能手!」", "next_index": 1, "feedback": "你坐在弟弟身边,讲起了故事"}, + {"text": "凶他说「快收!不然打你」", "next_index": 2, "feedback": "你叉着腰,凶巴巴地喊"}, + {"text": "自己默默地收完", "next_index": 3, "feedback": "你蹲下来,自己开始收"} + ] + }, + { + "title": "弟弟歪着头", + "character_name": "弟弟", + "content": "弟弟听了故事,歪着头看你。怎么办?", + "options": [ + {"text": "继续讲:「那个小朋友的玩具都是自己回家的,弟弟的玩具想不想回家?」", "next_index": 4, "feedback": "弟弟眨眨眼睛"}, + {"text": "问「听懂了吗?快收!」", "next_index": 5, "feedback": "弟弟被你催得愣住了"}, + {"text": "不讲了,自己干别的", "next_index": 6, "feedback": "你站起来走了"} + ] + }, + {"content": "你凶弟弟,弟弟哇地大哭起来,妈妈回来看到弟弟在哭,还批评了你。", "node_type": 2, "result_type": 1}, + {"content": "你自己默默收完了玩具,累得满头大汗,弟弟在旁边看着,什么也没学会。", "node_type": 2, "result_type": 2}, + {"content": "弟弟眨眨眼,说「我的玩具也要回家!」他把玩具一个个放回筐里,妈妈回来看见,一人亲了一口!", "node_type": 2, "result_type": 3}, + {"content": "弟弟似懂非懂,但你催得太急,他还是哭了。讲故事要慢慢来。", "node_type": 2, "result_type": 2}, + {"content": "你不讲了,弟弟玩得更欢,妈妈回来看到一屋子玩具,又生气了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "假痴不癫", + "pinyin": "jiǎ chī bù diān", + "group_no": 5, + "group_name": "并战计", + "meaning": "装作不知道,就不上对方的当。", + "teach_content": "有的人装傻,其实心里比谁都明白,这叫「假痴不癫」。小朋友:同学逗你「你是个大笨蛋」,你越生气他越开心;你装作没听见,笑笑走开,他逗不起来,自己就消停了。不理他,就是最聪明的办法。", + "summary_q": "有人故意逗你让你生气,最好的办法是?", + "summary_options": "[{\"text\":\"装作没听见,笑笑走开\",\"correct\":true},{\"text\":\"追着打他\",\"correct\":false},{\"text\":\"气得大哭\",\"correct\":false}]", + "sort_order": 3, + "unlock_before": 26, + "levels": [ + { + "title": "不被逗到", + "scene_name": "幼儿园教室", + "scene_content": "教室的积木角,小朋友们正专心搭积木。", + "age_group": "4-6", + "nodes": [ + { + "title": "爱逗人的小朋友", + "character_name": "小朋友", + "content": "有个小朋友总是叫你外号,还故意逗你生气。今天他又来了。怎么办?", + "is_entry": 1, + "options": [ + {"text": "装作没听见,继续玩自己的", "next_index": 1, "feedback": "你头也不抬,继续搭积木"}, + {"text": "追着他喊「你才是!你才是!」", "next_index": 2, "feedback": "你追着他跑了起来"}, + {"text": "生气地去找老师告状", "next_index": 3, "feedback": "你气呼呼地跑去找老师"} + ] + }, + { + "title": "他更起劲了", + "character_name": "小朋友", + "content": "他看你没反应,更起劲了,在你面前跳来跳去。怎么办?", + "options": [ + {"text": "平静地跟他说「我要搭积木,你来吗?」", "next_index": 4, "feedback": "你平静地抬起头"}, + {"text": "瞪着他,握紧拳头", "next_index": 5, "feedback": "你瞪着他,一言不发"}, + {"text": "忍不住推了他一把", "next_index": 6, "feedback": "你忍不住了,推了他一把"} + ] + }, + {"content": "你追着他喊,越喊他越开心,追得满教室跑,被老师批评了。", "node_type": 2, "result_type": 1}, + {"content": "你去找老师告状,老师批评了他,可他转头又偷偷逗你,你更生气了。", "node_type": 2, "result_type": 2}, + {"content": "他没想到你会邀请他搭积木,愣了愣,真的坐下来和你一起搭了!搭完他说:「你其实挺厉害的。」你们成了朋友!", "node_type": 2, "result_type": 3}, + {"content": "你瞪着他,他更来劲了,追着你跑了一整天。你忍得好辛苦。", "node_type": 2, "result_type": 2}, + {"content": "你推了他,他摔倒了,老师批评了你。他哭,你也哭了,逗你的人却跑了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "上屋抽梯", + "pinyin": "shàng wū chōu tī", + "group_no": 5, + "group_name": "并战计", + "meaning": "不给自己留退路,说到就要做到。", + "teach_content": "从前有人上了屋顶,梯子被抽走,只能往前走。小朋友:答应了妈妈「我先把作业写完再玩」,就把作业本放在桌上,先把作业写完,再玩个痛快!答应了就做到,是最棒的品质。", + "summary_q": "答应了先写作业再玩,应该?", + "summary_options": "[{\"text\":\"先把作业写完再玩\",\"correct\":true},{\"text\":\"玩够了再写\",\"correct\":false},{\"text\":\"不写作业\",\"correct\":false}]", + "sort_order": 4, + "unlock_before": 27, + "levels": [ + { + "title": "先写作业再玩", + "scene_name": "家里", + "scene_content": "客厅的电视里,动画片的片头曲响了起来。", + "age_group": "4-6", + "nodes": [ + { + "title": "动画片开始了", + "character_name": "妈妈", + "content": "你答应妈妈「写完作业再看动画片」。可是动画片马上要开始了,作业还有两行。怎么办?", + "is_entry": 1, + "options": [ + {"text": "坐下来把作业写完,再看动画片", "next_index": 1, "feedback": "你坐回书桌前"}, + {"text": "偷偷开电视,一边看一边写", "next_index": 2, "feedback": "你打开电视,声音调得小小的"}, + {"text": "跟妈妈商量「先看十分钟」", "next_index": 3, "feedback": "你跑到妈妈身边撒娇"} + ] + }, + { + "title": "客厅的声音", + "character_name": "妈妈", + "content": "你写着作业,动画片的声音从客厅传来,好想看啊。怎么办?", + "options": [ + {"text": "捂住耳朵专心写完,再去看", "next_index": 4, "feedback": "你捂住耳朵,埋头写了起来"}, + {"text": "一边写一边偷看,写了半小时", "next_index": 5, "feedback": "你写两个字,看一眼电视"}, + {"text": "丢下笔跑去看电视", "next_index": 6, "feedback": "你丢下笔,跑了出去"} + ] + }, + {"content": "你偷偷看电视,妈妈回来发现作业没写完,动画片也停了。", "node_type": 2, "result_type": 1}, + {"content": "妈妈答应了你的商量,但说「就十分钟哦」,你开心地跑了出去。", "node_type": 2, "result_type": 2}, + {"content": "你专心写完了作业,跑去看动画片——正好赶上大结局!妈妈说:「说到做到的小朋友,最棒!」", "node_type": 2, "result_type": 3}, + {"content": "你一边写一边偷看,作业写得歪歪扭扭,动画片也没看好,明天还要重写。", "node_type": 2, "result_type": 1}, + {"content": "你跑去看电视,妈妈回来发现作业没写完,动画片也停了。答应的事没做到,心里好难受。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "树上开花", + "pinyin": "shù shàng kāi huā", + "group_no": 5, + "group_name": "并战计", + "meaning": "自己力量小,借助别人的力量,就变得强大。", + "teach_content": "一棵树光秃秃的,开满花就好看多了。一个人的力量小,和大家一起,力量就大了!拔河比赛,一个人拉不过,全班一起使劲,就能赢!借大家的力气,做好自己的事。", + "summary_q": "一个人的力量不够时,可以?", + "summary_options": "[{\"text\":\"请小伙伴一起帮忙\",\"correct\":true},{\"text\":\"自己硬扛\",\"correct\":false},{\"text\":\"放弃\",\"correct\":false}]", + "sort_order": 5, + "unlock_before": 28, + "levels": [ + { + "title": "拔河比赛", + "scene_name": "操场", + "scene_content": "操场上画了一条白线,两边的队伍已经站好了。", + "age_group": "4-6", + "nodes": [ + { + "title": "对手好壮", + "character_name": "同学", + "content": "拔河比赛,你们班对上隔壁班。对方的人又高又壮,看起来要输。怎么办?", + "is_entry": 1, + "options": [ + {"text": "喊大家一起喊口号,一起使劲", "next_index": 1, "feedback": "你举起手,喊了起来"}, + {"text": "自己一个人死命拉", "next_index": 2, "feedback": "你咬紧牙关,用尽全身力气"}, + {"text": "觉得要输,提前松手", "next_index": 3, "feedback": "你觉得没希望了"} + ] + }, + { + "title": "绳子往那边跑了", + "character_name": "同学", + "content": "大家喊起了口号「一二三!」可绳子还是往对方那边跑。怎么办?", + "options": [ + {"text": "喊「大家一起往后倒,听我口令!」", "next_index": 4, "feedback": "你大声喊着口令"}, + {"text": "喊「使劲啊你们!」自己却累了松劲", "next_index": 5, "feedback": "你的手一松"}, + {"text": "觉得输了,松手坐地上", "next_index": 6, "feedback": "你一屁股坐在地上"} + ] + }, + {"content": "你一个人拼命拉,可一个人的力气哪里拉得过一队人,绳子瞬间飞了出去。", "node_type": 2, "result_type": 1}, + {"content": "你提前松手,绳子被对方拉过去,你们班输了,大家都很失落。", "node_type": 2, "result_type": 1}, + {"content": "全班听着口令一起使劲,「一二三!」绳子中间的结过了线!赢了!大家抱在一起欢呼,团结的力量真大!", "node_type": 2, "result_type": 3}, + {"content": "你喊得响,手却松了劲,队伍一下子散了,输了比赛。喊口号也要一起使劲才行。", "node_type": 2, "result_type": 1}, + {"content": "你松了手,大家被你一带,全摔倒了。输不可怕,放弃才可惜。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "反客为主", + "pinyin": "fǎn kè wéi zhǔ", + "group_no": 5, + "group_name": "并战计", + "meaning": "从客人变成主人:主动帮忙,受欢迎。", + "teach_content": "做客的时候,光坐着等别人招待,是客人;主动帮忙端水果、收拾桌子,就像小主人一样受欢迎!不管在哪里,主动做点事,大家都会喜欢你。", + "summary_q": "去外婆家做客,你会?", + "summary_options": "[{\"text\":\"主动帮忙做点小事\",\"correct\":true},{\"text\":\"光坐着等吃\",\"correct\":false},{\"text\":\"翻外婆的东西\",\"correct\":false}]", + "sort_order": 6, + "unlock_before": 29, + "levels": [ + { + "title": "外婆家的小主人", + "scene_name": "外婆家", + "scene_content": "外婆家飘着饭菜的香味,厨房里叮叮当当。", + "age_group": "4-6", + "nodes": [ + { + "title": "忙碌的外婆", + "character_name": "外婆", + "content": "周末去外婆家,外婆忙着做饭,你在客厅坐着看电视。茶几上的水果还没洗。怎么办?", + "is_entry": 1, + "options": [ + {"text": "站起来帮忙洗水果、摆碗筷", "next_index": 1, "feedback": "你洗了水果,端上桌子"}, + {"text": "坐着等外婆端上来", "next_index": 2, "feedback": "你继续看电视"}, + {"text": "打开零食柜自己找吃的", "next_index": 3, "feedback": "你翻起了零食柜"} + ] + }, + { + "title": "外婆笑了", + "character_name": "外婆", + "content": "你端水果上桌,外婆笑了:「哎呀,小宝贝真能干!」你发现饭桌还没摆好。怎么办?", + "options": [ + {"text": "继续帮忙摆碗筷、搬椅子", "next_index": 4, "feedback": "你摆好了碗筷,又搬来椅子"}, + {"text": "洗完水果就坐下看电视", "next_index": 5, "feedback": "你坐回了沙发"}, + {"text": "说「我帮了忙,要奖励我糖果」", "next_index": 6, "feedback": "你伸出手要奖励"} + ] + }, + {"content": "你坐着等外婆端水果,外婆忙进忙出,端来水果时,你已经看完一集电视了。", "node_type": 2, "result_type": 2}, + {"content": "你翻了零食柜,把外婆理好的零食翻乱了,外婆还得重新收拾。", "node_type": 2, "result_type": 1}, + {"content": "碗筷摆好了,全家坐下吃饭,外婆一直夸你:「我们家的孩子真懂事!」你吃得特别香!", "node_type": 2, "result_type": 3}, + {"content": "你洗了水果,外婆已经很开心了,但桌子还是外婆摆的。多做一点会更棒哦。", "node_type": 2, "result_type": 2}, + {"content": "你讨奖励,外婆笑着给了糖,但心里有点失望:帮忙可不该要报酬。", "node_type": 2, "result_type": 1} + ] + } + ] + } + ] +} diff --git a/biz/service/seed/seed_36_ji/group6.json b/biz/service/seed/seed_36_ji/group6.json new file mode 100644 index 0000000..efe0748 --- /dev/null +++ b/biz/service/seed/seed_36_ji/group6.json @@ -0,0 +1,292 @@ +{ + "strategies": [ + { + "name": "美人计", + "pinyin": "měi rén jì", + "group_no": 6, + "group_name": "败战计", + "meaning": "想请别人帮忙,先投其所好,让人开心。", + "teach_content": "从前有人用漂亮的东西打动对方。小朋友正向学:想让哥哥帮你够高处的书,先陪他玩他最爱的棋,他开心了,自然愿意帮你!先让人开心,再请人帮忙,成功率翻倍。", + "summary_q": "想请哥哥帮忙,先?", + "summary_options": "[{\"text\":\"陪他玩他喜欢的游戏\",\"correct\":true},{\"text\":\"直接命令他\",\"correct\":false},{\"text\":\"不理他\",\"correct\":false}]", + "sort_order": 1, + "unlock_before": 30, + "levels": [ + { + "title": "请哥哥帮忙", + "scene_name": "家里", + "scene_content": "书架很高很高,最上面那层的绘本你一直很想看。", + "age_group": "4-6", + "nodes": [ + { + "title": "够不着的绘本", + "character_name": "哥哥", + "content": "你想要书架最高层的绘本,可是够不着。哥哥正在看书。你直接喊「帮我拿!」他会嫌你烦。怎么办?", + "is_entry": 1, + "options": [ + {"text": "先陪哥哥玩一盘他最喜欢的棋", "next_index": 1, "feedback": "你拿出棋盘,邀请哥哥"}, + {"text": "直接喊「帮我拿书!」", "next_index": 2, "feedback": "哥哥头也不抬"}, + {"text": "自己搬椅子去够,摔下来就糟了", "next_index": 3, "feedback": "你搬来椅子,摇摇晃晃爬上去"} + ] + }, + { + "title": "哥哥心情很好", + "character_name": "哥哥", + "content": "你和哥哥下完棋,他心情很好。怎么办?", + "options": [ + {"text": "趁机说「哥哥,能帮我拿一下绘本吗?」", "next_index": 4, "feedback": "哥哥笑着站起来"}, + {"text": "接着说「再陪我玩一局」", "next_index": 5, "feedback": "你又拉住了哥哥"}, + {"text": "下完棋就自己跑去搬椅子", "next_index": 6, "feedback": "你跑向了书架"} + ] + }, + {"content": "你直接喊,哥哥嫌你烦,说「自己拿」。你够不着,急得快哭了。", "node_type": 2, "result_type": 1}, + {"content": "你搬椅子去够,椅子一晃,你差点摔下来,哥哥跑过来扶住你:「小心点!」", "node_type": 2, "result_type": 1}, + {"content": "哥哥痛快地帮你拿了绘本,还顺便讲了里面最好笑的故事!先让人开心,请求就更容易被答应啦。", "node_type": 2, "result_type": 3}, + {"content": "你又缠着哥哥玩了一局,玩完他累了,说自己要去写作业。你错过了最好的时机。", "node_type": 2, "result_type": 2}, + {"content": "你搬椅子去够,椅子一晃差点摔倒,哥哥跑过来扶住你,把书拿下来给你。", "node_type": 2, "result_type": 2} + ] + } + ] + }, + { + "name": "空城计", + "pinyin": "kōng chéng jì", + "group_no": 6, + "group_name": "败战计", + "meaning": "遇到害怕的事,装作不害怕,勇敢面对。", + "teach_content": "从前有人守空城,敌人来了,他不慌不忙弹琴,敌人以为有埋伏,就退了。小朋友:晚上自己睡觉怕黑,可以对自己说「我才不怕呢」,开一盏小夜灯,唱首歌,黑也没那么可怕啦。", + "summary_q": "晚上怕黑睡不着,你会?", + "summary_options": "[{\"text\":\"给自己打气我不怕\",\"correct\":true},{\"text\":\"躲进被窝哭\",\"correct\":false},{\"text\":\"跑去找妈妈哭\",\"correct\":false}]", + "sort_order": 2, + "unlock_before": 31, + "levels": [ + { + "title": "不怕黑的小勇士", + "scene_name": "家里", + "scene_content": "晚上九点,该睡觉了。房间里安安静静,只有窗帘在轻轻飘动。", + "age_group": "4-6", + "nodes": [ + { + "title": "黑黑的房间", + "character_name": "妈妈", + "content": "晚上该睡觉了,房间黑黑的,窗帘在轻轻飘动,你有点害怕。怎么办?", + "is_entry": 1, + "options": [ + {"text": "对自己说「我不怕!」,开小夜灯,唱首歌", "next_index": 1, "feedback": "你打开小夜灯,轻轻唱起了歌"}, + {"text": "蒙着被子不敢动", "next_index": 2, "feedback": "你把自己蒙进被子里"}, + {"text": "大喊「妈妈!」", "next_index": 3, "feedback": "你大声喊了起来"} + ] + }, + { + "title": "咕噜一声", + "character_name": "小明", + "content": "你唱着歌,突然听到「咕噜」一声响。怎么办?", + "options": [ + {"text": "告诉自己「那是肚子饿了的声音」,哼着歌继续睡", "next_index": 4, "feedback": "你摸了摸肚子,笑了"}, + {"text": "吓得跳下床", "next_index": 5, "feedback": "你一下子跳下床"}, + {"text": "喊「有怪兽!」", "next_index": 6, "feedback": "你扯着嗓子喊"} + ] + }, + {"content": "你蒙着被子,又闷又热,一晚上翻来覆去,第二天顶着黑眼圈。", "node_type": 2, "result_type": 2}, + {"content": "你大喊妈妈,妈妈跑过来陪你睡着才走,可是你三天两头要妈妈陪。", "node_type": 2, "result_type": 2}, + {"content": "原来真是肚子饿了!你笑着翻个身,很快就睡着了。第二天你骄傲地告诉妈妈:「我是小勇士!」", "node_type": 2, "result_type": 3}, + {"content": "你跳下床,开灯一看,什么都没有。胆子就是这样越练越大的。", "node_type": 2, "result_type": 2}, + {"content": "你大喊「有怪兽」,爸爸妈妈跑进来,开灯一看:什么也没有。你不好意思地笑了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "反间计", + "pinyin": "fǎn jiàn jì", + "group_no": 6, + "group_name": "败战计", + "meaning": "识破挑拨离间的人,不上当。", + "teach_content": "有人故意在你和朋友之间说坏话,让你们吵架,这叫「挑拨离间」。聪明的做法:先想一想,是不是有人故意捣乱?不轻信,直接问朋友,误会就解开了。", + "summary_q": "有人说你朋友的坏话,你会?", + "summary_options": "[{\"text\":\"先问问朋友是怎么回事\",\"correct\":true},{\"text\":\"马上和朋友绝交\",\"correct\":false},{\"text\":\"跟那个人一起说\",\"correct\":false}]", + "sort_order": 3, + "unlock_before": 32, + "levels": [ + { + "title": "别上当", + "scene_name": "幼儿园教室", + "scene_content": "课间,教室里叽叽喳喳,小朋友们在画画。", + "age_group": "4-6", + "nodes": [ + { + "title": "小丽的话", + "character_name": "小丽", + "content": "小丽跑来跟你说:「小美说你画的画好难看!」你有点难过。怎么办?", + "is_entry": 1, + "options": [ + {"text": "先想一想:小美上次还夸过我的画呢,还是直接去问小美", "next_index": 1, "feedback": "你放下画笔,走向小美"}, + {"text": "生气地去找小美吵架", "next_index": 2, "feedback": "你气冲冲地跑过去"}, + {"text": "信了小丽,不理小美了", "next_index": 3, "feedback": "你把画收了起来"} + ] + }, + { + "title": "问小美", + "character_name": "小美", + "content": "你找到小美,问:「小丽说你嫌我的画难看,是真的吗?」小美很惊讶。怎么办?", + "options": [ + {"text": "听小美说完:「我那天是夸你画得好呀!」你明白了", "next_index": 4, "feedback": "原来是这样!"}, + {"text": "不听解释,扭头就走", "next_index": 5, "feedback": "你扭头就走"}, + {"text": "信了一半,半信半疑", "next_index": 6, "feedback": "你站在那儿,不知道该信谁"} + ] + }, + {"content": "你冲过去和小美吵架,小美委屈地哭了,你们俩闹翻了,小丽在旁边偷偷笑。", "node_type": 2, "result_type": 1}, + {"content": "你信了小丽,好几天不理小美,小美都不知道为什么,难过极了。", "node_type": 2, "result_type": 1}, + {"content": "原来小美那天说的是「你画得真好看」!你们一起去找小丽对质,小丽红着脸承认是逗你玩。不轻信,就不上当!", "node_type": 2, "result_type": 3}, + {"content": "你不听解释,小美委屈地哭了。后来你才知道自己冤枉了她,道歉了好久。", "node_type": 2, "result_type": 2}, + {"content": "你半信半疑,和小美疏远了好几天,后来才知道是误会,白白难过了一场。", "node_type": 2, "result_type": 2} + ] + } + ] + }, + { + "name": "苦肉计", + "pinyin": "kǔ ròu jì", + "group_no": 6, + "group_name": "败战计", + "meaning": "有时候先吃点小亏,反而收获更多。", + "teach_content": "从前有人故意让自己吃点苦头,骗取信任。小朋友正向学:分水果时,把大的让给弟弟,自己吃小的,弟弟开心,妈妈夸你懂事,全家都开心——先吃小亏,收获更多快乐。", + "summary_q": "分水果时,把大的让给弟弟,你会?", + "summary_options": "[{\"text\":\"开心地让出去,全家都开心\",\"correct\":true},{\"text\":\"抢大的\",\"correct\":false},{\"text\":\"生气不吃了\",\"correct\":false}]", + "sort_order": 4, + "unlock_before": 33, + "levels": [ + { + "title": "大苹果小苹果", + "scene_name": "家里", + "scene_content": "厨房里,妈妈正在洗红彤彤的大苹果。", + "age_group": "4-6", + "nodes": [ + { + "title": "一个大一个小", + "character_name": "妈妈", + "content": "妈妈洗了两个苹果,一个大一个小。弟弟眼睛盯着大的。怎么办?", + "is_entry": 1, + "options": [ + {"text": "把大苹果递给弟弟:「大的给你!」", "prop_name": "苹果", "next_index": 1, "feedback": "你把大苹果递到弟弟面前"}, + {"text": "抢过大的自己咬一口", "next_index": 2, "feedback": "你抢过苹果,咬了一大口"}, + {"text": "让妈妈重新洗两个一样大的", "next_index": 3, "feedback": "你让妈妈再洗两个"} + ] + }, + { + "title": "弟弟不好意思了", + "character_name": "弟弟", + "content": "弟弟接过苹果,又看看你手里的小苹果,有点不好意思。怎么办?", + "options": [ + {"text": "笑着说「我吃小的,明天我们再换」", "next_index": 4, "feedback": "你咬了一口小苹果"}, + {"text": "趁机说「那你欠我一个玩具」", "next_index": 5, "feedback": "弟弟愣住了"}, + {"text": "后悔了,一把抢回来", "next_index": 6, "feedback": "你又把苹果抢了回来"} + ] + }, + {"content": "你抢过大的咬了一口,弟弟哇地大哭,妈妈批评了你,大苹果吃着也不香了。", "node_type": 2, "result_type": 1}, + {"content": "妈妈又洗了两个一样大的苹果,你俩一人一个,但多洗了两个苹果有点浪费。", "node_type": 2, "result_type": 2}, + {"content": "弟弟开心地咬了一口:「哥哥你真好!」妈妈也笑了。你吃着小苹果,心里却甜滋滋的。让一让,大家都开心!", "node_type": 2, "result_type": 3}, + {"content": "弟弟答应了,但觉得交换玩具有点亏,有点不高兴。让出去还要讲条件,就没那么美了。", "node_type": 2, "result_type": 2}, + {"content": "你抢回大苹果,弟弟大哭,妈妈批评了你。大苹果吃到嘴里,好像也不甜了。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "连环计", + "pinyin": "lián huán jì", + "group_no": 6, + "group_name": "败战计", + "meaning": "一步一步来,把事情分成几步做完。", + "teach_content": "一环扣一环,像铁链一样,这叫连环计。大目标分成小步骤:收拾房间——先收玩具,再理书桌,再叠被子,一步步来,很快就完成了!做大事,先做小事。", + "summary_q": "收拾乱房间,第一步应该?", + "summary_options": "[{\"text\":\"先把玩具收起来\",\"correct\":true},{\"text\":\"发呆想好多呀\",\"correct\":false},{\"text\":\"直接躺下\",\"correct\":false}]", + "sort_order": 5, + "unlock_before": 34, + "levels": [ + { + "title": "房间大变身", + "scene_name": "家里", + "scene_content": "你的房间乱糟糟:玩具在地上,书桌上堆满书本,被子没叠。", + "age_group": "4-6", + "nodes": [ + { + "title": "好乱呀", + "character_name": "妈妈", + "content": "你的房间乱糟糟:玩具在地上,书桌上堆满书本,被子没叠。你觉得好多事要做。怎么办?", + "is_entry": 1, + "options": [ + {"text": "一步步来:先收玩具", "next_index": 1, "feedback": "你蹲下来,开始收玩具"}, + {"text": "看着房间发呆,不知道从哪开始", "next_index": 2, "feedback": "你站在门口发呆"}, + {"text": "把门关上,眼不见心不烦", "next_index": 3, "feedback": "你关上了门"} + ] + }, + { + "title": "玩具收完了", + "character_name": "妈妈", + "content": "玩具收完了!地上干净了。接下来呢?", + "options": [ + {"text": "继续:理书桌,把书放回书架", "next_index": 4, "feedback": "你走到书桌前"}, + {"text": "觉得已经不错了,坐下休息", "next_index": 5, "feedback": "你坐到床上休息"}, + {"text": "又拿出玩具玩起来", "next_index": 6, "feedback": "你打开了玩具筐"} + ] + }, + {"content": "你站在门口发呆,越想越烦,最后坐在床上哭了起来,妈妈来帮你收拾。", "node_type": 2, "result_type": 1}, + {"content": "你关上门,可第二天早上找袜子,翻了半天,房间还是那么乱。", "node_type": 2, "result_type": 1}, + {"content": "书桌理好了,被子叠好了!房间大变身!妈妈回来看见,惊讶地说:「这是我儿子的房间吗?」你得意极了!", "node_type": 2, "result_type": 3}, + {"content": "你休息了一会儿,还是把书桌理了。房间整洁了大半,明天再叠被子吧。", "node_type": 2, "result_type": 2}, + {"content": "你又玩起玩具,房间又乱了。收拾好的地方,要好好保持呀。", "node_type": 2, "result_type": 1} + ] + } + ] + }, + { + "name": "走为上计", + "pinyin": "zǒu wéi shàng jì", + "group_no": 6, + "group_name": "败战计", + "meaning": "遇到危险,跑开找大人,保护自己最重要。", + "teach_content": "打不过就跑,这不是胆小,是聪明!遇到坏人、恶狗、着火了,第一件事不是硬拼,而是快跑,跑去有大人、有安全的地方。保护自己,永远最重要!", + "summary_q": "遇到坏人或危险,第一件事是?", + "summary_options": "[{\"text\":\"快跑去找大人\",\"correct\":true},{\"text\":\"冲上去打他\",\"correct\":false},{\"text\":\"站在原地哭\",\"correct\":false}]", + "sort_order": 6, + "unlock_before": 35, + "levels": [ + { + "title": "快跑找妈妈", + "scene_name": "小区花园", + "scene_content": "小区花园里,小朋友们正在开心地玩捉迷藏。", + "age_group": "4-6", + "nodes": [ + { + "title": "冲过来的大狗", + "character_name": "大狗", + "content": "你在小区玩,一只大狗没拴绳子,朝你冲过来,看起来很凶。怎么办?", + "is_entry": 1, + "options": [ + {"text": "转身快跑,去人多的地方找妈妈", "next_index": 1, "feedback": "你转身就跑,跑得飞快"}, + {"text": "站在原地大声哭", "next_index": 2, "feedback": "你吓得哇哇大哭"}, + {"text": "捡石头扔它", "next_index": 3, "feedback": "你弯腰捡起一块石头"} + ] + }, + { + "title": "大狗还在追", + "character_name": "妈妈", + "content": "你跑回妈妈身边,大狗还在后面追。怎么办?", + "options": [ + {"text": "躲在妈妈身后,让妈妈保护你", "next_index": 4, "feedback": "你躲到妈妈身后"}, + {"text": "停下来回头看大狗", "next_index": 5, "feedback": "你回头看了一眼"}, + {"text": "觉得自己很勇敢,要再出去逗狗", "next_index": 6, "feedback": "你探出头,想再出去"} + ] + }, + {"content": "你站在原地大哭,大狗围着你转,你吓得腿都软了,还好保安叔叔赶来。", "node_type": 2, "result_type": 1}, + {"content": "你扔石头,大狗被激怒了,追得更凶,你跑得鞋子都掉了。", "node_type": 2, "result_type": 1}, + {"content": "妈妈一把护住你,保安叔叔赶来把大狗牵走了。你吓得心怦怦跳,但记住啦:危险来了先跑开,找大人!", "node_type": 2, "result_type": 3}, + {"content": "你回头一看,大狗还跟着,吓得腿都软了。妈妈赶紧抱起你。以后可别回头了。", "node_type": 2, "result_type": 2}, + {"content": "你跑出去逗狗,大狗扑过来,还好妈妈和保安都在。危险不是好玩的,记住了!", "node_type": 2, "result_type": 1} + ] + } + ] + } + ] +} diff --git a/biz/service/seed/seed_36_ji/seed_meta.json b/biz/service/seed/seed_36_ji/seed_meta.json new file mode 100644 index 0000000..69a8817 --- /dev/null +++ b/biz/service/seed/seed_36_ji/seed_meta.json @@ -0,0 +1,11 @@ +{ + "prizes": [ + {"name": "小军师徽章", "description": "虚拟勋章,闪闪发光,点亮你的头像!", "p_type": 1, "points_cost": 50, "stock": -1, "sort_order": 1}, + {"name": "计策卡册", "description": "实物小册子,把 36 张计策卡都贴进去!", "p_type": 2, "points_cost": 200, "stock": 10, "sort_order": 2} + ], + "badges": [ + {"name": "初出茅庐", "cond_type": 3, "cond_value": 1}, + {"name": "小将军", "cond_type": 3, "cond_value": 10} + ], + "admin": {"username": "admin", "password": "admin123"} +} diff --git a/go.mod b/go.mod index 4058350..d32fba1 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.26.1 require ( github.com/gogf/gf/contrib/drivers/sqlite/v2 v2.10.2 github.com/gogf/gf/v2 v2.10.2 + golang.org/x/crypto v0.55.0 ) require ( @@ -34,9 +35,9 @@ require ( go.opentelemetry.io/otel/metric v1.38.0 // indirect go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect - golang.org/x/net v0.40.0 // indirect - golang.org/x/sys v0.35.0 // indirect - golang.org/x/text v0.25.0 // indirect + golang.org/x/net v0.57.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/text v0.41.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect modernc.org/libc v1.22.5 // indirect modernc.org/mathutil v1.5.0 // indirect diff --git a/go.sum b/go.sum index 21455c1..51b3ee6 100644 --- a/go.sum +++ b/go.sum @@ -77,14 +77,16 @@ go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJr go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= -golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= +golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M= +golang.org/x/crypto v0.55.0/go.mod h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis= +golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= -golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=