Files
child-learning/src/components/KnowledgeArea.vue
2026-03-02 23:09:59 +08:00

3854 lines
151 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="knowledge-area">
<!-- 漂浮的魔法装饰 -->
<div class="magic-decor star-1"></div>
<div class="magic-decor star-2"></div>
<div class="magic-decor star-3">🌟</div>
<div class="magic-decor star-4"></div>
<div class="magic-decor star-5"></div>
<!-- 库洛米向导 -->
<div class="guide-character">
<div class="guide-avatar">💜</div>
<div class="guide-bubble">
<p>欢迎来到知识魔法屋我是库洛米老师</p>
</div>
</div>
<div class="area-header">
<div class="header-decoration">🪄📚</div>
<h2 class="area-title">🎓 知识魔法屋 🎓</h2>
<p class="area-desc">和库洛米一起开启奇妙的知识之旅吧</p>
<div class="header-decoration">🌈🎨</div>
</div>
<div class="subjects">
<!-- 数学魔法课 -->
<div class="subject-card math" @click="selectSubject('math')">
<div class="subject-icon">🔢</div>
<div class="subject-emoji">🐿</div>
<h3 class="subject-title">数学魔法课</h3>
<p class="subject-desc">和数字松鼠一起冒险</p>
<div class="subject-reward"> +1 能量</div>
</div>
<!-- 语文魔法课 -->
<div class="subject-card chinese" @click="selectSubject('chinese')">
<div class="subject-icon">📖</div>
<div class="subject-emoji">🧚</div>
<h3 class="subject-title">语文魔法课</h3>
<p class="subject-desc">帮汉字小精灵拼偏旁</p>
<div class="subject-reward"> +1 能量</div>
</div>
<!-- 英语魔法课 -->
<div class="subject-card english" @click="selectSubject('english')">
<div class="subject-icon">🔤</div>
<div class="subject-emoji">🐦</div>
<h3 class="subject-title">英语魔法课</h3>
<p class="subject-desc">和字母小鸟走迷宫</p>
<div class="subject-reward"> +1 能量</div>
</div>
<!-- 科学魔法课 -->
<div class="subject-card science" @click="selectSubject('science')">
<div class="subject-icon">🔬</div>
<div class="subject-emoji">🌱</div>
<h3 class="subject-title">科学魔法课</h3>
<p class="subject-desc">在植物实验室做实验</p>
<div class="subject-reward"> +1 能量</div>
</div>
<!-- 日语魔法课 -->
<div class="subject-card japanese" @click="selectSubject('japanese')">
<div class="subject-icon">🗾</div>
<div class="subject-emoji">🌸</div>
<h3 class="subject-title">日语魔法课</h3>
<p class="subject-desc">学习简单的日语和50音图</p>
<div class="subject-reward"> +1 能量</div>
</div>
<!-- 地理魔法课 -->
<div class="subject-card geography" @click="selectSubject('geography')">
<div class="subject-icon">🗺</div>
<div class="subject-emoji">🌏</div>
<h3 class="subject-title">地理魔法课</h3>
<p class="subject-desc">学习中国地理常识和南北方差异</p>
<div class="subject-reward"> +1 能量</div>
</div>
</div>
<!-- 课程内容 -->
<div class="subject-content" v-if="currentSubject">
<div class="content-header">
<h3 class="content-title">{{ currentSubject ? subjectTitles[currentSubject as keyof typeof subjectTitles] : '' }}</h3>
<button class="back-btn" @click="currentSubject = null">返回</button>
</div>
<!-- 任务列表 -->
<div class="tasks" v-if="!currentGame && currentSubject">
<div class="daily-progress">
<h4>今日进度</h4>
<div class="progress-bar">
<div class="progress-fill" :style="{ width: ((dailyProgress.completed[currentSubject] || 0) / (dailyLimits[currentSubject] || 25)) * 100 + '%' }"></div>
</div>
<span class="progress-text">{{ dailyProgress.completed[currentSubject] || 0 }}/{{ dailyLimits[currentSubject] || 25 }} </span>
</div>
<div v-for="(task, index) in (tasks[currentSubject] || [])" :key="index" class="task-card">
<div class="task-icon">{{ task.icon }}</div>
<div class="task-info">
<h4 class="task-title">{{ task.title }}</h4>
<p class="task-desc">{{ task.description }}</p>
<div class="task-reward">
<span class="reward-icon"></span>
<span>{{ task.reward }} 颗星星能量</span>
</div>
</div>
<button class="task-btn" @click="startGame(currentSubject || '', index)" :disabled="isDailyLimitReached(currentSubject || '')">
{{ task.completed ? '已完成' : isDailyLimitReached(currentSubject || '') ? '今日已达上限' : '开始' }}
</button>
</div>
</div>
<!-- 游戏内容 -->
<div class="game-content" v-if="currentGame">
<!-- 数学游戏 -->
<div v-if="currentGame.subject === 'math'" class="math-game">
<div class="game-question">
<div class="question-with-audio">
<h4>{{ currentGame.question }}</h4>
<button class="audio-btn" @click="playAudio(currentGame.question)">🔊</button>
</div>
<div class="answer-options">
<div
v-for="(option, idx) in currentGame.options"
:key="idx"
class="option-btn"
@click="checkAnswer(option)"
>
<span>{{ option }}</span>
<button class="part-audio-btn" @click.stop="playAudio(option)">🔊</button>
</div>
</div>
</div>
<div class="game-feedback" v-if="showFeedback">
<div :class="['feedback-message', isCorrect ? 'correct' : 'incorrect']">
{{ feedbackMessage }}
</div>
<button class="next-btn" @click="nextQuestion">下一题</button>
</div>
</div>
<!-- 语文游戏 -->
<div v-else-if="currentGame.subject === 'chinese'" class="chinese-game">
<div class="game-question">
<div class="question-with-audio">
<h4>{{ currentGame.question }}</h4>
<button class="audio-btn" v-if="currentGame.audio" @click="playAudio(currentGame.audio)">
🔊
</button>
</div>
<!-- 选择题格式 -->
<div class="word-options" v-if="currentGame.options">
<div
v-for="(option, idx) in currentGame.options"
:key="idx"
class="option-btn"
@click="checkChineseAnswer(option)"
>
<span>{{ option }}</span>
<button class="part-audio-btn" @click.stop="playAudio(option)">🔊</button>
</div>
</div>
<!-- 拼字格式兼容旧数据 -->
<div class="character-parts" v-if="currentGame.parts">
<div class="part" v-for="(part, idx) in currentGame.parts" :key="idx" @click="selectPart(part)">
<span>{{ part }}</span>
<button class="part-audio-btn" @click.stop="playAudio(part)">🔊</button>
</div>
</div>
<div class="current-answer" v-if="currentGame.parts && currentAnswer">
<span>当前答案: </span>
<span class="answer">{{ currentAnswer }}</span>
<button class="audio-btn" @click="playAudio(currentAnswer)">
🔊
</button>
</div>
</div>
<button class="submit-btn" v-if="currentGame.parts && currentAnswer" @click="checkChineseAnswer">提交答案</button>
<div class="game-feedback" v-if="showFeedback">
<div :class="['feedback-message', isCorrect ? 'correct' : 'incorrect']">
{{ feedbackMessage }}
</div>
<button class="next-btn" @click="nextQuestion">下一题</button>
</div>
</div>
<!-- 英语游戏 -->
<div v-else-if="currentGame.subject === 'english'" class="english-game">
<div class="game-question">
<div class="question-with-audio">
<h4>{{ currentGame.question }}</h4>
<button class="audio-btn" @click="playAudio(currentGame.question)">
🔊
</button>
</div>
<div class="word-options">
<div
v-for="(option, idx) in currentGame.options"
:key="idx"
class="option-btn"
@click="checkEnglishAnswer(option)"
>
<span>{{ option }}</span>
<div class="option-audio-btn" @click.stop="playAudio(option)">🔊</div>
</div>
</div>
</div>
<div class="game-feedback" v-if="showFeedback">
<div :class="['feedback-message', isCorrect ? 'correct' : 'incorrect']">
{{ feedbackMessage }}
</div>
<button class="next-btn" @click="nextQuestion">下一题</button>
</div>
</div>
<!-- 科学游戏 -->
<div v-else-if="currentGame.subject === 'science'" class="science-game">
<div class="game-question">
<div class="question-with-audio">
<h4>{{ currentGame.question }}</h4>
<button class="audio-btn" @click="playAudio(currentGame.question)">🔊</button>
</div>
<div class="experiment-area">
<div class="experiment-item" v-for="(item, idx) in currentGame.items" :key="idx">
<div class="item-icon">{{ item.icon }}</div>
<div class="item-name-with-audio">
<span>{{ item.name }}</span>
<button class="part-audio-btn" @click.stop="playAudio(item.name)">🔊</button>
</div>
<button class="use-btn" @click="useItem(item)">
使用
</button>
</div>
</div>
<div class="experiment-result" v-if="experimentResult">
<div class="result-with-audio">
<p>{{ experimentResult }}</p>
<button class="audio-btn" @click="playAudio(experimentResult)">🔊</button>
</div>
</div>
</div>
<button class="submit-btn" @click="checkScienceAnswer">完成实验</button>
<div class="game-feedback" v-if="showFeedback">
<div :class="['feedback-message', isCorrect ? 'correct' : 'incorrect']">
{{ feedbackMessage }}
</div>
<button class="next-btn" @click="nextQuestion">下一题</button>
</div>
</div>
<!-- 日语游戏 -->
<div v-else-if="currentGame.subject === 'japanese'" class="japanese-game">
<div class="game-question">
<div class="question-with-audio">
<h4>{{ currentGame.question }}</h4>
<button class="audio-btn" @click="playAudio(currentGame.question)">
🔊
</button>
</div>
<div class="word-options">
<div
v-for="(option, idx) in currentGame.options"
:key="idx"
class="option-btn"
@click="checkJapaneseAnswer(option)"
>
<span>{{ option }}</span>
<div class="option-audio-btn" @click.stop="playAudio(option)">🔊</div>
</div>
</div>
</div>
<div class="game-feedback" v-if="showFeedback">
<div :class="['feedback-message', isCorrect ? 'correct' : 'incorrect']">
{{ feedbackMessage }}
</div>
<button class="next-btn" @click="nextQuestion">下一题</button>
</div>
</div>
<!-- 地理游戏 -->
<div v-else-if="currentGame.subject === 'geography'" class="geography-game">
<div class="game-question">
<div class="question-with-audio">
<h4>{{ currentGame.question }}</h4>
<button class="audio-btn" @click="playAudio(currentGame.question)">🔊</button>
</div>
<div class="word-options">
<div
v-for="(option, idx) in currentGame.options"
:key="idx"
class="option-btn"
@click="checkGeographyAnswer(option)"
>
<span>{{ option }}</span>
<div class="option-audio-btn" @click.stop="playAudio(option)">🔊</div>
</div>
</div>
</div>
<div class="game-feedback" v-if="showFeedback">
<div :class="['feedback-message', isCorrect ? 'correct' : 'incorrect']">
{{ feedbackMessage }}
</div>
<button class="next-btn" @click="nextQuestion">下一题</button>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, computed } from 'vue';
import { useStarEnergyStore } from '../stores/starEnergy';
// 获取当前用户
const getCurrentUser = () => {
return localStorage.getItem('currentUser') || 'default';
};
const starEnergyStore = useStarEnergyStore();
const currentSubject = ref<string | null>(null);
const currentGame = ref<any>(null);
const showFeedback = ref(false);
const isCorrect = ref(false);
const feedbackMessage = ref('');
const currentAnswer = ref('');
const experimentResult = ref('');
const currentQuestionIndex = ref(0);
// 每日题目上限
const dailyLimits = {
math: 25,
chinese: 25,
english: 25,
science: 25,
japanese: 25,
geography: 25
};
// 题目进度跟踪
const progress = ref({
math: {
counting: 0,
shapes: 0,
calculation: 0
},
chinese: {
radicals: 0,
pinyin: 0,
words: 0
},
english: {
maze: 0,
animal: 0,
dialogue: 0
},
science: {
plants: 0,
buoyancy: 0,
colors: 0,
chemistry: 0,
physics: 0,
experiments: 0
},
japanese: {
hiragana: 0,
animals: 0,
fruits: 0,
body: 0,
directions: 0,
items: 0,
greetings: 0
},
geography: {
map: 0,
basics: 0,
northSouth: 0
}
});
// 每日完成记录
const dailyProgress = ref({
date: new Date().toDateString(),
completed: {
math: 0,
chinese: 0,
english: 0,
science: 0,
japanese: 0,
geography: 0
}
});
// 检查是否达到每日上限
const isDailyLimitReached = (subject: string) => {
console.log('检查每日上限:', subject);
const completed = dailyProgress.value.completed[subject] || 0;
const limit = dailyLimits[subject] || 25;
console.log('已完成:', completed, '上限:', limit);
return completed >= limit;
};
// 初始化时加载语音合成API的voices和进度数据
onMounted(() => {
// 触发语音合成API的加载
window.speechSynthesis.getVoices();
// 加载进度数据
loadProgress();
// 检查日期是否更新
checkDateUpdate();
});
// 加载进度数据
const loadProgress = () => {
const user = getCurrentUser();
const savedProgress = localStorage.getItem(`knowledgeProgress_${user}`);
if (savedProgress) {
try {
const data = JSON.parse(savedProgress);
if (data.progress) {
progress.value = data.progress;
}
if (data.dailyProgress) {
dailyProgress.value = data.dailyProgress;
}
if (data.tasks) {
tasks.value = data.tasks;
}
} catch (error) {
console.error('加载进度数据失败:', error);
}
}
};
// 保存进度数据
const saveProgress = () => {
const user = getCurrentUser();
const data = {
progress: progress.value,
dailyProgress: dailyProgress.value,
tasks: tasks.value
};
localStorage.setItem(`knowledgeProgress_${user}`, JSON.stringify(data));
};
// 检查日期更新
const checkDateUpdate = () => {
const today = new Date().toDateString();
if (dailyProgress.value.date !== today) {
// 新的一天,重置每日进度
dailyProgress.value = {
date: today,
completed: {
math: 0,
chinese: 0,
english: 0,
science: 0,
japanese: 0,
geography: 0
}
};
// 任务的完成状态保持不变,以保持持久学习的状态
saveProgress();
}
};
// 学科标题
const subjectTitles = {
math: '数学魔法课',
chinese: '语文魔法课',
english: '英语魔法课',
science: '科学魔法课',
japanese: '日语魔法课',
geography: '地理魔法课'
};
// 任务数据
const tasks = ref({
math: [
{
title: '数农场里的小鸡',
description: '和 "数字松鼠" 一起数农场里的小鸡1-100 认知)',
reward: 5,
completed: false,
icon: '🐿️'
},
{
title: '搭建几何城堡',
description: '用几何积木搭建城堡(形状认知)',
reward: 5,
completed: false,
icon: '🏰'
},
{
title: '超市收银算账',
description: '模拟超市收银算账(加减法)',
reward: 5,
completed: false,
icon: '💰'
}
],
chinese: [
{
title: '拼偏旁游戏',
description: '帮 "汉字小精灵" 拼偏旁(氵 + 可 = 河)',
reward: 5,
completed: false,
icon: '✏️'
},
{
title: '拼音练习',
description: '学习声母、韵母和整体认读音节',
reward: 5,
completed: false,
icon: '🎢'
},
{
title: '词语认读',
description: '认识一年级常用词语,快乐学习',
reward: 5,
completed: false,
icon: '📚'
}
],
english: [
{
title: '字母迷宫',
description: '和 "字母小鸟" 走迷宫(字母认知)',
reward: 5,
completed: false,
icon: '🐦'
},
{
title: '动物喂食',
description: '给动物园的动物喂食物(跟读单词)',
reward: 5,
completed: false,
icon: '🐯'
},
{
title: '情景对话',
description: '在 "情景飞船" 里用英语打招呼(对话练习)',
reward: 5,
completed: false,
icon: '🚀'
}
],
science: [
{
title: '植物生长',
description: '在 "植物实验室" 给小花浇水、晒太阳,观察它长大(生物)',
reward: 8,
completed: false,
icon: '🌱'
},
{
title: '浮力实验',
description: '往 "浮力池塘" 放石头、木块,看谁会沉谁会浮(物理)',
reward: 8,
completed: false,
icon: '🌊'
},
{
title: '颜色混合',
description: '用 "颜色魔法瓶" 混合色素,变出彩虹色(化学)',
reward: 8,
completed: false,
icon: '🌈'
},
{
title: '化学实验',
description: '探索化学反应、蒸汽气化等有趣的化学现象',
reward: 10,
completed: false,
icon: '🧪'
},
{
title: '物理实验',
description: '了解电池、电路、磁铁等物理原理',
reward: 10,
completed: false,
icon: '⚡'
},
{
title: '科学小实验',
description: '动手做有趣的科学小实验,探索科学奥秘',
reward: 12,
completed: false,
icon: '🔬'
}
],
japanese: [
{
title: '50音图学习',
description: '学习日语的基础50音图掌握平假名的发音和书写',
reward: 5,
completed: false,
icon: 'あ'
},
{
title: '小动物日语',
description: '学习常见小动物的日语名称和发音',
reward: 5,
completed: false,
icon: '🐱'
},
{
title: '水果日语',
description: '学习各种水果的日语名称和发音',
reward: 5,
completed: false,
icon: '🍎'
},
{
title: '身体部位日语',
description: '学习身体各部位的日语名称和发音',
reward: 5,
completed: false,
icon: '👤'
},
{
title: '方向日语',
description: '学习前后左右等方向的日语表达',
reward: 5,
completed: false,
icon: '🧭'
},
{
title: '日常物品日语',
description: '学习生活中常用物品的日语名称',
reward: 5,
completed: false,
icon: '🏠'
},
{
title: '问候语日语',
description: '学习日常问候语和礼貌用语的日语表达',
reward: 5,
completed: false,
icon: '👋'
}
],
geography: [
{
title: '中国地图认知',
description: '认识中国地图的形状和主要省份',
reward: 5,
completed: false,
icon: '🗺️'
},
{
title: '中国地理常识',
description: '学习中国的地理位置、面积等基本常识',
reward: 5,
completed: false,
icon: '🌏'
},
{
title: '南北方差异',
description: '了解中国南北方的地理文化差异',
reward: 5,
completed: false,
icon: '🌵'
}
]
});
// 游戏数据
const gameData = {
geography: {
// 中国地图认知
map: [
{ question: '中国地图的形状像什么?', options: ['公鸡', '兔子', '大象', '龙'], answer: '公鸡' },
{ question: '中国的首都是哪里?', options: ['上海', '北京', '广州', '深圳'], answer: '北京' },
{ question: '中国最大的岛屿是哪个?', options: ['海南岛', '台湾岛', '崇明岛', '舟山群岛'], answer: '台湾岛' },
{ question: '中国最长的河流是哪条?', options: ['黄河', '长江', '珠江', '松花江'], answer: '长江' },
{ question: '中国的母亲河是哪条?', options: ['长江', '黄河', '珠江', '淮河'], answer: '黄河' }
],
// 中国地理常识
basics: [
{ question: '中国位于哪个大洲?', options: ['欧洲', '亚洲', '非洲', '北美洲'], answer: '亚洲' },
{ question: '中国的土地面积大约是多少?', options: ['960万平方公里', '860万平方公里', '760万平方公里', '660万平方公里'], answer: '960万平方公里' },
{ question: '中国的邻国中,面积最大的是哪个国家?', options: ['俄罗斯', '印度', '蒙古', '朝鲜'], answer: '俄罗斯' },
{ question: '中国的四大直辖市是北京、上海、天津和哪里?', options: ['重庆', '广州', '深圳', '成都'], answer: '重庆' },
{ question: '中国的地势特点是什么?', options: ['东高西低', '西高东低', '南高北低', '北高南低'], answer: '西高东低' },
{ question: '中国最大的高原是哪个?', options: ['青藏高原', '内蒙古高原', '黄土高原', '云贵高原'], answer: '青藏高原' },
{ question: '中国最大的平原是哪个?', options: ['东北平原', '华北平原', '长江中下游平原', '关中平原'], answer: '东北平原' },
{ question: '中国的南海诸岛属于哪个省级行政区?', options: ['广东省', '海南省', '福建省', '台湾省'], answer: '海南省' },
{ question: '中国的五岳中,位于山东省的是哪座山?', options: ['泰山', '华山', '衡山', '恒山'], answer: '泰山' }
],
// 南北方差异
northSouth: [
{ question: '中国南北方的分界线是什么?', options: ['秦岭-淮河', '长江', '黄河', '长城'], answer: '秦岭-淮河' },
{ question: '北方地区的主要粮食作物是什么?', options: ['小麦', '水稻', '玉米', '高粱'], answer: '小麦' },
{ question: '南方地区的主要粮食作物是什么?', options: ['水稻', '小麦', '玉米', '高粱'], answer: '水稻' },
{ question: '北方人喜欢吃的面食是?', options: ['面条', '米饭', '馒头', '饺子'], answer: '面条' },
{ question: '南方人喜欢吃的主食是?', options: ['米饭', '面条', '馒头', '饺子'], answer: '米饭' }
]
},
math: {
// 数数练习1-100 认知)
counting: [
// 原有题目
{ question: '农场里有5只小鸡又来了3只现在一共有几只', options: ['6', '7', '8', '9'], answer: '8' },
{ question: '树上有10只鸟飞走了2只还剩几只', options: ['6', '7', '8', '9'], answer: '8' },
{ question: '教室里有8个学生又来了5个现在一共有几个', options: ['11', '12', '13', '14'], answer: '13' },
{ question: '篮子里有15个苹果吃了4个还剩几个', options: ['9', '10', '11', '12'], answer: '11' },
{ question: '停车场有20辆车开走了7辆还剩几辆', options: ['11', '12', '13', '14'], answer: '13' },
{ question: '书包里有6本书又放了3本现在有几本', options: ['8', '9', '10', '11'], answer: '9' },
{ question: '花园里有12朵花摘了5朵还剩几朵', options: ['6', '7', '8', '9'], answer: '7' },
{ question: '池塘里有7条小鱼又来了6条一共有几条', options: ['11', '12', '13', '14'], answer: '13' },
{ question: '盒子里有18颗糖分给同学8颗还剩几颗', options: ['8', '9', '10', '11'], answer: '10' },
{ question: '操场上跑着14个小朋友3个回家了还剩几个', options: ['9', '10', '11', '12'], answer: '11' },
{ question: '妈妈买了9个橘子又买了7个一共有几个', options: ['15', '16', '17', '18'], answer: '16' },
{ question: '图书馆有25本书借走10本还剩几本', options: ['13', '14', '15', '16'], answer: '15' },
{ question: '小明有16颗星星妹妹给了他4颗现在有几颗', options: ['18', '19', '20', '21'], answer: '20' },
{ question: '树上有30片叶子风吹落了8片还剩几片', options: ['20', '21', '22', '23'], answer: '22' },
{ question: '盒子里有40个彩球拿出15个还剩几个', options: ['23', '24', '25', '26'], answer: '25' },
{ question: '草地上有50朵花摘了12朵还剩几朵', options: ['36', '37', '38', '39'], answer: '38' },
{ question: '班级有45个学生转走了8个还剩几个', options: ['35', '36', '37', '38'], answer: '37' },
{ question: '家里有60个苹果吃了18个还剩几个', options: ['40', '41', '42', '43'], answer: '42' },
{ question: '动物园有70只动物又来了20只一共有几只', options: ['88', '89', '90', '91'], answer: '90' },
{ question: '学校有100本图书借出去35本还剩几本', options: ['63', '64', '65', '66'], answer: '65' },
// 新添加题目 - 5以内数的认识和加、减法
{ question: '1+1=?', options: ['1', '2', '3', '4'], answer: '2' },
{ question: '2+2=?', options: ['3', '4', '5', '6'], answer: '4' },
{ question: '3+2=?', options: ['4', '5', '6', '7'], answer: '5' },
{ question: '4-1=?', options: ['1', '2', '3', '4'], answer: '3' },
{ question: '5-2=?', options: ['2', '3', '4', '5'], answer: '3' },
{ question: '0+5=?', options: ['0', '1', '5', '10'], answer: '5' },
{ question: '5-0=?', options: ['0', '5', '10', '15'], answer: '5' },
{ question: '3+0=?', options: ['0', '3', '6', '9'], answer: '3' },
// 新添加题目 - 610的认识和加、减法
{ question: '6+3=?', options: ['7', '8', '9', '10'], answer: '9' },
{ question: '7+2=?', options: ['8', '9', '10', '11'], answer: '9' },
{ question: '8+2=?', options: ['8', '9', '10', '11'], answer: '10' },
{ question: '9-4=?', options: ['4', '5', '6', '7'], answer: '5' },
{ question: '10-3=?', options: ['6', '7', '8', '9'], answer: '7' },
{ question: '6+4=?', options: ['8', '9', '10', '11'], answer: '10' },
{ question: '7+3=?', options: ['8', '9', '10', '11'], answer: '10' },
// 新添加题目 - 1120的认识
{ question: '11+2=?', options: ['12', '13', '14', '15'], answer: '13' },
{ question: '15-3=?', options: ['10', '11', '12', '13'], answer: '12' },
{ question: '18-5=?', options: ['12', '13', '14', '15'], answer: '13' },
{ question: '20-2=?', options: ['16', '17', '18', '19'], answer: '18' },
// 新添加题目 - 20以内的进位加法
{ question: '9+3=?', options: ['10', '11', '12', '13'], answer: '12' },
{ question: '8+5=?', options: ['11', '12', '13', '14'], answer: '13' },
{ question: '7+6=?', options: ['12', '13', '14', '15'], answer: '13' },
{ question: '6+7=?', options: ['12', '13', '14', '15'], answer: '13' },
{ question: '5+8=?', options: ['12', '13', '14', '15'], answer: '13' },
// 新添加题目 - 20以内的退位减法
{ question: '12-9=?', options: ['1', '2', '3', '4'], answer: '3' },
{ question: '15-8=?', options: ['5', '6', '7', '8'], answer: '7' },
{ question: '14-7=?', options: ['5', '6', '7', '8'], answer: '7' },
{ question: '13-6=?', options: ['5', '6', '7', '8'], answer: '7' },
// 新添加题目 - 100以内数的认识
{ question: '20+30=?', options: ['40', '50', '60', '70'], answer: '50' },
{ question: '40+50=?', options: ['70', '80', '90', '100'], answer: '90' },
{ question: '60-20=?', options: ['30', '40', '50', '60'], answer: '40' },
{ question: '80-30=?', options: ['40', '50', '60', '70'], answer: '50' },
{ question: '30+5=?', options: ['30', '35', '40', '45'], answer: '35' },
{ question: '40+7=?', options: ['40', '47', '50', '57'], answer: '47' },
{ question: '25-5=?', options: ['15', '20', '25', '30'], answer: '20' },
{ question: '37-7=?', options: ['20', '30', '40', '50'], answer: '30' }
].sort(() => Math.random() - 0.5), // 随机打乱顺序
// 形状认知(混合难度)
shapes: [
// 原有题目
{ question: '下列哪个是圆形?', options: ['🔺', '⬜', '🔴', '▸'], answer: '🔴' },
{ question: '下列哪个是三角形?', options: ['🔴', '⬜', '🔺', '⭕'], answer: '🔺' },
{ question: '下列哪个是正方形?', options: ['🔴', '⬜', '🔺', '⭕'], answer: '⬜' },
{ question: '下列哪个是长方形?', options: ['🔴', '⬜', '🔺', '▭'], answer: '▭' },
{ question: '太阳是什么形状?', options: ['方形', '圆形', '三角形', '长方形'], answer: '圆形' },
{ question: '书本是什么形状?', options: ['圆形', '长方形', '三角形', '椭圆形'], answer: '长方形' },
{ question: '三角形有几条边?', options: ['2条', '3条', '4条', '5条'], answer: '3条' },
{ question: '正方形有几条边?', options: ['3条', '4条', '5条', '6条'], answer: '4条' },
{ question: '下列哪个物体是圆形的?', options: ['书本', '球', '铅笔盒', '桌子'], answer: '球' },
{ question: '车轮是什么形状?', options: ['方形', '三角形', '圆形', '长方形'], answer: '圆形' },
// 新添加题目 - 认识立体图形
{ question: '下列哪个是正方体?', options: ['🔲', '📦', '⚪', '🔺'], answer: '📦' },
{ question: '下列哪个是长方体?', options: ['🔲', '📦', '⚪', '🔺'], answer: '📦' },
{ question: '下列哪个是球体?', options: ['🔲', '📦', '⚪', '🔺'], answer: '⚪' },
{ question: '下列哪个是圆柱体?', options: ['🔲', '📦', '⚪', '🥫'], answer: '🥫' },
{ question: '正方体有几个面?', options: ['4个', '6个', '8个', '12个'], answer: '6个' },
{ question: '长方体有几个面?', options: ['4个', '6个', '8个', '12个'], answer: '6个' },
// 新添加题目 - 认识平面图形
{ question: '下列哪个是平行四边形?', options: ['🔺', '⬜', '▭', '🔷'], answer: '🔷' },
{ question: '下列哪个是梯形?', options: ['🔺', '⬜', '▭', '🔶'], answer: '🔶' },
{ question: '圆形有几条边?', options: ['0条', '1条', '2条', '3条'], answer: '0条' },
{ question: '平行四边形有几条边?', options: ['3条', '4条', '5条', '6条'], answer: '4条' },
// 原有中等难度题目
{ question: '一个正方形有几条边和几个角?', options: ['3条边3个角', '4条边4个角', '5条边5个角', '6条边6个角'], answer: '4条边4个角' },
{ question: '下列哪个图形有5条边', options: ['三角形', '正方形', '五边形', '六边形'], answer: '五边形' },
{ question: '一个长方形的对边有什么特点?', options: ['长度相等', '长度不等', '一边长一边短', '没有特点'], answer: '长度相等' },
{ question: '用两个三角形可以拼成什么图形?', options: ['正方形', '长方形', '菱形', '以上都可以'], answer: '以上都可以' },
{ question: '下列哪个图形是轴对称图形?', options: ['平行四边形', '梯形', '圆形', '不规则图形'], answer: '圆形' },
{ question: '一个立方体有几个面?', options: ['4个面', '6个面', '8个面', '12个面'], answer: '6个面' },
{ question: '下列哪个图形的内角和是180度', options: ['三角形', '正方形', '五边形', '六边形'], answer: '三角形' },
{ question: '一个圆的直径是半径的几倍?', options: ['1倍', '2倍', '3倍', '4倍'], answer: '2倍' },
{ question: '下列哪个是立体图形?', options: ['正方形', '圆形', '长方体', '三角形'], answer: '长方体' },
{ question: '用4个相同的正方形可以拼成一个大的什么图形', options: ['正方形', '长方形', '三角形', '圆形'], answer: '正方形' }
].sort(() => Math.random() - 0.5), // 随机打乱顺序
// 加减法练习
calculation: [
// 原有题目
{ question: '3 + 5 = ?', options: ['6', '7', '8', '9'], answer: '8' },
{ question: '7 + 6 = ?', options: ['11', '12', '13', '14'], answer: '13' },
{ question: '9 + 8 = ?', options: ['15', '16', '17', '18'], answer: '17' },
{ question: '12 - 5 = ?', options: ['5', '6', '7', '8'], answer: '7' },
{ question: '15 - 7 = ?', options: ['6', '7', '8', '9'], answer: '8' },
{ question: '20 - 8 = ?', options: ['10', '11', '12', '13'], answer: '12' },
{ question: '25 + 15 = ?', options: ['38', '39', '40', '41'], answer: '40' },
{ question: '18 + 22 = ?', options: ['38', '39', '40', '41'], answer: '40' },
{ question: '45 - 18 = ?', options: ['25', '26', '27', '28'], answer: '27' },
{ question: '36 - 19 = ?', options: ['15', '16', '17', '18'], answer: '17' },
{ question: '14 + 26 = ?', options: ['38', '39', '40', '41'], answer: '40' },
{ question: '33 + 17 = ?', options: ['48', '49', '50', '51'], answer: '50' },
{ question: '52 - 28 = ?', options: ['22', '23', '24', '25'], answer: '24' },
{ question: '67 - 39 = ?', options: ['26', '27', '28', '29'], answer: '28' },
{ question: '48 + 35 = ?', options: ['81', '82', '83', '84'], answer: '83' },
{ question: '72 + 28 = ?', options: ['98', '99', '100', '101'], answer: '100' },
{ question: '85 - 47 = ?', options: ['36', '37', '38', '39'], answer: '38' },
{ question: '94 - 56 = ?', options: ['36', '37', '38', '39'], answer: '38' },
{ question: '56 + 44 = ?', options: ['98', '99', '100', '101'], answer: '100' },
{ question: '78 + 22 = ?', options: ['98', '99', '100', '101'], answer: '100' },
// 新添加题目 - 连加、连减、加减混合
{ question: '2+3+5=?', options: ['8', '9', '10', '11'], answer: '10' },
{ question: '10-2-3=?', options: ['3', '4', '5', '6'], answer: '5' },
{ question: '5+3-2=?', options: ['5', '6', '7', '8'], answer: '6' },
{ question: '8-3+2=?', options: ['5', '6', '7', '8'], answer: '7' },
// 新添加题目 - 100以内的口算加、减法
{ question: '23+5=?', options: ['26', '27', '28', '29'], answer: '28' },
{ question: '35+40=?', options: ['70', '75', '80', '85'], answer: '75' },
{ question: '47+8=?', options: ['53', '54', '55', '56'], answer: '55' },
{ question: '62-30=?', options: ['30', '31', '32', '33'], answer: '32' },
{ question: '54-7=?', options: ['45', '46', '47', '48'], answer: '47' },
// 新添加题目 - 100以内的笔算加、减法
{ question: '25+36=?', options: ['59', '60', '61', '62'], answer: '61' },
{ question: '48+35=?', options: ['81', '82', '83', '84'], answer: '83' },
{ question: '72-28=?', options: ['42', '43', '44', '45'], answer: '44' },
{ question: '65-37=?', options: ['26', '27', '28', '29'], answer: '28' }
].sort(() => Math.random() - 0.5) // 随机打乱顺序
},
chinese: {
// 偏旁组字 - 学习偏旁部首(一年级常用偏旁)
radicals: [
// 原有题目
{ question: '请选择正确的偏旁部首组成"江"字', options: ['氵', '木', '艹', '口'], answer: '氵', audio: '江,三点水旁' },
{ question: '请选择正确的偏旁部首组成"树"字', options: ['木', '氵', '艹', '口'], answer: '木', audio: '树,木字旁' },
{ question: '请选择正确的偏旁部首组成"花"字', options: ['艹', '木', '氵', '口'], answer: '艹', audio: '花,草字头' },
{ question: '请选择正确的偏旁部首组成"说"字', options: ['讠', '木', '氵', '艹'], answer: '讠', audio: '说,言字旁' },
{ question: '请选择正确的偏旁部首组成"好"字', options: ['女', '氵', '木', '艹'], answer: '女', audio: '好,女字旁' },
{ question: '请选择正确的偏旁部首组成"爸"字', options: ['父', '母', '女', '子'], answer: '父', audio: '爸爸,父字头' },
{ question: '请选择正确的偏旁部首组成"妈"字', options: ['女', '父', '子', '口'], answer: '女', audio: '妈妈,女字旁' },
{ question: '请选择正确的偏旁部首组成"河"字', options: ['氵', '木', '艹', '口'], answer: '氵', audio: '河,三点水旁' },
{ question: '请选择正确的偏旁部首组成"林"字', options: ['木', '氵', '艹', '口'], answer: '木', audio: '林,木字旁' },
{ question: '请选择正确的偏旁部首组成"明"字', options: ['日', '月', '木', '水'], answer: '日', audio: '明,日字旁' },
{ question: '请选择正确的偏旁部首组成"吃"字', options: ['口', '氵', '木', '艹'], answer: '口', audio: '吃,口字旁' },
{ question: '请选择正确的偏旁部首组成"笑"字', options: ['竹', '木', '氵', '艹'], answer: '竹', audio: '笑,竹字头' },
{ question: '请选择正确的偏旁部首组成"跑"字', options: ['⻊', '氵', '木', '艹'], answer: '⻊', audio: '跑,足字旁' },
{ question: '请选择正确的偏旁部首组成"听"字', options: ['口', '氵', '木', '艹'], answer: '口', audio: '听,口字旁' },
{ question: '请选择正确的偏旁部首组成"看"字', options: ['手', '氵', '木', '艹'], answer: '手', audio: '看,手字旁' },
{ question: '请选择正确的偏旁部首组成"和"字', options: ['禾', '氵', '木', '艹'], answer: '禾', audio: '和,禾字旁' },
{ question: '请选择正确的偏旁部首组成"写"字', options: ['宀', '氵', '木', '艹'], answer: '宀', audio: '写,宝盖头' },
{ question: '请选择正确的偏旁部首组成"字"字', options: ['宀', '氵', '木', '艹'], answer: '宀', audio: '字,宝盖头' },
{ question: '请选择正确的偏旁部首组成"学"字', options: ['⺍', '氵', '木', '艹'], answer: '⺍', audio: '学,学字头' },
{ question: '请选择正确的偏旁部首组成"画"字', options: ['田', '氵', '木', '艹'], answer: '田', audio: '画,田字旁' },
// 新添加题目 - 第一单元·识字
{ question: '请选择正确的偏旁部首组成"天"字', options: ['一', '二', '大', '人'], answer: '一', audio: '天,横字头' },
{ question: '请选择正确的偏旁部首组成"地"字', options: ['土', '氵', '木', '口'], answer: '土', audio: '地,提土旁' },
{ question: '请选择正确的偏旁部首组成"人"字', options: ['人', '亻', '口', '木'], answer: '人', audio: '人,人字旁' },
{ question: '请选择正确的偏旁部首组成"金"字', options: ['金', '钅', '木', '氵'], answer: '金', audio: '金,金字旁' },
{ question: '请选择正确的偏旁部首组成"木"字', options: ['木', '氵', '艹', '口'], answer: '木', audio: '木,木字旁' },
{ question: '请选择正确的偏旁部首组成"水"字', options: ['水', '氵', '木', '艹'], answer: '水', audio: '水,水字旁' },
{ question: '请选择正确的偏旁部首组成"火"字', options: ['火', '氵', '木', '艹'], answer: '火', audio: '火,火字旁' },
{ question: '请选择正确的偏旁部首组成"土"字', options: ['土', '氵', '木', '艹'], answer: '土', audio: '土,提土旁' },
{ question: '请选择正确的偏旁部首组成"口"字', options: ['口', '氵', '木', '艹'], answer: '口', audio: '口,口字旁' },
{ question: '请选择正确的偏旁部首组成"耳"字', options: ['耳', '氵', '木', '艹'], answer: '耳', audio: '耳,耳字旁' },
{ question: '请选择正确的偏旁部首组成"目"字', options: ['目', '氵', '木', '艹'], answer: '目', audio: '目,目字旁' },
{ question: '请选择正确的偏旁部首组成"手"字', options: ['手', '扌', '氵', '木'], answer: '手', audio: '手,手字旁' },
{ question: '请选择正确的偏旁部首组成"足"字', options: ['足', '⻊', '氵', '木'], answer: '足', audio: '足,足字旁' },
{ question: '请选择正确的偏旁部首组成"日"字', options: ['日', '氵', '木', '艹'], answer: '日', audio: '日,日字旁' },
{ question: '请选择正确的偏旁部首组成"月"字', options: ['月', '氵', '木', '艹'], answer: '月', audio: '月,月字旁' },
{ question: '请选择正确的偏旁部首组成"山"字', options: ['山', '氵', '木', '艹'], answer: '山', audio: '山,山字旁' },
{ question: '请选择正确的偏旁部首组成"川"字', options: ['川', '氵', '木', '艹'], answer: '川', audio: '川,川字旁' },
// 新添加题目 - 第六单元·识字
{ question: '请选择正确的偏旁部首组成"对"字', options: ['又', '氵', '木', '艹'], answer: '又', audio: '对,又字旁' },
{ question: '请选择正确的偏旁部首组成"书"字', options: ['乛', '氵', '木', '艹'], answer: '乛', audio: '书,折文旁' },
{ question: '请选择正确的偏旁部首组成"包"字', options: ['勹', '氵', '木', '艹'], answer: '勹', audio: '包,包字头' },
{ question: '请选择正确的偏旁部首组成"升"字', options: ['丿', '氵', '木', '艹'], answer: '丿', audio: '升,撇字头' },
{ question: '请选择正确的偏旁部首组成"国"字', options: ['囗', '氵', '木', '艹'], answer: '囗', audio: '国,口字框' },
{ question: '请选择正确的偏旁部首组成"旗"字', options: ['方', '氵', '木', '艹'], answer: '方', audio: '旗,方字旁' }
].sort(() => Math.random() - 0.5), // 随机打乱顺序
// 拼音练习 - 声母、韵母
pinyin: [
// 原有题目
{ question: '请选择正确的声母:"b"的读音是?', options: ['玻', '波', '博', '伯'], answer: '玻', audio: '波波的波' },
{ question: '请选择正确的韵母:"a"的读音是?', options: ['啊', '阿', '奥', '安'], answer: '啊', audio: '阿阿姨的啊' },
{ question: '请选择正确的声母:"p"的读音是?', options: ['坡', '破', '泊', '魄'], answer: '坡', audio: '坡皮的坡' },
{ question: '请选择正确的韵母:"o"的读音是?', options: ['哦', '喔', '欧', '偶'], answer: '哦', audio: '哦哦的哦' },
{ question: '请选择正确的声母:"m"的读音是?', options: ['摸', '摩', '魔', '莫'], answer: '摸', audio: '摸摸的摸' },
{ question: '请选择正确的韵母:"e"的读音是?', options: ['额', '鹅', '鄂', '俄'], answer: '额', audio: '额头的额' },
{ question: '请选择正确的声母:"f"的读音是?', options: ['佛', '否', '弗', '福'], answer: '佛', audio: '佛陀的佛' },
{ question: '请选择正确的韵母:"i"的读音是?', options: ['衣', '医', '伊', '依'], answer: '衣', audio: '衣服的衣' },
{ question: '请选择正确的声母:"d"的读音是?', options: ['得', '德', '地', '弟'], answer: '得', audio: '得得的得' },
{ question: '请选择正确的韵母:"u"的读音是?', options: ['乌', '无', '五', '屋'], answer: '乌', audio: '乌鸦的乌' },
{ question: '请选择正确的声母:"t"的读音是?', options: ['特', '忒', '替', '梯'], answer: '特', audio: '特别的特' },
{ question: '请选择正确的韵母:"ü"的读音是?', options: ['迂', '鱼', '雨', '玉'], answer: '迂', audio: '迂回的迂' },
{ question: '请选择正确的声母:"n"的读音是?', options: ['讷', '那', '拿', '内'], answer: '讷', audio: '讷讷的讷' },
{ question: '请选择正确的声母:"l"的读音是?', options: ['勒', '乐', '拉', '来'], answer: '勒', audio: '勒紧的勒' },
{ question: '请选择正确的声母:"g"的读音是?', options: ['哥', '个', '格', '各'], answer: '哥', audio: '哥哥的哥' },
{ question: '请选择正确的声母:"k"的读音是?', options: ['科', '可', '课', '客'], answer: '科', audio: '科学的科' },
{ question: '请选择正确的声母:"h"的读音是?', options: ['喝', '合', '河', '和'], answer: '喝', audio: '喝水的喝' },
{ question: '请选择正确的声母:"j"的读音是?', options: ['基', '机', '鸡', '积'], answer: '基', audio: '基础的基' },
{ question: '请选择正确的声母:"q"的读音是?', options: ['欺', '七', '期', '起'], answer: '欺', audio: '欺负的欺' },
{ question: '请选择正确的声母:"x"的读音是?', options: ['西', '希', '习', '喜'], answer: '西', audio: '东西的西' },
// 新添加题目 - 第二单元·汉语拼音
{ question: '请选择正确的单韵母:"a"的读音是?', options: ['啊', '阿', '奥', '安'], answer: '啊', audio: '阿阿姨的啊' },
{ question: '请选择正确的单韵母:"o"的读音是?', options: ['哦', '喔', '欧', '偶'], answer: '哦', audio: '哦哦的哦' },
{ question: '请选择正确的单韵母:"e"的读音是?', options: ['额', '鹅', '鄂', '俄'], answer: '额', audio: '额头的额' },
{ question: '请选择正确的单韵母:"i"的读音是?', options: ['衣', '医', '伊', '依'], answer: '衣', audio: '衣服的衣' },
{ question: '请选择正确的单韵母:"u"的读音是?', options: ['乌', '无', '五', '屋'], answer: '乌', audio: '乌鸦的乌' },
{ question: '请选择正确的单韵母:"ü"的读音是?', options: ['迂', '鱼', '雨', '玉'], answer: '迂', audio: '迂回的迂' },
{ question: '请选择正确的声母:"b"的读音是?', options: ['玻', '波', '博', '伯'], answer: '玻', audio: '波波的波' },
{ question: '请选择正确的声母:"p"的读音是?', options: ['坡', '破', '泊', '魄'], answer: '坡', audio: '坡皮的坡' },
{ question: '请选择正确的声母:"m"的读音是?', options: ['摸', '摩', '魔', '莫'], answer: '摸', audio: '摸摸的摸' },
{ question: '请选择正确的声母:"f"的读音是?', options: ['佛', '否', '弗', '福'], answer: '佛', audio: '佛陀的佛' },
{ question: '请选择正确的声母:"d"的读音是?', options: ['得', '德', '地', '弟'], answer: '得', audio: '得得的得' },
{ question: '请选择正确的声母:"t"的读音是?', options: ['特', '忒', '替', '梯'], answer: '特', audio: '特别的特' },
{ question: '请选择正确的声母:"n"的读音是?', options: ['讷', '那', '拿', '内'], answer: '讷', audio: '讷讷的讷' },
{ question: '请选择正确的声母:"l"的读音是?', options: ['勒', '乐', '拉', '来'], answer: '勒', audio: '勒紧的勒' },
// 新添加题目 - 第三单元·汉语拼音
{ question: '请选择正确的声母:"g"的读音是?', options: ['哥', '个', '格', '各'], answer: '哥', audio: '哥哥的哥' },
{ question: '请选择正确的声母:"k"的读音是?', options: ['科', '可', '课', '客'], answer: '科', audio: '科学的科' },
{ question: '请选择正确的声母:"h"的读音是?', options: ['喝', '合', '河', '和'], answer: '喝', audio: '喝水的喝' },
{ question: '请选择正确的声母:"j"的读音是?', options: ['基', '机', '鸡', '积'], answer: '基', audio: '基础的基' },
{ question: '请选择正确的声母:"q"的读音是?', options: ['欺', '七', '期', '起'], answer: '欺', audio: '欺负的欺' },
{ question: '请选择正确的声母:"x"的读音是?', options: ['西', '希', '习', '喜'], answer: '西', audio: '东西的西' },
{ question: '请选择正确的声母:"z"的读音是?', options: ['资', '子', '字', '自'], answer: '资', audio: '资金的资' },
{ question: '请选择正确的声母:"c"的读音是?', options: ['刺', '次', '词', '此'], answer: '刺', audio: '刺猬的刺' },
{ question: '请选择正确的声母:"s"的读音是?', options: ['思', '丝', '死', '四'], answer: '思', audio: '思考的思' },
{ question: '请选择正确的声母:"zh"的读音是?', options: ['知', '之', '至', '治'], answer: '知', audio: '知道的知' },
{ question: '请选择正确的声母:"ch"的读音是?', options: ['吃', '尺', '池', '赤'], answer: '吃', audio: '吃饭的吃' },
{ question: '请选择正确的声母:"sh"的读音是?', options: ['师', '诗', '时', '市'], answer: '师', audio: '老师的师' },
{ question: '请选择正确的声母:"r"的读音是?', options: ['日', '入', '如', '肉'], answer: '日', audio: '日子的日' },
{ question: '请选择正确的声母:"y"的读音是?', options: ['衣', '医', '依', '一'], answer: '衣', audio: '衣服的衣' },
{ question: '请选择正确的声母:"w"的读音是?', options: ['乌', '无', '五', '吴'], answer: '乌', audio: '乌鸦的乌' },
// 新添加题目 - 第四单元·汉语拼音
{ question: '请选择正确的复韵母:"ai"的读音是?', options: ['爱', '矮', '埃', '碍'], answer: '爱', audio: '爱情的爱' },
{ question: '请选择正确的复韵母:"ei"的读音是?', options: ['诶', '黑', '备', '贝'], answer: '诶', audio: '诶呀的诶' },
{ question: '请选择正确的复韵母:"ui"的读音是?', options: ['威', '微', '伟', '围'], answer: '威', audio: '威力的威' },
{ question: '请选择正确的复韵母:"ao"的读音是?', options: ['凹', '熬', '袄', '傲'], answer: '凹', audio: '凹凸的凹' },
{ question: '请选择正确的复韵母:"ou"的读音是?', options: ['欧', '偶', '呕', '藕'], answer: '欧', audio: '欧洲的欧' },
{ question: '请选择正确的复韵母:"iu"的读音是?', options: ['优', '游', '友', '有'], answer: '优', audio: '优秀的优' },
{ question: '请选择正确的复韵母:"ie"的读音是?', options: ['耶', '叶', '夜', '业'], answer: '耶', audio: '耶稣的耶' },
{ question: '请选择正确的复韵母:"üe"的读音是?', options: ['约', '月', '越', '悦'], answer: '约', audio: '约会的约' },
{ question: '请选择正确的复韵母:"er"的读音是?', options: ['儿', '而', '耳', '尔'], answer: '儿', audio: '儿子的儿' },
{ question: '请选择正确的鼻韵母:"an"的读音是?', options: ['安', '按', '暗', '岸'], answer: '安', audio: '安全的安' },
{ question: '请选择正确的鼻韵母:"en"的读音是?', options: ['恩', '摁', '嗯', '蒽'], answer: '恩', audio: '恩情的恩' },
{ question: '请选择正确的鼻韵母:"in"的读音是?', options: ['因', '引', '印', '阴'], answer: '因', audio: '因为的因' },
{ question: '请选择正确的鼻韵母:"un"的读音是?', options: ['温', '文', '稳', '问'], answer: '温', audio: '温暖的温' },
{ question: '请选择正确的鼻韵母:"ün"的读音是?', options: ['晕', '云', '允', '运'], answer: '晕', audio: '晕车的晕' },
{ question: '请选择正确的鼻韵母:"ang"的读音是?', options: ['昂', '肮', '盎', '仰'], answer: '昂', audio: '昂首挺胸的昂' },
{ question: '请选择正确的鼻韵母:"eng"的读音是?', options: ['鞥', '恒', '哼', '横'], answer: '鞥', audio: '鞥的发音' },
{ question: '请选择正确的鼻韵母:"ing"的读音是?', options: ['英', '影', '硬', '应'], answer: '英', audio: '英雄的英' },
{ question: '请选择正确的鼻韵母:"ong"的读音是?', options: ['嗡', '翁', '瓮', '蓊'], answer: '嗡', audio: '嗡嗡的嗡' }
].sort(() => Math.random() - 0.5), // 随机打乱顺序
// 词语认读 - 一年级常用词语
words: [
// 原有题目
{ question: '请选择正确的词语:"天上飞的是什么?"', options: ['小鸟', '小牛', '小鱼', '小马'], answer: '小鸟', audio: '小鸟在天空飞翔' },
{ question: '请选择正确的词语:"水里游的是什么?"', options: ['小鱼', '小猫', '小鸡', '小兔'], answer: '小鱼', audio: '小鱼在水里游来游去' },
{ question: '请选择正确的词语:"我们住在什么里面?"', options: ['房子', '车子', '盒子', '桌子'], answer: '房子', audio: '我们住在房子里' },
{ question: '请选择正确的词语:"我们坐在什么上吃饭?"', options: ['椅子', '桌子', '床', '门'], answer: '桌子', audio: '我们坐在桌子旁吃饭' },
{ question: '请选择正确的词语:"我们用什么读书?"', options: ['书本', '铅笔', '橡皮', '尺子'], answer: '书本', audio: '我们用书本读书学习' },
{ question: '请选择正确的词语:"我们用什么东西写字?"', options: ['铅笔', '书本', '橡皮', '桌子'], answer: '铅笔', audio: '我们用铅笔写字' },
{ question: '请选择正确的词语:"太阳出来会怎么样?"', options: ['天亮了', '天黑了', '下雨了', '下雪了'], answer: '天亮了', audio: '太阳出来了,天亮了' },
{ question: '请选择正确的词语:"月亮出来是什么时候?"', options: ['晚上', '早上', '中午', '下午'], answer: '晚上', audio: '月亮出来了,是晚上' },
{ question: '请选择正确的词语:"下雨的时候需要什么?"', options: ['雨伞', '太阳帽', '扇子', '墨镜'], answer: '雨伞', audio: '下雨的时候需要打伞' },
{ question: '请选择正确的词语:"冬天很冷需要穿什么?"', options: ['棉袄', '短袖', '短裤', '凉鞋'], answer: '棉袄', audio: '冬天很冷,要穿棉袄' },
{ question: '请选择正确的词语:"夏天很热需要穿什么?"', options: ['短袖', '棉袄', '羽绒服', '毛衣'], answer: '短袖', audio: '夏天很热,要穿短袖' },
{ question: '请选择正确的词语:"我们用什么东西擦嘴?"', options: ['纸巾', '毛巾', '布', '手'], answer: '纸巾', audio: '我们用纸巾擦嘴' },
{ question: '请选择正确的词语:"我们用什么东西洗脸?"', options: ['毛巾', '纸巾', '布', '手'], answer: '毛巾', audio: '我们用毛巾洗脸' },
{ question: '请选择正确的词语:"我们什么时候吃早餐?"', options: ['早上', '中午', '晚上', '深夜'], answer: '早上', audio: '早上吃早餐' },
{ question: '请选择正确的词语:"我们什么时候吃午餐?"', options: ['中午', '早上', '晚上', '深夜'], answer: '中午', audio: '中午吃午餐' },
{ question: '请选择正确的词语:"我们什么时候吃晚餐?"', options: ['晚上', '早上', '中午', '深夜'], answer: '晚上', audio: '晚上吃晚餐' },
{ question: '请选择正确的词语:"眼睛是用来做什么的?"', options: ['看书', '吃饭', '听歌', '走路'], answer: '看书', audio: '眼睛用来看书' },
{ question: '请选择正确的词语:"耳朵是用来做什么的?"', options: ['听声音', '看书', '吃饭', '闻味道'], answer: '听声音', audio: '耳朵用来听声音' },
{ question: '请选择正确的词语:"鼻子是用来做什么的?"', options: ['闻味道', '看书', '听歌', '走路'], answer: '闻味道', audio: '鼻子用来闻味道' },
{ question: '请选择正确的词语:"嘴巴是用来做什么的?"', options: ['吃饭', '看书', '听歌', '闻味道'], answer: '吃饭', audio: '嘴巴用来吃饭' },
// 新添加题目 - 第一单元·识字
{ question: '请选择正确的词语:"天地人"中的第一个字是?', options: ['天', '地', '人', '山'], answer: '天', audio: '天地人,天是第一个字' },
{ question: '请选择正确的词语:"金木水火土"中的第五个字是?', options: ['金', '木', '水', '土'], answer: '土', audio: '金木水火土,土是第五个字' },
{ question: '请选择正确的词语:"口耳目手足"中的第三个字是?', options: ['口', '耳', '目', '手'], answer: '目', audio: '口耳目手足,目是第三个字' },
{ question: '请选择正确的词语:"日月山川"中的第二个字是?', options: ['日', '月', '山', '川'], answer: '月', audio: '日月山川,月是第二个字' },
// 新添加题目 - 第五单元·阅读
{ question: '请选择正确的词语:"秋天"的天气怎么样?', options: ['炎热', '寒冷', '凉爽', '温暖'], answer: '凉爽', audio: '秋天的天气凉爽' },
{ question: '请选择正确的词语:"江南"是指哪里?', options: ['长江以南', '黄河以南', '珠江以南', '黑龙江以南'], answer: '长江以南', audio: '江南指长江以南的地区' },
{ question: '请选择正确的词语:"雪地里的小画家"中,谁画竹叶?', options: ['小鸡', '小狗', '小鸭', '小马'], answer: '小鸡', audio: '小鸡画竹叶' },
{ question: '请选择正确的词语:"四季"包括哪四个季节?', options: ['春夏秋冬', '春夏秋', '冬春夏', '春秋冬'], answer: '春夏秋冬', audio: '四季包括春夏秋冬' },
// 新添加题目 - 第六单元·识字
{ question: '请选择正确的词语:"对韵歌"中的"云对雨",下一句是?', options: ['雪对风', '花对树', '鸟对虫', '山对水'], answer: '雪对风', audio: '云对雨,雪对风' },
{ question: '请选择正确的词语:"日月明"中,"日月"组成什么字?', options: ['明', '日', '月', '亮'], answer: '明', audio: '日月明' },
{ question: '请选择正确的词语:"小书包"里有什么?', options: ['书本', '玩具', '零食', '手机'], answer: '书本', audio: '小书包里有书本' },
{ question: '请选择正确的词语:"升国旗"时我们要怎么样?', options: ['敬礼', '说话', '玩耍', '睡觉'], answer: '敬礼', audio: '升国旗时我们要敬礼' },
// 新添加题目 - 第七单元·阅读
{ question: '请选择正确的词语:"小小的船"指的是什么?', options: ['月亮', '太阳', '星星', '飞机'], answer: '月亮', audio: '小小的船指的是月亮' },
{ question: '请选择正确的词语:"影子"常常跟着谁?', options: ['我', '你', '他', '她'], answer: '我', audio: '影子常常跟着我' },
{ question: '请选择正确的词语:"两件宝"指的是?', options: ['双手和大脑', '眼睛和耳朵', '鼻子和嘴巴', '脚和手'], answer: '双手和大脑', audio: '两件宝指的是双手和大脑' },
// 新添加题目 - 第八单元·阅读
{ question: '请选择正确的词语:"比尾巴"中,谁的尾巴长?', options: ['猴子', '兔子', '松鼠', '公鸡'], answer: '猴子', audio: '猴子的尾巴长' },
{ question: '请选择正确的词语:"乌鸦喝水"中,乌鸦用什么方法喝到水?', options: ['放石子', '用吸管', '用翅膀', '找朋友'], answer: '放石子', audio: '乌鸦用放石子的方法喝到水' },
{ question: '请选择正确的词语:"雨点儿"从哪里来?', options: ['云里', '地上', '树上', '海里'], answer: '云里', audio: '雨点儿从云里来' },
// 新添加题目 - 下册内容
{ question: '请选择正确的词语:"春夏秋冬"中,哪个是第一个季节?', options: ['春', '夏', '秋', '冬'], answer: '春', audio: '春夏秋冬,春是第一个季节' },
{ question: '请选择正确的词语:"姓氏歌"中,"赵钱孙李"的第一个姓是?', options: ['赵', '钱', '孙', '李'], answer: '赵', audio: '赵钱孙李,赵是第一个姓' },
{ question: '请选择正确的词语:"小青蛙"是益虫还是害虫?', options: ['益虫', '害虫', '既是益虫又是害虫', '既不是益虫也不是害虫'], answer: '益虫', audio: '小青蛙是益虫' },
{ question: '请选择正确的词语:"猜字谜"中,"一口咬掉牛尾巴"是什么字?', options: ['告', '牛', '口', '尾'], answer: '告', audio: '一口咬掉牛尾巴是告字' },
{ question: '请选择正确的词语:"静夜思"的作者是谁?', options: ['李白', '杜甫', '白居易', '王维'], answer: '李白', audio: '静夜思的作者是李白' },
{ question: '请选择正确的词语:"夜色"中,"我"一开始害怕什么?', options: ['黑夜', '白天', '下雨', '打雷'], answer: '黑夜', audio: '我一开始害怕黑夜' },
{ question: '请选择正确的词语:"小壁虎借尾巴"中,小壁虎向谁借尾巴?', options: ['小鱼、老牛、燕子', '小猫、小狗、小鸡', '小鸟、小兔、小熊', '青蛙、乌龟、蛇'], answer: '小鱼、老牛、燕子', audio: '小壁虎向小鱼、老牛、燕子借尾巴' }
].sort(() => Math.random() - 0.5) // 随机打乱顺序
},
english: {
// 字母迷宫任务(字母认知)
maze: [
{
question: '哪个字母是 A',
options: ['B', 'A', 'C', 'D'],
answer: 'A',
audio: 'A'
},
{
question: '哪个字母是 B',
options: ['A', 'B', 'C', 'D'],
answer: 'B',
audio: 'B'
},
{
question: '哪个字母是 C',
options: ['A', 'B', 'C', 'D'],
answer: 'C',
audio: 'C'
},
{
question: '哪个字母是 D',
options: ['A', 'B', 'C', 'D'],
answer: 'D',
audio: 'D'
},
{
question: '哪个字母是 E',
options: ['E', 'F', 'G', 'H'],
answer: 'E',
audio: 'E'
},
{
question: '哪个字母是 F',
options: ['E', 'F', 'G', 'H'],
answer: 'F',
audio: 'F'
},
{
question: '哪个字母是 G',
options: ['E', 'F', 'G', 'H'],
answer: 'G',
audio: 'G'
},
{
question: '哪个字母是 H',
options: ['E', 'F', 'G', 'H'],
answer: 'H',
audio: 'H'
},
{
question: '哪个字母是 I',
options: ['I', 'J', 'K', 'L'],
answer: 'I',
audio: 'I'
},
{
question: '哪个字母是 J',
options: ['I', 'J', 'K', 'L'],
answer: 'J',
audio: 'J'
},
{
question: '哪个字母是 K',
options: ['I', 'J', 'K', 'L'],
answer: 'K',
audio: 'K'
},
{
question: '哪个字母是 L',
options: ['I', 'J', 'K', 'L'],
answer: 'L',
audio: 'L'
},
{
question: '哪个字母是 M',
options: ['M', 'N', 'O', 'P'],
answer: 'M',
audio: 'M'
},
{
question: '哪个字母是 N',
options: ['M', 'N', 'O', 'P'],
answer: 'N',
audio: 'N'
},
{
question: '哪个字母是 O',
options: ['M', 'N', 'O', 'P'],
answer: 'O',
audio: 'O'
},
{
question: '哪个字母是 P',
options: ['M', 'N', 'O', 'P'],
answer: 'P',
audio: 'P'
},
{
question: '哪个字母是 Q',
options: ['Q', 'R', 'S', 'T'],
answer: 'Q',
audio: 'Q'
},
{
question: '哪个字母是 R',
options: ['Q', 'R', 'S', 'T'],
answer: 'R',
audio: 'R'
},
{
question: '哪个字母是 S',
options: ['Q', 'R', 'S', 'T'],
answer: 'S',
audio: 'S'
},
{
question: '哪个字母是 T',
options: ['Q', 'R', 'S', 'T'],
answer: 'T',
audio: 'T'
}
],
// 动物喂食任务(跟读单词)
animal: [
{
question: '哪个是猫的英文?',
options: ['dog', 'cat', 'bird', 'fish'],
answer: 'cat',
audio: 'cat'
},
{
question: '哪个是狗的英文?',
options: ['cat', 'dog', 'bird', 'fish'],
answer: 'dog',
audio: 'dog'
},
{
question: '哪个是鸟的英文?',
options: ['cat', 'dog', 'bird', 'fish'],
answer: 'bird',
audio: 'bird'
},
{
question: '哪个是鱼的英文?',
options: ['cat', 'dog', 'bird', 'fish'],
answer: 'fish',
audio: 'fish'
},
{
question: '哪个是老虎的英文?',
options: ['tiger', 'lion', 'elephant', 'monkey'],
answer: 'tiger',
audio: 'tiger'
},
{
question: '哪个是狮子的英文?',
options: ['tiger', 'lion', 'elephant', 'monkey'],
answer: 'lion',
audio: 'lion'
},
{
question: '哪个是大象的英文?',
options: ['tiger', 'lion', 'elephant', 'monkey'],
answer: 'elephant',
audio: 'elephant'
},
{
question: '哪个是猴子的英文?',
options: ['tiger', 'lion', 'elephant', 'monkey'],
answer: 'monkey',
audio: 'monkey'
},
{
question: '哪个是兔子的英文?',
options: ['rabbit', 'fox', 'wolf', 'bear'],
answer: 'rabbit',
audio: 'rabbit'
},
{
question: '哪个是狐狸的英文?',
options: ['rabbit', 'fox', 'wolf', 'bear'],
answer: 'fox',
audio: 'fox'
},
{
question: '哪个是狼的英文?',
options: ['rabbit', 'fox', 'wolf', 'bear'],
answer: 'wolf',
audio: 'wolf'
},
{
question: '哪个是熊的英文?',
options: ['rabbit', 'fox', 'wolf', 'bear'],
answer: 'bear',
audio: 'bear'
},
{
question: '哪个是鸭子的英文?',
options: ['duck', 'chicken', 'pig', 'cow'],
answer: 'duck',
audio: 'duck'
},
{
question: '哪个是鸡的英文?',
options: ['duck', 'chicken', 'pig', 'cow'],
answer: 'chicken',
audio: 'chicken'
},
{
question: '哪个是猪的英文?',
options: ['duck', 'chicken', 'pig', 'cow'],
answer: 'pig',
audio: 'pig'
},
{
question: '哪个是牛的英文?',
options: ['duck', 'chicken', 'pig', 'cow'],
answer: 'cow',
audio: 'cow'
},
{
question: '哪个是羊的英文?',
options: ['sheep', 'goat', 'horse', 'mouse'],
answer: 'sheep',
audio: 'sheep'
},
{
question: '哪个是山羊的英文?',
options: ['sheep', 'goat', 'horse', 'mouse'],
answer: 'goat',
audio: 'goat'
},
{
question: '哪个是马的英文?',
options: ['sheep', 'goat', 'horse', 'mouse'],
answer: 'horse',
audio: 'horse'
},
{
question: '哪个是老鼠的英文?',
options: ['sheep', 'goat', 'horse', 'mouse'],
answer: 'mouse',
audio: 'mouse'
}
],
// 情景对话任务(对话练习)
dialogue: [
{
question: 'Hello 的意思是?',
options: ['再见', '你好', '谢谢', '对不起'],
answer: '你好',
audio: 'Hello'
},
{
question: 'Goodbye 的意思是?',
options: ['你好', '再见', '谢谢', '对不起'],
answer: '再见',
audio: 'Goodbye'
},
{
question: 'Thank you 的意思是?',
options: ['你好', '再见', '谢谢', '对不起'],
answer: '谢谢',
audio: 'Thank you'
},
{
question: 'Sorry 的意思是?',
options: ['你好', '再见', '谢谢', '对不起'],
answer: '对不起',
audio: 'Sorry'
},
{
question: 'How are you? 的意思是?',
options: ['你好吗?', '再见', '谢谢', '对不起'],
answer: '你好吗?',
audio: 'How are you?'
},
// Unit 1: Pets 相关题目
{
question: 'Which pet says "woof woof"?',
options: ['cat', 'dog', 'bird', 'fish'],
answer: 'dog',
audio: 'dog'
},
{
question: 'Which pet says "meow meow"?',
options: ['cat', 'dog', 'bird', 'fish'],
answer: 'cat',
audio: 'cat'
},
{
question: 'Which pet can fly?',
options: ['cat', 'dog', 'bird', 'fish'],
answer: 'bird',
audio: 'bird'
},
{
question: 'Which pet lives in water?',
options: ['cat', 'dog', 'bird', 'fish'],
answer: 'fish',
audio: 'fish'
},
{
question: 'Which pet has long ears?',
options: ['cat', 'dog', 'rabbit', 'fish'],
answer: 'rabbit',
audio: 'rabbit'
},
// Unit 2: Animals 相关题目
{
question: 'Which animal is big and has a trunk?',
options: ['tiger', 'elephant', 'monkey', 'lion'],
answer: 'elephant',
audio: 'elephant'
},
{
question: 'Which animal is the king of the forest?',
options: ['tiger', 'elephant', 'monkey', 'lion'],
answer: 'lion',
audio: 'lion'
},
{
question: 'Which animal has stripes?',
options: ['tiger', 'elephant', 'monkey', 'lion'],
answer: 'tiger',
audio: 'tiger'
},
{
question: 'Which animal likes bananas?',
options: ['tiger', 'elephant', 'monkey', 'lion'],
answer: 'monkey',
audio: 'monkey'
},
{
question: 'Which animal can swim?',
options: ['tiger', 'fish', 'bird', 'cat'],
answer: 'fish',
audio: 'fish'
},
// Unit 3: Face 相关题目
{
question: 'Which part of the face do we use to see?',
options: ['nose', 'eyes', 'mouth', 'ears'],
answer: 'eyes',
audio: 'eyes'
},
{
question: 'Which part of the face do we use to hear?',
options: ['nose', 'eyes', 'mouth', 'ears'],
answer: 'ears',
audio: 'ears'
},
{
question: 'Which part of the face do we use to smell?',
options: ['nose', 'eyes', 'mouth', 'ears'],
answer: 'nose',
audio: 'nose'
},
{
question: 'Which part of the face do we use to eat?',
options: ['nose', 'eyes', 'mouth', 'ears'],
answer: 'mouth',
audio: 'mouth'
},
{
question: 'Which part of the face is above the mouth?',
options: ['nose', 'eyes', 'ears', 'hair'],
answer: 'nose',
audio: 'nose'
},
// Unit 4: Body 相关题目
{
question: 'Which body part do we use to walk?',
options: ['hands', 'feet', 'eyes', 'ears'],
answer: 'feet',
audio: 'feet'
},
{
question: 'Which body part do we use to write?',
options: ['hands', 'feet', 'eyes', 'ears'],
answer: 'hands',
audio: 'hands'
},
{
question: 'Which body part is in the middle of our body?',
options: ['head', 'body', 'legs', 'arms'],
answer: 'body',
audio: 'body'
},
{
question: 'Which body part is on top of our body?',
options: ['head', 'body', 'legs', 'arms'],
answer: 'head',
audio: 'head'
},
{
question: 'Which body parts do we use to hug?',
options: ['hands', 'arms', 'legs', 'feet'],
answer: 'arms',
audio: 'arms'
},
// Unit 5: My home 相关题目
{
question: 'Where do we sleep?',
options: ['kitchen', 'bedroom', 'living room', 'bathroom'],
answer: 'bedroom',
audio: 'bedroom'
},
{
question: 'Where do we cook?',
options: ['kitchen', 'bedroom', 'living room', 'bathroom'],
answer: 'kitchen',
audio: 'kitchen'
},
{
question: 'Where do we watch TV?',
options: ['kitchen', 'bedroom', 'living room', 'bathroom'],
answer: 'living room',
audio: 'living room'
},
{
question: 'Where do we take a shower?',
options: ['kitchen', 'bedroom', 'living room', 'bathroom'],
answer: 'bathroom',
audio: 'bathroom'
},
{
question: 'What do we sit on?',
options: ['table', 'chair', 'bed', 'sofa'],
answer: 'chair',
audio: 'chair'
},
// Unit 6: Time 相关题目
{
question: 'What time is it when the sun rises?',
options: ['morning', 'afternoon', 'evening', 'night'],
answer: 'morning',
audio: 'morning'
},
{
question: 'What time is it when the sun is high in the sky?',
options: ['morning', 'afternoon', 'evening', 'night'],
answer: 'afternoon',
audio: 'afternoon'
},
{
question: 'What time is it when the sun sets?',
options: ['morning', 'afternoon', 'evening', 'night'],
answer: 'evening',
audio: 'evening'
},
{
question: 'What time is it when its dark outside?',
options: ['morning', 'afternoon', 'evening', 'night'],
answer: 'night',
audio: 'night'
},
{
question: 'When do we have breakfast?',
options: ['morning', 'afternoon', 'evening', 'night'],
answer: 'morning',
audio: 'morning'
},
// 更多对话练习题目
{
question: 'Nice to meet you 的意思是?',
options: ['你好', '再见', '很高兴认识你', '谢谢'],
answer: '很高兴认识你',
audio: 'Nice to meet you'
},
{
question: 'Whats your name? 的意思是?',
options: ['你好吗?', '你叫什么名字?', '再见', '谢谢'],
answer: '你叫什么名字?',
audio: 'What\'s your name?'
},
{
question: 'Im fine, thank you 的意思是?',
options: ['我很好,谢谢', '你好', '再见', '对不起'],
answer: '我很好,谢谢',
audio: 'I\'m fine, thank you'
},
{
question: 'Good morning 的意思是?',
options: ['早上好', '下午好', '晚上好', '晚安'],
answer: '早上好',
audio: 'Good morning'
},
{
question: 'Good afternoon 的意思是?',
options: ['早上好', '下午好', '晚上好', '晚安'],
answer: '下午好',
audio: 'Good afternoon'
},
{
question: 'Good evening 的意思是?',
options: ['早上好', '下午好', '晚上好', '晚安'],
answer: '晚上好',
audio: 'Good evening'
},
{
question: 'Good night 的意思是?',
options: ['早上好', '下午好', '晚上好', '晚安'],
answer: '晚安',
audio: 'Good night'
},
{
question: 'Yes 的意思是?',
options: ['是的', '不是', '谢谢', '对不起'],
answer: '是的',
audio: 'Yes'
},
{
question: 'No 的意思是?',
options: ['是的', '不是', '谢谢', '对不起'],
answer: '不是',
audio: 'No'
},
{
question: 'Please 的意思是?',
options: ['请', '谢谢', '对不起', '再见'],
answer: '请',
audio: 'Please'
},
{
question: 'I am fine 的意思是?',
options: ['我很好', '你好', '再见', '谢谢'],
answer: '我很好',
audio: 'I am fine'
},
{
question: 'What is your name? 的意思是?',
options: ['你叫什么名字?', '你好', '再见', '谢谢'],
answer: '你叫什么名字?',
audio: 'What is your name?'
},
{
question: 'My name is... 的意思是?',
options: ['我的名字是...', '你好', '再见', '谢谢'],
answer: '我的名字是...',
audio: 'My name is...'
},
{
question: 'Nice to meet you 的意思是?',
options: ['很高兴认识你', '你好', '再见', '谢谢'],
answer: '很高兴认识你',
audio: 'Nice to meet you'
},
{
question: 'Good morning 的意思是?',
options: ['早上好', '下午好', '晚上好', '再见'],
answer: '早上好',
audio: 'Good morning'
},
{
question: 'Good afternoon 的意思是?',
options: ['早上好', '下午好', '晚上好', '再见'],
answer: '下午好',
audio: 'Good afternoon'
},
{
question: 'Good evening 的意思是?',
options: ['早上好', '下午好', '晚上好', '再见'],
answer: '晚上好',
audio: 'Good evening'
},
{
question: 'Yes 的意思是?',
options: ['是的', '不是', '谢谢', '再见'],
answer: '是的',
audio: 'Yes'
},
{
question: 'No 的意思是?',
options: ['是的', '不是', '谢谢', '再见'],
answer: '不是',
audio: 'No'
},
{
question: 'Please 的意思是?',
options: ['请', '谢谢', '再见', '你好'],
answer: '请',
audio: 'Please'
},
{
question: 'Welcome 的意思是?',
options: ['欢迎', '谢谢', '再见', '你好'],
answer: '欢迎',
audio: 'Welcome'
},
{
question: 'Happy birthday 的意思是?',
options: ['生日快乐', '谢谢', '再见', '你好'],
answer: '生日快乐',
audio: 'Happy birthday'
},
{
question: 'See you later 的意思是?',
options: ['再见', '你好', '谢谢', '对不起'],
answer: '再见',
audio: 'See you later'
},
{
question: 'How old are you? 的意思是?',
options: ['你几岁了?', '你好', '再见', '谢谢'],
answer: '你几岁了?',
audio: 'How old are you?'
},
{
question: 'I am six years old 的意思是?',
options: ['我六岁了', '你好', '再见', '谢谢'],
answer: '我六岁了',
audio: 'I am six years old'
}
]
},
science: {
// 植物生长(生物)
plants: [
{
question: '植物生长需要什么?',
items: [
{ icon: '💧', name: '水', result: '植物吸收了水分,开始生长' },
{ icon: '☀️', name: '阳光', result: '植物进行光合作用,变得更绿了' },
{ icon: '🌱', name: '种子', result: '种子开始发芽了' }
],
answer: '需要水、阳光和种子'
},
{
question: '植物的组成部分有哪些?',
items: [
{ icon: '🌱', name: '根', result: '根吸收水分和养分' },
{ icon: '🌿', name: '茎', result: '茎运输水分和养分' },
{ icon: '🍃', name: '叶', result: '叶进行光合作用' }
],
answer: '植物的组成部分包括根、茎、叶、花和果实'
},
{
question: '什么是光合作用?',
items: [
{ icon: '☀️', name: '阳光', result: '阳光是光合作用的能量来源' },
{ icon: '🍃', name: '叶子', result: '叶子是光合作用的场所' },
{ icon: '💧', name: '水', result: '水是光合作用的原料' }
],
answer: '光合作用是植物利用阳光、水和二氧化碳制造养分的过程'
},
{
question: '种子是如何发芽的?',
items: [
{ icon: '💧', name: '水', result: '水使种子膨胀' },
{ icon: '🌱', name: '种子', result: '种子开始发芽' },
{ icon: '☀️', name: '阳光', result: '阳光帮助幼苗生长' }
],
answer: '种子在适宜的温度、水分和氧气条件下发芽'
},
{
question: '为什么植物需要阳光?',
items: [
{ icon: '☀️', name: '阳光', result: '阳光提供能量' },
{ icon: '🍃', name: '叶子', result: '叶子利用阳光进行光合作用' },
{ icon: '🌱', name: '植物', result: '植物需要养分生长' }
],
answer: '植物需要阳光进行光合作用,制造生长所需的养分'
},
{
question: '植物的根有什么作用?',
items: [
{ icon: '🌱', name: '根', result: '根吸收水分和养分' },
{ icon: '💧', name: '水', result: '水是植物生长的必需品' },
{ icon: '🌿', name: '茎', result: '茎将养分运输到植物各部分' }
],
answer: '植物的根可以吸收水分和养分,固定植物'
},
{
question: '植物的茎有什么作用?',
items: [
{ icon: '🌿', name: '茎', result: '茎运输水分和养分' },
{ icon: '🌱', name: '根', result: '根吸收水分和养分' },
{ icon: '🍃', name: '叶', result: '叶进行光合作用' }
],
answer: '植物的茎可以运输水分和养分,支撑植物'
},
{
question: '植物的叶子有什么作用?',
items: [
{ icon: '🍃', name: '叶', result: '叶进行光合作用' },
{ icon: '☀️', name: '阳光', result: '阳光是光合作用的能量来源' },
{ icon: '💧', name: '水', result: '水是光合作用的原料' }
],
answer: '植物的叶子可以进行光合作用,制造养分'
},
{
question: '花朵有什么作用?',
items: [
{ icon: '🌸', name: '花', result: '花可以吸引昆虫传粉' },
{ icon: '🐝', name: '蜜蜂', result: '蜜蜂帮助花朵传粉' },
{ icon: '🌱', name: '种子', result: '花授粉后会结出种子' }
],
answer: '花朵可以吸引昆虫传粉,帮助植物繁殖'
},
{
question: '果实有什么作用?',
items: [
{ icon: '🍎', name: '果实', result: '果实保护种子' },
{ icon: '🌱', name: '种子', result: '种子是植物的繁殖器官' },
{ icon: '🐦', name: '鸟', result: '动物吃果实帮助传播种子' }
],
answer: '果实可以保护种子,帮助种子传播'
}
],
// 浮力实验(物理)
buoyancy: [
{
question: '什么物体会浮在水面上?',
items: [
{ icon: '🪵', name: '木块', result: '木块浮在水面上' },
{ icon: '🪨', name: '石头', result: '石头沉到了水底' },
{ icon: '📦', name: '塑料盒', result: '塑料盒浮在水面上' }
],
answer: '木块和塑料盒会浮在水面上'
},
{
question: '为什么有些物体会浮在水面上?',
items: [
{ icon: '🌊', name: '水', result: '水有浮力' },
{ icon: '🪵', name: '木块', result: '木块的密度比水小' },
{ icon: '🪨', name: '石头', result: '石头的密度比水大' }
],
answer: '密度比水小的物体会浮在水面上'
},
{
question: '如何让沉下去的物体浮起来?',
items: [
{ icon: '🪨', name: '石头', result: '石头会沉下去' },
{ icon: '🎈', name: '气球', result: '气球可以提供浮力' },
{ icon: '📦', name: '塑料盒', result: '塑料盒可以增加浮力' }
],
answer: '可以通过增加浮力或减少物体的有效密度让物体浮起来'
},
{
question: '船为什么能浮在水面上?',
items: [
{ icon: '🚢', name: '船', result: '船的形状特殊' },
{ icon: '🌊', name: '水', result: '水的浮力支撑船' },
{ icon: '⚓', name: '锚', result: '锚可以让船固定' }
],
answer: '船的形状设计使它排开的水量产生足够的浮力支撑自身重量'
},
{
question: '潜水艇如何控制上浮和下沉?',
items: [
{ icon: '🚤', name: '潜水艇', result: '潜水艇有特殊的设计' },
{ icon: '💧', name: '水', result: '潜水艇可以吸水和排水' },
{ icon: '⚓', name: '锚', result: '锚可以帮助潜水艇固定' }
],
answer: '潜水艇通过调整内部水舱的水量来控制自身密度,从而实现上浮和下沉'
},
{
question: '浮力的方向是怎样的?',
items: [
{ icon: '⬆️', name: '向上', result: '浮力的方向是向上的' },
{ icon: '⬇️', name: '向下', result: '重力的方向是向下的' },
{ icon: '🌊', name: '水', result: '水产生浮力' }
],
answer: '浮力的方向是向上的'
},
{
question: '浮力的大小与什么有关?',
items: [
{ icon: '🌊', name: '水', result: '水的密度影响浮力' },
{ icon: '📦', name: '物体', result: '物体排开的水量影响浮力' },
{ icon: '⚖️', name: '重量', result: '物体的重量影响沉浮' }
],
answer: '浮力的大小与物体排开的水量和液体的密度有关'
},
{
question: '为什么铁块会沉在水中?',
items: [
{ icon: '🔧', name: '铁块', result: '铁块的密度比水大' },
{ icon: '🌊', name: '水', result: '水的密度比铁块小' },
{ icon: '⚖️', name: '重量', result: '铁块的重量大于浮力' }
],
answer: '因为铁块的密度比水大,所以会沉在水中'
},
{
question: '为什么泡沫会浮在水中?',
items: [
{ icon: '🧽', name: '泡沫', result: '泡沫的密度比水小' },
{ icon: '🌊', name: '水', result: '水的密度比泡沫大' },
{ icon: '⬆️', name: '浮力', result: '浮力大于泡沫的重量' }
],
answer: '因为泡沫的密度比水小,所以会浮在水中'
},
{
question: '盐水的浮力比淡水大吗?',
items: [
{ icon: '🧂', name: '盐', result: '盐增加了水的密度' },
{ icon: '🌊', name: '水', result: '水的密度影响浮力' },
{ icon: '⬆️', name: '浮力', result: '密度越大,浮力越大' }
],
answer: '是的,盐水的密度比淡水大,所以浮力更大'
}
],
// 颜色混合(化学)
colors: [
{
question: '红色和蓝色混合会变成什么颜色?',
items: [
{ icon: '🔴', name: '红色', result: '加入了红色' },
{ icon: '🔵', name: '蓝色', result: '加入了蓝色' },
{ icon: '🟣', name: '紫色', result: '红色和蓝色混合变成了紫色' }
],
answer: '红色和蓝色混合会变成紫色'
},
{
question: '红色和黄色混合会变成什么颜色?',
items: [
{ icon: '🔴', name: '红色', result: '加入了红色' },
{ icon: '🟡', name: '黄色', result: '加入了黄色' },
{ icon: '🟠', name: '橙色', result: '红色和黄色混合变成了橙色' }
],
answer: '红色和黄色混合会变成橙色'
},
{
question: '蓝色和黄色混合会变成什么颜色?',
items: [
{ icon: '🔵', name: '蓝色', result: '加入了蓝色' },
{ icon: '🟡', name: '黄色', result: '加入了黄色' },
{ icon: '🟢', name: '绿色', result: '蓝色和黄色混合变成了绿色' }
],
answer: '蓝色和黄色混合会变成绿色'
},
{
question: '什么是三原色?',
items: [
{ icon: '🔴', name: '红色', result: '红色是三原色之一' },
{ icon: '🔵', name: '蓝色', result: '蓝色是三原色之一' },
{ icon: '🟡', name: '黄色', result: '黄色是三原色之一' }
],
answer: '三原色是红色、蓝色和黄色,它们可以混合出其他所有颜色'
},
{
question: '如何混合出棕色?',
items: [
{ icon: '🔴', name: '红色', result: '加入了红色' },
{ icon: '🟡', name: '黄色', result: '加入了黄色' },
{ icon: '🔵', name: '蓝色', result: '加入了蓝色' }
],
answer: '混合红色、黄色和蓝色可以得到棕色'
},
{
question: '红色和绿色混合会变成什么颜色?',
items: [
{ icon: '🔴', name: '红色', result: '加入了红色' },
{ icon: '🟢', name: '绿色', result: '加入了绿色' },
{ icon: '🟤', name: '棕色', result: '红色和绿色混合变成了棕色' }
],
answer: '红色和绿色混合会变成棕色'
},
{
question: '蓝色和绿色混合会变成什么颜色?',
items: [
{ icon: '🔵', name: '蓝色', result: '加入了蓝色' },
{ icon: '🟢', name: '绿色', result: '加入了绿色' },
{ icon: '🟦', name: '蓝绿色', result: '蓝色和绿色混合变成了蓝绿色' }
],
answer: '蓝色和绿色混合会变成蓝绿色'
},
{
question: '黄色和绿色混合会变成什么颜色?',
items: [
{ icon: '🟡', name: '黄色', result: '加入了黄色' },
{ icon: '🟢', name: '绿色', result: '加入了绿色' },
{ icon: '💚', name: '黄绿色', result: '黄色和绿色混合变成了黄绿色' }
],
answer: '黄色和绿色混合会变成黄绿色'
},
{
question: '什么是二次色?',
items: [
{ icon: '🟣', name: '紫色', result: '红色和蓝色混合而成' },
{ icon: '🟠', name: '橙色', result: '红色和黄色混合而成' },
{ icon: '🟢', name: '绿色', result: '蓝色和黄色混合而成' }
],
answer: '二次色是由两种原色混合而成的颜色,包括紫色、橙色和绿色'
},
{
question: '如何混合出粉色?',
items: [
{ icon: '🔴', name: '红色', result: '加入了红色' },
{ icon: '⚪', name: '白色', result: '加入了白色' },
{ icon: '🌸', name: '粉色', result: '红色和白色混合变成了粉色' }
],
answer: '红色和白色混合可以得到粉色'
}
],
// 化学实验(化学反应、蒸汽气化等)
chemistry: [
{
question: '水加热后会变成什么?',
items: [
{ icon: '💧', name: '水', result: '水被加热' },
{ icon: '🔥', name: '热量', result: '热量使水温度升高' },
{ icon: '☁️', name: '水蒸气', result: '水变成了水蒸气' }
],
answer: '水加热后会变成水蒸气'
},
{
question: '小苏打和醋混合会发生什么?',
items: [
{ icon: '🧂', name: '小苏打', result: '加入了小苏打' },
{ icon: '🍶', name: '醋', result: '加入了醋' },
{ icon: '💨', name: '气泡', result: '产生了大量气泡' }
],
answer: '小苏打和醋混合会产生二氧化碳气泡'
},
{
question: '蜡烛燃烧需要什么?',
items: [
{ icon: '🕯️', name: '蜡烛', result: '蜡烛是燃烧的燃料' },
{ icon: '🔥', name: '火', result: '火提供初始热量' },
{ icon: '💨', name: '氧气', result: '氧气支持燃烧' }
],
answer: '蜡烛燃烧需要燃料、热量和氧气'
},
{
question: '铁为什么会生锈?',
items: [
{ icon: '🔧', name: '铁', result: '铁是生锈的物质' },
{ icon: '💧', name: '水', result: '水是生锈的条件之一' },
{ icon: '💨', name: '氧气', result: '氧气是生锈的条件之一' }
],
answer: '铁生锈是因为铁与水和氧气发生了化学反应'
},
{
question: '什么是蒸发?',
items: [
{ icon: '💧', name: '水', result: '水是蒸发的物质' },
{ icon: '☀️', name: '阳光', result: '阳光提供蒸发所需的能量' },
{ icon: '☁️', name: '水蒸气', result: '水变成了水蒸气' }
],
answer: '蒸发是液体变成气体的过程'
},
{
question: '什么是凝结?',
items: [
{ icon: '☁️', name: '水蒸气', result: '水蒸气是凝结的物质' },
{ icon: '❄️', name: '冷空气', result: '冷空气使水蒸气冷却' },
{ icon: '💧', name: '水滴', result: '水蒸气变成了水滴' }
],
answer: '凝结是气体变成液体的过程'
},
{
question: '如何使水结冰?',
items: [
{ icon: '💧', name: '水', result: '水是结冰的物质' },
{ icon: '❄️', name: '低温', result: '低温使水结冰' },
{ icon: '🧊', name: '冰', result: '水变成了冰' }
],
answer: '将水放在低温环境中可以使水结冰'
},
{
question: '如何使冰融化?',
items: [
{ icon: '🧊', name: '冰', result: '冰是融化的物质' },
{ icon: '🔥', name: '热量', result: '热量使冰融化' },
{ icon: '💧', name: '水', result: '冰变成了水' }
],
answer: '给冰加热可以使冰融化'
},
{
question: '二氧化碳有什么特性?',
items: [
{ icon: '💨', name: '二氧化碳', result: '二氧化碳是一种气体' },
{ icon: '💧', name: '水', result: '二氧化碳能溶于水' },
{ icon: '🔥', name: '火', result: '二氧化碳能灭火' }
],
answer: '二氧化碳是一种无色无味的气体,能溶于水,不能燃烧也不支持燃烧'
},
{
question: '什么是化学反应?',
items: [
{ icon: '🧪', name: '反应物', result: '参与反应的物质' },
{ icon: '⚗️', name: '反应过程', result: '物质发生变化' },
{ icon: '🏆', name: '生成物', result: '反应产生的新物质' }
],
answer: '化学反应是物质发生变化,产生新物质的过程'
}
],
// 物理实验(电池、电路等)
physics: [
{
question: '电池如何工作?',
items: [
{ icon: '🔋', name: '电池', result: '电池提供电能' },
{ icon: '⚡', name: '电流', result: '电池产生电流' },
{ icon: '💡', name: '灯泡', result: '电流使灯泡发光' }
],
answer: '电池通过化学反应产生电能,提供电流'
},
{
question: '如何制作简单电路?',
items: [
{ icon: '🔋', name: '电池', result: '电池是电路的电源' },
{ icon: '💡', name: '灯泡', result: '灯泡是电路的用电器' },
{ icon: '🔌', name: '导线', result: '导线连接电路元件' }
],
answer: '用导线将电池和灯泡连接起来,形成闭合电路'
},
{
question: '电池为什么能推动风车?',
items: [
{ icon: '🔋', name: '电池', result: '电池提供电能' },
{ icon: '⚡', name: '电流', result: '电流通过电机' },
{ icon: '风车', name: '风车', result: '电机带动风车转动' }
],
answer: '电池提供电能,通过电机将电能转化为机械能,推动风车转动'
},
{
question: '什么是磁铁?',
items: [
{ icon: '🧲', name: '磁铁', result: '磁铁具有磁性' },
{ icon: '🔑', name: '铁制品', result: '磁铁能吸引铁制品' },
{ icon: '🧭', name: '指南针', result: '磁铁能指示方向' }
],
answer: '磁铁是能吸引铁、钴、镍等金属的物体'
},
{
question: '什么是静电?',
items: [
{ icon: '🧶', name: '毛衣', result: '毛衣摩擦产生静电' },
{ icon: '📄', name: '纸', result: '静电能吸引轻小物体' },
{ icon: '⚡', name: '静电火花', result: '静电放电产生火花' }
],
answer: '静电是物体表面积累的电荷'
},
{
question: '声音是如何传播的?',
items: [
{ icon: '🔊', name: '声音', result: '声音是一种波' },
{ icon: '💨', name: '空气', result: '声音通过空气传播' },
{ icon: '👂', name: '耳朵', result: '耳朵接收声音' }
],
answer: '声音通过介质(如空气、水、固体)传播'
},
{
question: '什么是光的反射?',
items: [
{ icon: '☀️', name: '光', result: '光照射到物体表面' },
{ icon: '🪞', name: '镜子', result: '镜子反射光线' },
{ icon: '👁️', name: '眼睛', result: '眼睛看到反射的光' }
],
answer: '光的反射是光线遇到物体表面后改变传播方向的现象'
},
{
question: '什么是光的折射?',
items: [
{ icon: '☀️', name: '光', result: '光从一种介质进入另一种介质' },
{ icon: '💧', name: '水', result: '光在水中传播方向改变' },
{ icon: '🔍', name: '放大镜', result: '放大镜利用折射原理' }
],
answer: '光的折射是光线从一种介质进入另一种介质时传播方向改变的现象'
},
{
question: '什么是重力?',
items: [
{ icon: '🌍', name: '地球', result: '地球产生重力' },
{ icon: '🔄', name: '苹果', result: '苹果受到重力下落' },
{ icon: '⬇️', name: '方向', result: '重力方向向下' }
],
answer: '重力是地球对物体的吸引力'
},
{
question: '什么是摩擦力?',
items: [
{ icon: '👟', name: '鞋子', result: '鞋子与地面接触' },
{ icon: '🔄', name: '运动', result: '运动产生摩擦力' },
{ icon: '🛑', name: '停止', result: '摩擦力使物体停止' }
],
answer: '摩擦力是两个物体接触表面之间相互阻碍运动的力'
}
],
// 科学小实验
experiments: [
{
question: '如何制作彩虹?',
items: [
{ icon: '☀️', name: '阳光', result: '阳光是制作彩虹的光源' },
{ icon: '💧', name: '水', result: '水使阳光折射' },
{ icon: '🌈', name: '彩虹', result: '阳光通过水形成彩虹' }
],
answer: '让阳光通过水滴或三棱镜可以制作彩虹'
},
{
question: '如何让鸡蛋浮起来?',
items: [
{ icon: '🥚', name: '鸡蛋', result: '鸡蛋是实验对象' },
{ icon: '💧', name: '水', result: '水提供浮力' },
{ icon: '🧂', name: '盐', result: '盐增加水的密度' }
],
answer: '在水中加入足够的盐,使水的密度大于鸡蛋的密度,鸡蛋就会浮起来'
},
{
question: '如何制作火山喷发模型?',
items: [
{ icon: '🌋', name: '火山模型', result: '用泥土或橡皮泥制作火山形状' },
{ icon: '🧂', name: '小苏打', result: '小苏打是反应物' },
{ icon: '🍶', name: '醋', result: '醋与小苏打反应产生气泡' }
],
answer: '在火山模型中加入小苏打和醋,它们反应产生的二氧化碳会模拟火山喷发'
},
{
question: '如何制作简易指南针?',
items: [
{ icon: '🧲', name: '磁铁', result: '磁铁磁化指针' },
{ icon: '🧷', name: '针', result: '针被磁化后变成指南针' },
{ icon: '💧', name: '水', result: '水使指南针自由转动' }
],
answer: '用磁铁摩擦针使其磁化,然后将针放在水面上,它会指向南北方向'
},
{
question: '如何制作气球动力小车?',
items: [
{ icon: '🎈', name: '气球', result: '气球储存空气' },
{ icon: '🚗', name: '小车', result: '气球带动小车前进' },
{ icon: '💨', name: '空气', result: '空气从气球中喷出产生推力' }
],
answer: '将气球吹满气,然后松开,气球喷出的空气会推动小车前进'
},
{
question: '如何观察植物的蒸腾作用?',
items: [
{ icon: '🌱', name: '植物', result: '植物进行蒸腾作用' },
{ icon: '📦', name: '塑料袋', result: '塑料袋收集水蒸气' },
{ icon: '💧', name: '水滴', result: '水蒸气在塑料袋上凝结成水滴' }
],
answer: '用塑料袋套住植物的枝叶,一段时间后塑料袋内壁会出现水滴,这就是植物的蒸腾作用'
},
{
question: '如何制作简易净水器?',
items: [
{ icon: '💧', name: '脏水', result: '需要净化的水' },
{ icon: '🌿', name: '活性炭', result: '活性炭吸附杂质' },
{ icon: '🧻', name: '滤纸', result: '滤纸过滤固体杂质' }
],
answer: '将脏水通过活性炭和滤纸,可以去除水中的杂质'
},
{
question: '如何观察种子的发芽过程?',
items: [
{ icon: '🌱', name: '种子', result: '种子是发芽的主体' },
{ icon: '💧', name: '水', result: '水是发芽的必要条件' },
{ icon: '☀️', name: '阳光', result: '阳光帮助种子发芽' }
],
answer: '将种子放在湿润的纸巾上,放在温暖的地方,每天观察种子的变化'
},
{
question: '如何制作简易气压计?',
items: [
{ icon: '🍶', name: '瓶子', result: '瓶子作为容器' },
{ icon: '📄', name: '气球', result: '气球膜感应气压变化' },
{ icon: '📏', name: '吸管', result: '吸管指示气压变化' }
],
answer: '在瓶子口套上气球膜,在膜上粘一根吸管,当气压变化时,吸管会上下移动'
},
{
question: '如何观察声音的振动?',
items: [
{ icon: '🔊', name: '声音', result: '声音产生振动' },
{ icon: '🎸', name: '吉他弦', result: '弦的振动产生声音' },
{ icon: '💡', name: '盐粒', result: '盐粒随振动跳动' }
],
answer: '在鼓面或吉他弦上撒一些盐粒,当发出声音时,盐粒会随振动跳动'
}
]
},
japanese: {
// 50音图平假名
hiragana: [
{ question: 'あ的发音是?', options: ['a', 'i', 'u', 'e'], answer: 'a', audio: 'あ' },
{ question: 'い的发音是?', options: ['a', 'i', 'u', 'e'], answer: 'i', audio: 'い' },
{ question: 'う的发音是?', options: ['a', 'i', 'u', 'e'], answer: 'u', audio: 'う' },
{ question: 'え的发音是?', options: ['a', 'i', 'u', 'e'], answer: 'e', audio: 'え' },
{ question: 'お的发音是?', options: ['a', 'i', 'u', 'o'], answer: 'o', audio: 'お' },
{ question: 'か的发音是?', options: ['ka', 'ki', 'ku', 'ke'], answer: 'ka', audio: 'か' },
{ question: 'き的发音是?', options: ['ka', 'ki', 'ku', 'ke'], answer: 'ki', audio: 'き' },
{ question: 'く的发音是?', options: ['ka', 'ki', 'ku', 'ke'], answer: 'ku', audio: 'く' },
{ question: 'け的发音是?', options: ['ka', 'ki', 'ku', 'ke'], answer: 'ke', audio: 'け' },
{ question: 'こ的发音是?', options: ['ka', 'ki', 'ku', 'ko'], answer: 'ko', audio: 'こ' }
],
// 小动物
animals: [
{ question: '猫的日语是?', options: ['いぬ', 'ねこ', 'うさぎ', 'たぬき'], answer: 'ねこ', audio: 'ねこ' },
{ question: '狗的日语是?', options: ['いぬ', 'ねこ', 'うさぎ', 'たぬき'], answer: 'いぬ', audio: 'いぬ' },
{ question: '兔子的日语是?', options: ['いぬ', 'ねこ', 'うさぎ', 'たぬき'], answer: 'うさぎ', audio: 'うさぎ' },
{ question: '狐狸的日语是?', options: ['いぬ', 'ねこ', 'うさぎ', 'たぬき'], answer: 'たぬき', audio: 'たぬき' },
{ question: '鸟的日语是?', options: ['とり', 'いぬ', 'ねこ', 'うさぎ'], answer: 'とり', audio: 'とり' },
{ question: '鱼的日语是?', options: ['さかな', 'とり', 'いぬ', 'ねこ'], answer: 'さかな', audio: 'さかな' },
{ question: '青蛙的日语是?', options: ['かえる', 'さかな', 'とり', 'いぬ'], answer: 'かえる', audio: 'かえる' }
],
// 水果
fruits: [
{ question: '苹果的日语是?', options: ['りんご', 'みかん', 'ぶどう', 'いちご'], answer: 'りんご', audio: 'りんご' },
{ question: '橘子的日语是?', options: ['りんご', 'みかん', 'ぶどう', 'いちご'], answer: 'みかん', audio: 'みかん' },
{ question: '葡萄的日语是?', options: ['りんご', 'みかん', 'ぶどう', 'いちご'], answer: 'ぶどう', audio: 'ぶどう' },
{ question: '草莓的日语是?', options: ['りんご', 'みかん', 'ぶどう', 'いちご'], answer: 'いちご', audio: 'いちご' },
{ question: '香蕉的日语是?', options: ['バナナ', 'りんご', 'みかん', 'ぶどう'], answer: 'バナナ', audio: 'バナナ' },
{ question: '西瓜的日语是?', options: ['すいか', 'バナナ', 'りんご', 'みかん'], answer: 'すいか', audio: 'すいか' }
],
// 身体部位
body: [
{ question: '头的日语是?', options: ['あたま', 'からだ', 'て', 'あし'], answer: 'あたま', audio: 'あたま' },
{ question: '身体的日语是?', options: ['あたま', 'からだ', 'て', 'あし'], answer: 'からだ', audio: 'からだ' },
{ question: '手的日语是?', options: ['あたま', 'からだ', 'て', 'あし'], answer: 'て', audio: 'て' },
{ question: '脚的日语是?', options: ['あたま', 'からだ', 'て', 'あし'], answer: 'あし', audio: 'あし' },
{ question: '眼睛的日语是?', options: ['め', 'はな', 'くち', 'みみ'], answer: 'め', audio: 'め' },
{ question: '鼻子的日语是?', options: ['め', 'はな', 'くち', 'みみ'], answer: 'はな', audio: 'はな' },
{ question: '嘴巴的日语是?', options: ['め', 'はな', 'くち', 'みみ'], answer: 'くち', audio: 'くち' },
{ question: '耳朵的日语是?', options: ['め', 'はな', 'くち', 'みみ'], answer: 'みみ', audio: 'みみ' }
],
// 前后左右
directions: [
{ question: '前的日语是?', options: ['まえ', 'うしろ', 'みぎ', 'ひだり'], answer: 'まえ', audio: 'まえ' },
{ question: '后的日语是?', options: ['まえ', 'うしろ', 'みぎ', 'ひだり'], answer: 'うしろ', audio: 'うしろ' },
{ question: '右的日语是?', options: ['まえ', 'うしろ', 'みぎ', 'ひだり'], answer: 'みぎ', audio: 'みぎ' },
{ question: '左的日语是?', options: ['まえ', 'うしろ', 'みぎ', 'ひだり'], answer: 'ひだり', audio: 'ひだり' }
],
// 生活上常用的物品
items: [
{ question: '家的日语是?', options: ['いえ', 'へや', 'たな', 'ふすま'], answer: 'いえ', audio: 'いえ' },
{ question: '房间的日语是?', options: ['いえ', 'へや', 'たな', 'ふすま'], answer: 'へや', audio: 'へや' },
{ question: '桌子的日语是?', options: ['つくえ', 'いす', 'ねこ', 'いぬ'], answer: 'つくえ', audio: 'つくえ' },
{ question: '椅子的日语是?', options: ['つくえ', 'いす', 'ねこ', 'いぬ'], answer: 'いす', audio: 'いす' },
{ question: '书的日语是?', options: ['ほん', 'えんぴつ', 'ペン', 'かぎ'], answer: 'ほん', audio: 'ほん' },
{ question: '铅笔的日语是?', options: ['ほん', 'えんぴつ', 'ペン', 'かぎ'], answer: 'えんぴつ', audio: 'えんぴつ' },
{ question: '钢笔的日语是?', options: ['ほん', 'えんぴつ', 'ペン', 'かぎ'], answer: 'ペン', audio: 'ペン' },
{ question: '钥匙的日语是?', options: ['ほん', 'えんぴつ', 'ペン', 'かぎ'], answer: 'かぎ', audio: 'かぎ' },
{ question: '杯子的日语是?', options: ['コップ', 'ごはん', 'みず', 'おちゃ'], answer: 'コップ', audio: 'コップ' },
{ question: '米饭的日语是?', options: ['コップ', 'ごはん', 'みず', 'おちゃ'], answer: 'ごはん', audio: 'ごはん' },
{ question: '水的日语是?', options: ['コップ', 'ごはん', 'みず', 'おちゃ'], answer: 'みず', audio: 'みず' },
{ question: '茶的日语是?', options: ['コップ', 'ごはん', 'みず', 'おちゃ'], answer: 'おちゃ', audio: 'おちゃ' }
],
// 问候语言
greetings: [
{ question: '你好的日语是?', options: ['こんにちは', 'さようなら', 'ありがとう', 'ごめんなさい'], answer: 'こんにちは', audio: 'こんにちは' },
{ question: '再见的日语是?', options: ['こんにちは', 'さようなら', 'ありがとう', 'ごめんなさい'], answer: 'さようなら', audio: 'さようなら' },
{ question: '谢谢的日语是?', options: ['こんにちは', 'さようなら', 'ありがとう', 'ごめんなさい'], answer: 'ありがとう', audio: 'ありがとう' },
{ question: '对不起的日语是?', options: ['こんにちは', 'さようなら', 'ありがとう', 'ごめんなさい'], answer: 'ごめんなさい', audio: 'ごめんなさい' },
{ question: '早上好的日语是?', options: ['おはよう', 'こんにちは', 'こんばんは', 'おやすみ'], answer: 'おはよう', audio: 'おはよう' },
{ question: '晚上好的日语是?', options: ['おはよう', 'こんにちは', 'こんばんは', 'おやすみ'], answer: 'こんばんは', audio: 'こんばんは' },
{ question: '晚安的日语是?', options: ['おはよう', 'こんにちは', 'こんばんは', 'おやすみ'], answer: 'おやすみ', audio: 'おやすみ' }
]
}
};
// 播放音频 - 库洛米声音风格
const playAudio = (text: string) => {
try {
// 使用Web Speech API进行文本转语音
const speech = new SpeechSynthesisUtterance(text);
// 设置语言
if (/[\u3040-\u309F]/.test(text)) { // 平假名
speech.lang = 'ja-JP';
} else if (text.length === 1 || /[\u4e00-\u9fa5]/.test(text)) {
speech.lang = 'zh-CN';
} else {
speech.lang = 'en-US';
}
// 设置音量、语速和语调 - 库洛米风格(可爱、活泼、略带淘气)
speech.volume = 1; // 音量
speech.rate = 1.0; // 语速适中,更清晰
speech.pitch = 1.5; // 高语调,更可爱
// 尝试选择更适合儿童的语音
const voices = window.speechSynthesis.getVoices();
if (voices.length > 0) {
// 优先选择女性或儿童语音
let selectedVoice = null;
if (speech.lang === 'zh-CN') {
// 寻找中文语音
selectedVoice = voices.find(voice =>
voice.lang === 'zh-CN' &&
(voice.name.includes('女') || voice.name.includes('child') || voice.name.includes('Child') || voice.name.includes('少女') || voice.name.includes('Microsoft Yaoyao') || voice.name.includes('Microsoft Huihui'))
) || voices.find(voice => voice.lang === 'zh-CN');
} else if (speech.lang === 'ja-JP') {
// 寻找日语语音
selectedVoice = voices.find(voice =>
voice.lang === 'ja-JP' &&
(voice.name.includes('Female') || voice.name.includes('child') || voice.name.includes('Child') || voice.name.includes('Microsoft Haruka') || voice.name.includes('Google Japanese'))
) || voices.find(voice => voice.lang === 'ja-JP');
} else {
// 寻找英文语音
selectedVoice = voices.find(voice =>
voice.lang === 'en-US' &&
(voice.name.includes('Female') || voice.name.includes('child') || voice.name.includes('Child') || voice.name.includes('Microsoft Zira') || voice.name.includes('Google US English') || voice.name.includes('Samantha'))
) || voices.find(voice => voice.lang === 'en-US');
}
if (selectedVoice) {
speech.voice = selectedVoice;
}
}
// 播放
window.speechSynthesis.speak(speech);
} catch (error) {
console.error('音频播放失败:', error);
}
};
// 选择学科
const selectSubject = (subject: string) => {
console.log('=== 选择学科开始 ===');
console.log('参数 subject:', subject);
console.log('currentSubject.value 修改前:', currentSubject.value);
currentSubject.value = subject;
currentGame.value = null;
console.log('currentSubject.value 修改后:', currentSubject.value);
console.log('currentGame.value:', currentGame.value);
console.log('=== 选择学科结束 ===');
};
// 开始游戏
const startGame = (subject: string, taskIndex: number) => {
try {
console.log('开始游戏函数被调用:', subject, taskIndex);
console.log('类型检查 - subject:', typeof subject, 'taskIndex:', typeof taskIndex);
// 检查是否达到每日上限
if (isDailyLimitReached(subject)) {
const subjectName = subject === 'math' ? '数学' : subject === 'chinese' ? '语文' : subject === 'english' ? '英语' : subject === 'japanese' ? '日语' : subject === 'geography' ? '地理' : '科学';
const limit = dailyLimits[subject] || 25;
alert(`今日${subjectName}题目已达上限(${limit}题),明天再来挑战吧!`);
return;
}
// 根据学科和任务索引选择不同的题目集
let taskType = '';
let gameDataSubject: any = null;
let startIndex = 0;
switch (subject) {
case 'math':
const mathTasks = ['counting', 'shapes', 'calculation'];
taskType = mathTasks[taskIndex] || 'counting';
gameDataSubject = gameData.math[taskType];
startIndex = progress.value.math[taskType] || 0;
break;
case 'chinese':
const chineseTasks = ['radicals', 'pinyin', 'words'];
taskType = chineseTasks[taskIndex] || 'radicals';
gameDataSubject = gameData.chinese[taskType];
startIndex = progress.value.chinese[taskType] || 0;
break;
case 'english':
const englishTasks = ['maze', 'animal', 'dialogue'];
taskType = englishTasks[taskIndex] || 'maze';
gameDataSubject = gameData.english[taskType];
startIndex = progress.value.english[taskType] || 0;
break;
case 'science':
const scienceTasks = ['plants', 'buoyancy', 'colors', 'chemistry', 'physics', 'experiments'];
taskType = scienceTasks[taskIndex] || 'plants';
gameDataSubject = gameData.science[taskType];
startIndex = progress.value.science[taskType] || 0;
break;
case 'japanese':
const japaneseTasks = ['hiragana', 'animals', 'fruits', 'body', 'directions', 'items', 'greetings'];
taskType = japaneseTasks[taskIndex] || 'hiragana';
gameDataSubject = gameData.japanese[taskType];
startIndex = progress.value.japanese[taskType] || 0;
break;
case 'geography':
const geographyTasks = ['map', 'basics', 'northSouth'];
taskType = geographyTasks[taskIndex] || 'map';
gameDataSubject = gameData.geography[taskType];
startIndex = progress.value.geography[taskType] || 0;
break;
default:
gameDataSubject = gameData[subject];
startIndex = 0;
}
console.log('选择的任务类型:', taskType);
console.log('游戏数据:', gameDataSubject);
console.log('开始索引:', startIndex);
console.log('gameDataSubject类型:', typeof gameDataSubject);
console.log('gameDataSubject是否为数组:', Array.isArray(gameDataSubject));
console.log('gameDataSubject长度:', gameDataSubject ? gameDataSubject.length : 'N/A');
// 确保gameDataSubject是数组且有数据
if (gameDataSubject && Array.isArray(gameDataSubject) && gameDataSubject.length > 0) {
// 确保startIndex不超过题目总数
const effectiveIndex = Math.min(startIndex, gameDataSubject.length - 1);
console.log('effectiveIndex:', effectiveIndex);
// 获取题目数据
const questionData = gameDataSubject[effectiveIndex];
console.log('questionData:', questionData);
if (!questionData) {
console.error('题目数据未找到:', subject, taskType, effectiveIndex);
// 即使没有题目数据也设置currentGame.value
currentGame.value = {
subject,
taskIndex,
taskType,
question: '暂无题目数据',
options: [],
parts: [],
items: [],
answer: '',
audio: ''
};
return;
}
let shuffledOptions = null;
let shuffledAnswer = questionData.answer;
// 如果有选项,随机打乱顺序
if (questionData.options) {
// 创建选项的副本并打乱
shuffledOptions = [...questionData.options];
for (let i = shuffledOptions.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[shuffledOptions[i], shuffledOptions[j]] = [shuffledOptions[j], shuffledOptions[i]];
}
}
// 设置currentGame.value
currentGame.value = {
subject,
taskIndex,
taskType,
question: questionData.question || '暂无题目',
options: shuffledOptions || questionData.options || [],
parts: questionData.parts || [],
items: questionData.items || [],
answer: shuffledAnswer || '',
audio: questionData.audio || ''
};
console.log('当前游戏设置:', currentGame.value);
console.log('currentGame.value设置后:', currentGame.value);
} else {
console.error('游戏数据未找到或为空:', subject, taskType, gameDataSubject);
// 即使没有游戏数据也设置currentGame.value避免界面无反应
currentGame.value = {
subject,
taskIndex,
taskType,
question: '暂无题目数据',
options: [],
parts: [],
items: [],
answer: '',
audio: ''
};
}
currentQuestionIndex.value = startIndex;
showFeedback.value = false;
currentAnswer.value = '';
experimentResult.value = '';
console.log('函数执行完毕currentGame.value:', currentGame.value);
} catch (error) {
console.error('开始游戏时发生错误:', error);
alert('开始游戏时发生错误,请重试');
}
};
// 检查数学答案
const checkAnswer = (option: string) => {
isCorrect.value = option === currentGame.value.answer;
const subject = currentGame.value.subject;
const taskIndex = currentGame.value.taskIndex;
const task = tasks.value[subject] && tasks.value[subject][taskIndex] ? tasks.value[subject][taskIndex] : { reward: 5 };
let starsPerQuestion = 1;
if (subject === 'math' || subject === 'chinese' || subject === 'english') {
starsPerQuestion = Math.ceil((task.reward || 5) / 20);
} else if (subject === 'science') {
starsPerQuestion = Math.ceil((task.reward || 5) / 10);
}
feedbackMessage.value = isCorrect.value
? `太棒了!回答正确!正确答案是 ${currentGame.value.answer}。获得 ${starsPerQuestion} 颗星星能量!`
: `再试一次,加油!你选择的是 ${option}`;
showFeedback.value = true;
if (isCorrect.value) {
playAudio(`太棒了,正确答案是 ${currentGame.value.answer}`);
}
};
// 检查语文答案
const checkChineseAnswer = (option?: string) => {
// 如果传入了选项,直接检查选项
if (option !== undefined) {
isCorrect.value = option === currentGame.value.answer;
const subject = currentGame.value.subject;
const taskIndex = currentGame.value.taskIndex;
const task = tasks.value[subject] && tasks.value[subject][taskIndex] ? tasks.value[subject][taskIndex] : { reward: 5 };
let starsPerQuestion = 1;
if (subject === 'math' || subject === 'chinese' || subject === 'english') {
starsPerQuestion = Math.ceil((task.reward || 5) / 20);
} else if (subject === 'science') {
starsPerQuestion = Math.ceil((task.reward || 5) / 10);
}
feedbackMessage.value = isCorrect.value
? `太棒了!答对了!正确答案是 ${currentGame.value.answer}。获得 ${starsPerQuestion} 颗星星能量!`
: `再试一次,加油!你选择的是 ${option}`;
showFeedback.value = true;
if (isCorrect.value) {
playAudio(`太棒了,正确答案是 ${currentGame.value.answer}`);
}
} else {
// 否则检查当前答案(拼字游戏)
isCorrect.value = currentAnswer.value === currentGame.value.answer;
const subject = currentGame.value.subject;
const taskIndex = currentGame.value.taskIndex;
const task = tasks.value[subject] && tasks.value[subject][taskIndex] ? tasks.value[subject][taskIndex] : { reward: 5 };
let starsPerQuestion = 1;
if (subject === 'math' || subject === 'chinese' || subject === 'english') {
starsPerQuestion = Math.ceil((task.reward || 5) / 20);
} else if (subject === 'science') {
starsPerQuestion = Math.ceil((task.reward || 5) / 10);
}
feedbackMessage.value = isCorrect.value
? `太棒了!拼字正确!正确答案是 ${currentGame.value.answer}。获得 ${starsPerQuestion} 颗星星能量!`
: `再试一次,加油!你选择的是 ${currentAnswer.value}`;
showFeedback.value = true;
if (isCorrect.value) {
playAudio(`太棒了,正确答案是 ${currentGame.value.answer}`);
}
}
};
// 检查英语答案
const checkEnglishAnswer = (option: string) => {
isCorrect.value = option === currentGame.value.answer;
const subject = currentGame.value.subject;
const taskIndex = currentGame.value.taskIndex;
const task = tasks.value[subject] && tasks.value[subject][taskIndex] ? tasks.value[subject][taskIndex] : { reward: 5 };
let starsPerQuestion = 1;
if (subject === 'math' || subject === 'chinese' || subject === 'english') {
starsPerQuestion = Math.ceil((task.reward || 5) / 20);
} else if (subject === 'science') {
starsPerQuestion = Math.ceil((task.reward || 5) / 10);
}
feedbackMessage.value = isCorrect.value
? `Great! Correct! The correct answer is ${currentGame.value.answer}. 获得 ${starsPerQuestion} 颗星星能量!`
: `Try again! You selected ${option}.`;
showFeedback.value = true;
if (isCorrect.value) {
playAudio(`Great! Correct! The correct answer is ${currentGame.value.answer}`);
}
};
// 检查科学答案
const checkScienceAnswer = () => {
isCorrect.value = true; // 科学实验只要完成就正确
const subject = currentGame.value.subject;
const taskIndex = currentGame.value.taskIndex;
const task = tasks.value[subject] && tasks.value[subject][taskIndex] ? tasks.value[subject][taskIndex] : { reward: 5 };
let starsPerQuestion = 1;
if (subject === 'math' || subject === 'chinese' || subject === 'english' || subject === 'japanese' || subject === 'geography') {
starsPerQuestion = Math.ceil((task.reward || 5) / 20);
} else if (subject === 'science') {
starsPerQuestion = Math.ceil((task.reward || 5) / 10);
}
feedbackMessage.value = `实验成功!你真棒!正确答案是 ${currentGame.value.answer}。获得 ${starsPerQuestion} 颗星星能量!`;
showFeedback.value = true;
playAudio(`太棒了,正确答案是 ${currentGame.value.answer}`);
};
// 检查日语答案
const checkJapaneseAnswer = (option: string) => {
isCorrect.value = option === currentGame.value.answer;
const subject = currentGame.value.subject;
const taskIndex = currentGame.value.taskIndex;
const task = tasks.value[subject] && tasks.value[subject][taskIndex] ? tasks.value[subject][taskIndex] : { reward: 5 };
let starsPerQuestion = 1;
if (subject === 'math' || subject === 'chinese' || subject === 'english' || subject === 'japanese' || subject === 'geography') {
starsPerQuestion = Math.ceil((task.reward || 5) / 20);
} else if (subject === 'science') {
starsPerQuestion = Math.ceil((task.reward || 5) / 10);
}
feedbackMessage.value = isCorrect.value
? `すごい!回答正确!正确答案是 ${currentGame.value.answer}。获得 ${starsPerQuestion} 颗星星能量!`
: `もう一度やってみて!你选择的是 ${option}`;
showFeedback.value = true;
if (isCorrect.value) {
playAudio(`すごい!正确答案是 ${currentGame.value.answer}`);
}
};
// 检查地理答案
const checkGeographyAnswer = (option: string) => {
isCorrect.value = option === currentGame.value.answer;
const subject = currentGame.value.subject;
const taskIndex = currentGame.value.taskIndex;
const task = tasks.value[subject] && tasks.value[subject][taskIndex] ? tasks.value[subject][taskIndex] : { reward: 5 };
let starsPerQuestion = 1;
if (subject === 'math' || subject === 'chinese' || subject === 'english' || subject === 'japanese' || subject === 'geography') {
starsPerQuestion = Math.ceil((task.reward || 5) / 20);
} else if (subject === 'science') {
starsPerQuestion = Math.ceil((task.reward || 5) / 10);
}
feedbackMessage.value = isCorrect.value
? `太棒了!回答正确!正确答案是 ${currentGame.value.answer}。获得 ${starsPerQuestion} 颗星星能量!`
: `再试一次,加油!你选择的是 ${option}`;
showFeedback.value = true;
if (isCorrect.value) {
playAudio(`太棒了,正确答案是 ${currentGame.value.answer}`);
}
};
// 选择语文偏旁
const selectPart = (part: string) => {
currentAnswer.value += part;
};
// 使用科学实验物品
const useItem = (item: any) => {
experimentResult.value = item.result;
};
// 下一题
const nextQuestion = () => {
// 每完成一题获得星星能量
const subject = currentGame.value.subject;
const taskIndex = currentGame.value.taskIndex;
const task = tasks.value[subject] && tasks.value[subject][taskIndex] ? tasks.value[subject][taskIndex] : { reward: 5 };
// 计算每题的星星奖励(降低获得量)
let starsPerQuestion = 1;
if (subject === 'math' || subject === 'chinese' || subject === 'english' || subject === 'japanese' || subject === 'geography') {
// 降低数学、语文、英语、日语、地理的奖励获得量
// 总奖励为5分成20题每题0.25颗向上取整为1颗
starsPerQuestion = Math.ceil((task.reward || 5) / 20); // 20题任务
} else if (subject === 'science') {
// 降低科学的奖励获得量
// 总奖励为8-12分成10题每题0.8-1.2颗向上取整为1颗
starsPerQuestion = Math.ceil((task.reward || 5) / 15); // 15题任务的计算方式降低获得量
}
// 添加星星能量
starEnergyStore.addEnergy(starsPerQuestion, 'knowledge');
// 更新进度
const taskType = currentGame.value.taskType;
// 更新学科进度
switch (subject) {
case 'math':
if (progress.value.math[taskType]) {
progress.value.math[taskType]++;
}
break;
case 'chinese':
if (progress.value.chinese[taskType]) {
progress.value.chinese[taskType]++;
}
break;
case 'english':
if (progress.value.english[taskType]) {
progress.value.english[taskType]++;
}
break;
case 'science':
if (progress.value.science[taskType]) {
progress.value.science[taskType]++;
}
break;
case 'japanese':
if (progress.value.japanese[taskType]) {
progress.value.japanese[taskType]++;
}
break;
case 'geography':
if (progress.value.geography[taskType]) {
progress.value.geography[taskType]++;
}
break;
}
// 更新每日完成记录
if (dailyProgress.value.completed[subject] !== undefined) {
dailyProgress.value.completed[subject]++;
}
// 保存进度
saveProgress();
// 检查是否达到每日上限
if (isDailyLimitReached(subject)) {
const subjectName = subject === 'math' ? '数学' : subject === 'chinese' ? '语文' : subject === 'english' ? '英语' : subject === 'japanese' ? '日语' : subject === 'geography' ? '地理' : '科学';
const limit = dailyLimits[subject] || 25;
alert(`今日${subjectName}题目已达上限(${limit}题),明天再来挑战吧!`);
currentGame.value = null;
return;
}
currentQuestionIndex.value++;
let gameDataSubject: any = null;
switch (subject) {
case 'math':
gameDataSubject = gameData.math[taskType];
break;
case 'chinese':
gameDataSubject = gameData.chinese[taskType];
break;
case 'english':
gameDataSubject = gameData.english[taskType];
break;
case 'science':
gameDataSubject = gameData.science[taskType];
break;
case 'japanese':
gameDataSubject = gameData.japanese[taskType];
break;
case 'geography':
gameDataSubject = gameData.geography[taskType];
break;
default:
gameDataSubject = gameData[subject];
}
if (gameDataSubject && currentQuestionIndex.value < gameDataSubject.length) {
const questionData = gameDataSubject[currentQuestionIndex.value];
let shuffledOptions = null;
let shuffledAnswer = questionData.answer;
// 如果有选项,随机打乱顺序
if (questionData.options) {
// 创建选项的副本并打乱
shuffledOptions = [...questionData.options];
for (let i = shuffledOptions.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[shuffledOptions[i], shuffledOptions[j]] = [shuffledOptions[j], shuffledOptions[i]];
}
}
currentGame.value = {
subject,
taskIndex,
taskType,
question: questionData.question,
options: shuffledOptions || questionData.options,
parts: questionData.parts,
items: questionData.items,
answer: shuffledAnswer,
audio: questionData.audio
};
showFeedback.value = false;
currentAnswer.value = '';
experimentResult.value = '';
} else {
// 完成所有题目
if (task) {
task.completed = true;
}
alert(`任务完成!`);
currentGame.value = null;
}
};
</script>
<style scoped>
.knowledge-area {
padding: 30px 20px;
min-height: calc(100vh - 200px);
background: linear-gradient(135deg, #FFF5E6 0%, #FFE4E1 50%, #E0F7FA 100%);
border-radius: 30px;
margin: 10px;
box-shadow: 0 10px 30px rgba(255, 182, 193, 0.3);
position: relative;
overflow: hidden;
}
/* 魔法装饰 */
.magic-decor {
position: absolute;
font-size: 24px;
animation: magicFloat 3s ease-in-out infinite;
pointer-events: none;
z-index: 1;
}
.star-1 { top: 50px; left: 30px; animation-delay: 0s; }
.star-2 { top: 80px; right: 50px; animation-delay: 0.5s; }
.star-3 { top: 200px; left: 80px; animation-delay: 1s; }
.star-4 { bottom: 150px; right: 100px; animation-delay: 1.5s; }
.star-5 { bottom: 100px; left: 150px; animation-delay: 2s; }
@keyframes magicFloat {
0%, 100% {
transform: translateY(0) scale(1) rotate(0deg);
opacity: 0.8;
}
50% {
transform: translateY(-15px) scale(1.2) rotate(180deg);
opacity: 1;
}
}
/* 库洛米向导 */
.guide-character {
position: absolute;
top: 20px;
right: 20px;
display: flex;
align-items: flex-end;
gap: 10px;
z-index: 10;
}
.guide-avatar {
font-size: 50px;
animation: guideBounce 2s ease-in-out infinite;
filter: drop-shadow(0 4px 8px rgba(147, 112, 219, 0.5));
}
.guide-bubble {
background: white;
border-radius: 20px;
padding: 12px 16px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
position: relative;
max-width: 200px;
}
.guide-bubble::before {
content: '';
position: absolute;
bottom: -10px;
left: 20px;
border-width: 10px 10px 0;
border-style: solid;
border-color: white transparent transparent transparent;
}
.guide-bubble p {
margin: 0;
font-size: 13px;
color: #666;
line-height: 1.4;
font-family: var(--cartoon-font);
}
@keyframes guideBounce {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-10px); }
}
.area-header {
text-align: center;
margin-bottom: 40px;
position: relative;
z-index: 5;
}
.header-decoration {
font-size: 28px;
margin: 10px 0;
animation: sparkle 2s ease-in-out infinite;
}
.header-decoration:nth-child(2) {
animation-delay: 1s;
}
@keyframes sparkle {
0%, 100% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.1);
opacity: 0.8;
}
}
.area-title {
font-size: 32px;
font-weight: 900;
background: linear-gradient(135deg, #FF69B4, #9370DB, #FF69B4);
background-size: 200% 200%;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 15px;
font-family: var(--cartoon-font);
animation: titleGlow 3s linear infinite;
letter-spacing: 2px;
}
@keyframes titleGlow {
0% { background-position: 0% 50%; }
100% { background-position: 200% 50%; }
}
.area-desc {
font-size: 18px;
color: #666;
margin: 0;
background: white;
display: inline-block;
padding: 10px 25px;
border-radius: 25px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
font-family: var(--cartoon-font);
}
.subjects {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
margin-bottom: 30px;
position: relative;
z-index: 5;
}
.subject-card {
background: white;
border-radius: 25px;
padding: 25px 20px;
text-align: center;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
position: relative;
overflow: hidden;
border: 3px solid transparent;
}
.subject-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 5px;
border-radius: 25px 25px 0 0;
animation: rainbowBorder 3s linear infinite;
}
@keyframes rainbowBorder {
0% { background: #FF69B4; }
33% { background: #9370DB; }
66% { background: #FFA500; }
100% { background: #FF69B4; }
}
.subject-card:hover {
transform: translateY(-10px) scale(1.05);
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);
}
.subject-card.math::before { background: linear-gradient(90deg, #FF69B4, #FFB6C1); }
.subject-card.chinese::before { background: linear-gradient(90deg, #9370DB, #DDA0DD); }
.subject-card.english::before { background: linear-gradient(90deg, #87CEEB, #4682B4); }
.subject-card.science::before { background: linear-gradient(90deg, #98FB98, #32CD32); }
.subject-card.geography::before { background: linear-gradient(90deg, #FFA500, #FFD700); }
.subject-icon {
font-size: 50px;
margin-bottom: 10px;
display: inline-block;
animation: iconFloat 2s ease-in-out infinite;
filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.2));
}
@keyframes iconFloat {
0%, 100% { transform: translateY(0) rotate(0deg); }
50% { transform: translateY(-8px) rotate(5deg); }
}
.subject-emoji {
font-size: 40px;
margin: 10px 0;
animation: emojiBounce 1.5s ease-in-out infinite;
}
@keyframes emojiBounce {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.2); }
}
.subject-title {
font-size: 20px;
font-weight: 900;
margin-bottom: 8px;
color: #333;
font-family: var(--cartoon-font);
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
}
.subject-desc {
font-size: 14px;
color: #666;
margin: 0 0 10px 0;
font-family: var(--cartoon-font);
}
.subject-reward {
display: inline-block;
background: linear-gradient(135deg, #FFD700, #FFA500);
color: white;
padding: 6px 15px;
border-radius: 15px;
font-size: 13px;
font-weight: bold;
font-family: var(--cartoon-font);
box-shadow: 0 4px 8px rgba(255, 165, 0, 0.3);
animation: rewardPulse 2s ease-in-out infinite;
}
@keyframes rewardPulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.05); }
}
/* 移除旧的图标样式使用新的emoji图标 */
.math-icon,
.chinese-icon,
.english-icon,
.science-icon {
display: none;
}
.subject-title {
font-size: 16px;
font-weight: bold;
margin-bottom: 5px;
color: #333;
}
.subject-desc {
font-size: 14px;
color: #666;
margin: 0;
}
.subject-content {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.95), rgba(255, 182, 193, 0.9));
border-radius: 25px;
padding: 25px;
box-shadow: 0 10px 30px rgba(255, 105, 180, 0.2);
border: 3px solid rgba(255, 255, 255, 0.6);
backdrop-filter: blur(10px);
}
.content-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 25px;
padding-bottom: 15px;
border-bottom: 3px dashed rgba(255, 105, 180, 0.3);
}
.content-title {
font-size: 24px;
font-weight: 900;
background: linear-gradient(135deg, #FF69B4, #9370DB);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin: 0;
font-family: var(--cartoon-font);
animation: titleFloat 2s ease-in-out infinite;
}
@keyframes titleFloat {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-3px); }
}
.back-btn {
background: linear-gradient(135deg, #FF69B4, #9370DB);
color: white;
border: none;
padding: 10px 20px;
border-radius: 25px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 10px rgba(255, 105, 180, 0.4);
font-family: var(--cartoon-font);
animation: wiggle 2s ease-in-out infinite;
}
.back-btn:hover {
transform: translateY(-3px) scale(1.05);
box-shadow: 0 6px 15px rgba(255, 105, 180, 0.5);
}
@keyframes wiggle {
0%, 100% { transform: rotate(0deg); }
25% { transform: rotate(3deg); }
75% { transform: rotate(-3deg); }
}
.tasks {
display: flex;
flex-direction: column;
gap: 15px;
}
.daily-progress {
background: linear-gradient(135deg, #FFD166, #06D6A0);
border-radius: 15px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}
.daily-progress h4 {
margin: 0 0 15px 0;
color: #006400;
font-size: 18px;
font-weight: bold;
}
.progress-bar {
width: 100%;
height: 20px;
background: rgba(255, 255, 255, 0.5);
border-radius: 10px;
overflow: hidden;
margin-bottom: 10px;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #FF6B6B, #4ECDC4);
border-radius: 10px;
transition: width 0.3s ease;
}
.progress-text {
font-size: 14px;
font-weight: bold;
color: #006400;
text-align: right;
display: block;
}
.task-card {
display: flex;
align-items: center;
background: white;
border-radius: 20px;
padding: 20px;
box-shadow: 0 6px 15px rgba(0, 0, 0, 0.1);
transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
border: 3px solid #FFE4E1;
position: relative;
overflow: hidden;
}
.task-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg, transparent, rgba(255, 105, 180, 0.1));
opacity: 0;
transition: opacity 0.3s ease;
pointer-events: none;
z-index: 0;
}
.task-card:hover {
transform: translateX(10px) translateY(-5px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
border-color: #FF69B4;
}
.task-card:hover::before {
opacity: 1;
}
.task-icon {
font-size: 45px;
margin-right: 20px;
width: 60px;
text-align: center;
animation: taskIconBounce 2s ease-in-out infinite;
flex-shrink: 0;
position: relative;
z-index: 1;
}
@keyframes taskIconBounce {
0%, 100% { transform: scale(1) rotate(0deg); }
50% { transform: scale(1.1) rotate(5deg); }
}
.task-info {
flex: 1;
position: relative;
z-index: 1;
}
.task-title {
font-size: 18px;
font-weight: 900;
color: #333;
margin-bottom: 8px;
font-family: var(--cartoon-font);
}
.task-desc {
font-size: 14px;
color: #666;
margin-bottom: 12px;
line-height: 1.5;
font-family: var(--cartoon-font);
}
.task-reward {
display: inline-flex;
align-items: center;
background: linear-gradient(135deg, #FFD700, #FFA500);
color: white;
padding: 6px 12px;
border-radius: 15px;
font-size: 14px;
font-weight: bold;
font-family: var(--cartoon-font);
box-shadow: 0 3px 8px rgba(255, 165, 0, 0.3);
animation: rewardGlow 2s ease-in-out infinite;
}
@keyframes rewardGlow {
0%, 100% {
box-shadow: 0 3px 8px rgba(255, 165, 0, 0.3);
}
50% {
box-shadow: 0 5px 15px rgba(255, 165, 0, 0.5);
}
}
.reward-icon {
font-size: 16px;
margin-right: 5px;
animation: starSpin 3s linear infinite;
}
@keyframes starSpin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.task-btn {
background: linear-gradient(135deg, #98FB98, #32CD32);
color: white;
border: none;
padding: 10px 20px;
border-radius: 20px;
font-size: 14px;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 10px rgba(50, 205, 50, 0.4);
font-family: var(--cartoon-font);
flex-shrink: 0;
position: relative;
z-index: 1;
}
.task-btn:hover {
transform: scale(1.05);
box-shadow: 0 6px 15px rgba(50, 205, 50, 0.5);
}
.task-btn:disabled {
background: #ccc;
cursor: not-allowed;
}
/* 游戏内容样式 */
.game-content {
margin-top: 25px;
padding: 30px;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.98), rgba(255, 182, 193, 0.95));
border-radius: 25px;
box-shadow: 0 10px 30px rgba(255, 105, 180, 0.25);
border: 3px solid rgba(255, 255, 255, 0.6);
position: relative;
overflow: hidden;
}
.game-content::before {
content: '✨';
position: absolute;
top: 10px;
right: 10px;
font-size: 24px;
animation: sparkleFloat 2s ease-in-out infinite;
}
@keyframes sparkleFloat {
0%, 100% {
transform: translateY(0) rotate(0deg);
opacity: 0.6;
}
50% {
transform: translateY(-10px) rotate(180deg);
opacity: 1;
}
}
.game-question {
margin-bottom: 25px;
text-align: center;
}
.question-with-audio {
display: flex;
align-items: center;
justify-content: center;
gap: 15px;
margin-bottom: 20px;
}
.game-question h4 {
font-size: 22px;
font-weight: 900;
background: linear-gradient(135deg, #FF69B4, #9370DB);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin: 0;
font-family: var(--cartoon-font);
text-shadow: none;
}
.audio-btn {
background: linear-gradient(135deg, #FFD166, #06D6A0);
border: none;
width: 45px;
height: 45px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);
animation: audioWiggle 2s ease-in-out infinite;
flex-shrink: 0;
}
.audio-btn:hover {
transform: scale(1.15) rotate(15deg);
box-shadow: 0 6px 15px rgba(0, 0, 0, 0.2);
}
@keyframes audioWiggle {
0%, 100% { transform: rotate(0deg); }
25% { transform: rotate(5deg); }
75% { transform: rotate(-5deg); }
}
/* 数学游戏样式 */
.answer-options {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 15px;
margin-bottom: 25px;
}
.option-btn {
background: linear-gradient(135deg, #FFE4E1, #FFB6C1);
border: 3px solid #FF69B4;
padding: 20px;
border-radius: 20px;
font-size: 24px;
font-weight: 900;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
display: flex;
align-items: center;
justify-content: space-between;
font-family: var(--cartoon-font);
box-shadow: 0 6px 15px rgba(255, 105, 180, 0.3);
color: #333;
}
.part-audio-btn {
background: linear-gradient(135deg, #FFD166, #06D6A0);
border: none;
width: 35px;
height: 35px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
flex-shrink: 0;
}
.part-audio-btn:hover {
transform: scale(1.1) rotate(15deg);
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
}
.item-name-with-audio {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 10px;
}
.option-btn:hover {
background: linear-gradient(135deg, #FF69B4, #9370DB);
color: white;
transform: translateY(-8px) scale(1.05);
box-shadow: 0 10px 25px rgba(255, 105, 180, 0.4);
}
/* 游戏反馈 */
.game-feedback {
text-align: center;
padding: 20px;
border-radius: 20px;
margin-top: 20px;
}
.feedback-message {
font-size: 20px;
font-weight: 900;
margin-bottom: 15px;
font-family: var(--cartoon-font);
animation: feedbackBounce 0.5s ease;
}
@keyframes feedbackBounce {
0% { transform: scale(0.8); opacity: 0; }
50% { transform: scale(1.1); }
100% { transform: scale(1); opacity: 1; }
}
.feedback-message.correct {
background: linear-gradient(135deg, #98FB98, #32CD32);
color: white;
padding: 15px 25px;
border-radius: 20px;
display: inline-block;
box-shadow: 0 6px 15px rgba(50, 205, 50, 0.4);
}
.feedback-message.incorrect {
background: linear-gradient(135deg, #FF6B6B, #EE5A5A);
color: white;
padding: 15px 25px;
border-radius: 20px;
display: inline-block;
box-shadow: 0 6px 15px rgba(255, 107, 107, 0.4);
}
.next-btn {
background: linear-gradient(135deg, #667eea, #764ba2);
color: white;
border: none;
padding: 12px 30px;
border-radius: 25px;
font-size: 18px;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 6px 15px rgba(102, 126, 234, 0.4);
font-family: var(--cartoon-font);
animation: pulse 2s ease-in-out infinite;
}
.next-btn:hover {
transform: translateY(-3px) scale(1.05);
box-shadow: 0 10px 25px rgba(102, 126, 234, 0.5);
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.05); }
}
/* 语文游戏样式 */
.character-parts {
display: flex;
justify-content: center;
gap: 15px;
margin-bottom: 20px;
}
.part {
background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
width: 60px;
height: 60px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.part:hover {
transform: scale(1.1);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
}
.current-answer {
text-align: center;
margin-bottom: 20px;
font-size: 18px;
}
.current-answer .answer {
font-weight: bold;
color: #667eea;
margin-left: 10px;
font-size: 24px;
}
/* 语文游戏选项按钮样式 */
.chinese-game .word-options {
display: flex;
flex-wrap: wrap;
gap: 15px;
justify-content: center;
margin: 25px 0;
}
.chinese-game .option-btn {
background: linear-gradient(135deg, #FFE4E1, #FFB6C1);
border: 3px solid #FF69B4;
padding: 20px 30px;
border-radius: 20px;
font-size: 24px;
font-weight: 900;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
display: flex;
align-items: center;
justify-content: space-between;
gap: 15px;
min-width: 150px;
box-shadow: 0 6px 15px rgba(255, 105, 180, 0.3);
color: #333;
}
.chinese-game .option-btn:hover {
background: linear-gradient(135deg, #FF69B4, #9370DB);
color: white;
transform: translateY(-8px) scale(1.05);
box-shadow: 0 10px 25px rgba(255, 105, 180, 0.5);
}
.chinese-game .part-audio-btn {
background: #FF69B4;
color: white;
border: none;
border-radius: 50%;
width: 35px;
height: 35px;
font-size: 16px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s ease;
flex-shrink: 0;
}
.chinese-game .part-audio-btn:hover {
background: #9370DB;
transform: scale(1.15);
}
/* 音频按钮样式 */
.question-with-audio {
display: flex;
align-items: center;
justify-content: center;
gap: 15px;
margin-bottom: 20px;
}
.audio-btn {
background: linear-gradient(135deg, #FFD166, #06D6A0);
border: none;
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
cursor: pointer;
transition: var(--transition);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
}
.audio-btn:hover {
transform: scale(1.1) rotate(10deg);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2);
}
.part-audio-btn {
background: rgba(255, 255, 255, 0.8);
border: 2px solid #FF6B6B;
width: 24px;
height: 24px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
cursor: pointer;
transition: var(--transition);
margin-top: 5px;
}
.part-audio-btn:hover {
background: #FF6B6B;
color: white;
transform: scale(1.1);
}
.option-audio-btn {
background: rgba(255, 255, 255, 0.8);
border: 2px solid #4ECDC4;
width: 24px;
height: 24px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
cursor: pointer;
transition: var(--transition);
margin-left: 10px;
}
.option-audio-btn:hover {
background: #4ECDC4;
color: white;
transform: scale(1.1);
}
.part {
position: relative;
}
.option-btn {
display: flex;
align-items: center;
justify-content: space-between;
}
/* 英语游戏样式 */
.word-options {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
margin-bottom: 20px;
}
/* 科学游戏样式 */
.experiment-area {
display: flex;
justify-content: space-around;
margin-bottom: 20px;
flex-wrap: wrap;
gap: 15px;
}
.experiment-item {
background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);
padding: 15px;
border-radius: 10px;
text-align: center;
min-width: 100px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.item-icon {
font-size: 32px;
margin-bottom: 10px;
}
.item-name {
font-size: 14px;
font-weight: bold;
margin-bottom: 10px;
color: #333;
}
.use-btn {
background: white;
border: none;
padding: 8px 16px;
border-radius: 20px;
font-size: 12px;
cursor: pointer;
transition: all 0.3s ease;
}
.use-btn:hover {
background: #667eea;
color: white;
}
.experiment-result {
background: #f0f8ff;
padding: 15px;
border-radius: 10px;
margin-bottom: 20px;
text-align: center;
font-size: 14px;
color: #333;
}
.result-with-audio {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
}
.result-with-audio p {
margin: 0;
flex: 1;
text-align: left;
}
.result-with-audio .audio-btn {
flex-shrink: 0;
}
/* 反馈样式 */
.game-feedback {
margin-top: 20px;
padding: 15px;
border-radius: 10px;
text-align: center;
}
.feedback-message {
font-size: 16px;
font-weight: bold;
margin-bottom: 15px;
padding: 10px;
border-radius: 10px;
}
.feedback-message.correct {
background: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.feedback-message.incorrect {
background: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.next-btn, .submit-btn {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border: none;
padding: 10px 20px;
border-radius: 20px;
font-size: 14px;
cursor: pointer;
transition: all 0.3s ease;
}
.next-btn:hover, .submit-btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
}
/* 响应式设计 */
@media (max-width: 768px) {
.answer-options {
grid-template-columns: 1fr;
}
.character-parts {
flex-wrap: wrap;
}
.experiment-area {
flex-direction: column;
align-items: center;
}
.experiment-item {
width: 100%;
max-width: 200px;
}
}
</style>