24点数学游戏edit icon

Fork(复制)
下载
嵌入
BUG反馈
index.html
现在支持上传本地图片了!
index.html
            
            <!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>24点数学游戏 - 小学版</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
            font-family: 'Comic Sans MS', '微软雅黑', sans-serif;
        }
        
        body {
            background-color: #f0f9ff;
            background-image: radial-gradient(#b3e5fc 1px, transparent 1px);
            background-size: 30px 30px;
            color: #333;
            line-height: 1.6;
            padding: 20px;
            min-height: 100vh;
        }
        
        .container {
            max-width: 900px;
            margin: 0 auto;
            background-color: rgba(255, 255, 255, 0.95);
            border-radius: 20px;
            box-shadow: 0 10px 30px rgba(0, 100, 200, 0.2);
            padding: 30px;
            border: 8px solid #4fc3f7;
            position: relative;
            overflow: hidden;
        }
        
        .header {
            text-align: center;
            margin-bottom: 30px;
            padding-bottom: 20px;
            border-bottom: 4px dashed #4fc3f7;
            position: relative;
        }
        
        h1 {
            color: #0288d1;
            font-size: 2.8rem;
            margin-bottom: 10px;
            text-shadow: 3px 3px 0 #b3e5fc;
        }
        
        .subtitle {
            color: #0277bd;
            font-size: 1.4rem;
            margin-bottom: 20px;
        }
        
        .game-info {
            display: flex;
            justify-content: space-between;
            flex-wrap: wrap;
            margin-bottom: 25px;
            background-color: #e1f5fe;
            padding: 15px;
            border-radius: 15px;
            border: 3px solid #4fc3f7;
        }
        
        .info-item {
            text-align: center;
            flex: 1;
            min-width: 150px;
            margin: 5px;
        }
        
        .info-label {
            font-weight: bold;
            color: #01579b;
            font-size: 1.1rem;
        }
        
        .info-value {
            font-size: 1.8rem;
            color: #0288d1;
            font-weight: bold;
        }
        
        .game-area {
            display: flex;
            flex-wrap: wrap;
            gap: 25px;
            margin-bottom: 30px;
        }
        
        .numbers-section {
            flex: 1;
            min-width: 300px;
            background-color: #e1f5fe;
            border-radius: 15px;
            padding: 20px;
            border: 4px solid #4fc3f7;
            box-shadow: 0 5px 15px rgba(0, 150, 255, 0.2);
        }
        
        .input-section {
            flex: 1;
            min-width: 300px;
            background-color: #f1f8e9;
            border-radius: 15px;
            padding: 20px;
            border: 4px solid #9ccc65;
            box-shadow: 0 5px 15px rgba(140, 195, 100, 0.2);
        }
        
        .section-title {
            color: #01579b;
            font-size: 1.5rem;
            margin-bottom: 15px;
            padding-bottom: 8px;
            border-bottom: 3px solid;
            display: flex;
            align-items: center;
        }
        
        .numbers-title {
            border-color: #4fc3f7;
        }
        
        .input-title {
            border-color: #9ccc65;
        }
        
        .numbers-container {
            display: flex;
            justify-content: space-between;
            flex-wrap: wrap;
            gap: 15px;
            margin-bottom: 25px;
        }
        
        .number-card {
            width: 80px;
            height: 80px;
            background-color: #4fc3f7;
            border-radius: 15px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 3rem;
            font-weight: bold;
            color: white;
            box-shadow: 0 6px 0 #0288d1;
            cursor: pointer;
            transition: all 0.2s;
            user-select: none;
        }
        
        .number-card:hover {
            transform: translateY(-5px);
            box-shadow: 0 10px 0 #0288d1;
        }
        
        .number-card:active {
            transform: translateY(2px);
            box-shadow: 0 4px 0 #0288d1;
        }
        
        .operation-buttons {
            display: flex;
            justify-content: space-between;
            flex-wrap: wrap;
            gap: 15px;
            margin-top: 10px;
        }
        
        .op-btn {
            width: 60px;
            height: 60px;
            background-color: #ffb74d;
            border-radius: 12px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 2.2rem;
            font-weight: bold;
            color: white;
            box-shadow: 0 5px 0 #f57c00;
            cursor: pointer;
            transition: all 0.2s;
            user-select: none;
        }
        
        .op-btn:hover {
            transform: translateY(-3px);
            box-shadow: 0 8px 0 #f57c00;
        }
        
        .op-btn:active {
            transform: translateY(2px);
            box-shadow: 0 3px 0 #f57c00;
        }
        
        .input-area {
            width: 100%;
            min-height: 120px;
            background-color: white;
            border-radius: 12px;
            padding: 15px;
            font-size: 1.8rem;
            margin-bottom: 20px;
            border: 3px solid #c8e6c9;
            color: #388e3c;
            word-wrap: break-word;
            box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.1);
        }
        
        .control-buttons {
            display: flex;
            justify-content: space-between;
            flex-wrap: wrap;
            gap: 15px;
            margin-top: 25px;
        }
        
        .control-btn {
            flex: 1;
            min-width: 140px;
            padding: 15px;
            border: none;
            border-radius: 12px;
            font-size: 1.3rem;
            font-weight: bold;
            cursor: pointer;
            transition: all 0.3s;
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 10px;
            box-shadow: 0 6px 0 rgba(0, 0, 0, 0.2);
        }
        
        .control-btn:active {
            transform: translateY(4px);
            box-shadow: 0 2px 0 rgba(0, 0, 0, 0.2);
        }
        
        .new-game-btn {
            background-color: #4fc3f7;
            color: white;
        }
        
        .check-btn {
            background-color: #9ccc65;
            color: white;
        }
        
        .hint-btn {
            background-color: #ffb74d;
            color: white;
        }
        
        .clear-btn {
            background-color: #ff8a65;
            color: white;
        }
        
        .difficulty {
            display: flex;
            justify-content: center;
            gap: 15px;
            margin-bottom: 25px;
            flex-wrap: wrap;
        }
        
        .diff-btn {
            padding: 12px 25px;
            background-color: #e1f5fe;
            border: 3px solid #4fc3f7;
            border-radius: 50px;
            font-size: 1.2rem;
            font-weight: bold;
            color: #0288d1;
            cursor: pointer;
            transition: all 0.3s;
        }
        
        .diff-btn.active {
            background-color: #4fc3f7;
            color: white;
        }
        
        .feedback {
            text-align: center;
            font-size: 1.6rem;
            font-weight: bold;
            min-height: 70px;
            padding: 15px;
            border-radius: 12px;
            margin-top: 20px;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: all 0.3s;
        }
        
        .feedback.correct {
            background-color: #c8e6c9;
            color: #2e7d32;
            border: 3px solid #9ccc65;
        }
        
        .feedback.wrong {
            background-color: #ffcdd2;
            color: #c62828;
            border: 3px solid #ef9a9a;
        }
        
        .feedback.default {
            background-color: #f5f5f5;
            color: #616161;
            border: 3px dashed #bdbdbd;
        }
        
        .rules {
            background-color: #fff3e0;
            padding: 20px;
            border-radius: 15px;
            margin-top: 30px;
            border: 3px solid #ffb74d;
        }
        
        .rules h3 {
            color: #ef6c00;
            margin-bottom: 15px;
            display: flex;
            align-items: center;
            gap: 10px;
        }
        
        .rules p {
            margin-bottom: 10px;
            font-size: 1.1rem;
        }
        
        .rules ul {
            padding-left: 25px;
            margin-bottom: 15px;
        }
        
        .rules li {
            margin-bottom: 8px;
            font-size: 1.1rem;
        }
        
        .decoration {
            position: absolute;
            font-size: 2rem;
            color: #4fc3f7;
            opacity: 0.6;
            z-index: 0;
        }
        
        @media (max-width: 768px) {
            .game-area {
                flex-direction: column;
            }
            
            h1 {
                font-size: 2.2rem;
            }
            
            .number-card {
                width: 70px;
                height: 70px;
                font-size: 2.5rem;
            }
        }
        
        .star {
            color: #ffb74d;
            font-size: 1.8rem;
            margin-right: 5px;
        }
        
        .score-display {
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 10px;
        }
        
        .solution {
            background-color: #f3e5f5;
            padding: 15px;
            border-radius: 10px;
            margin-top: 15px;
            border: 2px solid #ba68c8;
            color: #7b1fa2;
            font-size: 1.3rem;
            text-align: center;
            display: none;
        }
        
        .used-number {
            opacity: 0.5;
            background-color: #81d4fa;
        }
        
        .used-number:hover {
            transform: none;
            box-shadow: 0 6px 0 #0288d1;
            cursor: not-allowed;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="decoration" style="top: 20px; left: 20px;">✎</div>
        <div class="decoration" style="top: 20px; right: 20px;">✦</div>
        <div class="decoration" style="bottom: 20px; left: 20px;">◈</div>
        <div class="decoration" style="bottom: 20px; right: 20px;">♡</div>
        
        <div class="header">
            <h1><i class="fas fa-calculator"></i> 24点数学游戏</h1>
            <div class="subtitle">适合小学二、三年级 | 用4个数字通过加减乘除得到24</div>
        </div>
        
        <div class="difficulty">
            <div class="diff-btn active" data-level="easy">简单 (数字1-9)</div>
            <div class="diff-btn" data-level="medium">中等 (数字1-12)</div>
            <div class="diff-btn" data-level="hard">挑战 (数字1-13,含负数)</div>
        </div>
        
        <div class="game-info">
            <div class="info-item">
                <div class="info-label">当前难度</div>
                <div class="info-value" id="current-level">简单</div>
            </div>
            <div class="info-item">
                <div class="info-label">已解决</div>
                <div class="info-value" id="solved-count">0</div>
            </div>
            <div class="info-item">
                <div class="info-label">得分</div>
                <div class="info-value score-display"><i class="fas fa-star star"></i> <span id="score">0</span></div>
            </div>
            <div class="info-item">
                <div class="info-label">剩余时间</div>
                <div class="info-value" id="timer">60</div>
            </div>
        </div>
        
        <div class="game-area">
            <div class="numbers-section">
                <div class="section-title numbers-title">
                    <i class="fas fa-dice"></i> 数字卡片
                </div>
                <div class="numbers-container" id="numbers-container">
                    <!-- 数字卡片会通过JS动态生成 -->
                </div>
                
                <div class="section-title">
                    <i class="fas fa-plus-minus"></i> 运算符号
                </div>
                <div class="operation-buttons">
                    <div class="op-btn" data-op="+">+</div>
                    <div class="op-btn" data-op="-">-</div>
                    <div class="op-btn" data-op="×">×</div>
                    <div class="op-btn" data-op="÷">÷</div>
                    <div class="op-btn" data-op="(">(</div>
                    <div class="op-btn" data-op=")">)</div>
                </div>
            </div>
            
            <div class="input-section">
                <div class="section-title input-title">
                    <i class="fas fa-keyboard"></i> 你的算式
                </div>
                <div class="input-area" id="expression-area">
                    点击上面的数字和符号来创建算式
                </div>
                
                <div class="control-buttons">
                    <button class="control-btn new-game-btn" id="new-game">
                        <i class="fas fa-redo"></i> 新游戏
                    </button>
                    <button class="control-btn check-btn" id="check-answer">
                        <i class="fas fa-check"></i> 检查答案
                    </button>
                    <button class="control-btn hint-btn" id="hint-btn">
                        <i class="fas fa-lightbulb"></i> 提示
                    </button>
                    <button class="control-btn clear-btn" id="clear-btn">
                        <i class="fas fa-eraser"></i> 清空
                    </button>
                </div>
            </div>
        </div>
        
        <div class="feedback default" id="feedback">
            点击"新游戏"开始,使用4个数字和运算符号得到24!
        </div>
        
        <div class="solution" id="solution">
            <!-- 解题提示会显示在这里 -->
        </div>
        
        <div class="rules">
            <h3><i class="fas fa-info-circle"></i> 游戏规则</h3>
            <ul>
                <li>从上面的4个数字卡片中选择数字,并点击运算符号来创建算式</li>
                <li>必须<strong>全部使用</strong>4个数字,每个数字只能使用一次</li>
                <li>使用加(+)、减(-)、乘(×)、除(÷)和括号()得到24</li>
                <li>点击"检查答案"验证你的算式是否正确</li>
                <li>如果遇到困难,可以点击"提示"按钮获得帮助</li>
                <li>简单模式:数字1-9 | 中等模式:数字1-12 | 挑战模式:数字1-13,可能包含负数</li>
            </ul>
            <p><strong>例如:</strong> 数字 4, 6, 3, 2 可以这样计算:<em>4 × 6 × (3 - 2) = 24</em></p>
        </div>
    </div>

    <script>
        // 游戏状态变量
        let currentNumbers = [];
        let currentExpression = "";
        let usedNumbers = [];
        let solvedCount = 0;
        let score = 0;
        let timer = 60;
        let timerInterval;
        let currentLevel = "easy";
        let gameActive = false;
        
        // DOM元素
        const numbersContainer = document.getElementById("numbers-container");
        const expressionArea = document.getElementById("expression-area");
        const feedbackElement = document.getElementById("feedback");
        const solutionElement = document.getElementById("solution");
        const solvedCountElement = document.getElementById("solved-count");
        const scoreElement = document.getElementById("score");
        const timerElement = document.getElementById("timer");
        const currentLevelElement = document.getElementById("current-level");
        
        // 难度设置
        const difficultySettings = {
            easy: { min: 1, max: 9, name: "简单", scoreMultiplier: 1 },
            medium: { min: 1, max: 12, name: "中等", scoreMultiplier: 2 },
            hard: { min: 1, max: 13, name: "挑战", scoreMultiplier: 3, allowNegative: true }
        };
        
        // 初始化游戏
        function initGame() {
            // 生成4个随机数字
            generateNumbers();
            
            // 重置使用记录
            usedNumbers = [];
            
            // 更新UI
            updateNumbersDisplay();
            clearExpression();
            updateFeedback("使用这4个数字通过加减乘除得到24!", "default");
            hideSolution();
            
            // 重置并启动计时器
            resetTimer();
            startTimer();
            
            // 更新游戏状态
            gameActive = true;
        }
        
        // 生成4个随机数字
        function generateNumbers() {
            const settings = difficultySettings[currentLevel];
            currentNumbers = [];
            
            for (let i = 0; i < 4; i++) {
                let num = Math.floor(Math.random() * (settings.max - settings.min + 1)) + settings.min;
                
                // 在困难模式中,有30%的概率生成负数
                if (currentLevel === "hard" && Math.random() < 0.3) {
                    num = -num;
                }
                
                currentNumbers.push(num);
            }
            
            // 确保至少有一个可解的24点组合(简单起见,这里只是随机生成)
            // 在实际完整版中,这里应该验证是否有解
        }
        
        // 更新数字显示
        function updateNumbersDisplay() {
            numbersContainer.innerHTML = "";
            
            currentNumbers.forEach((num, index) => {
                const numberCard = document.createElement("div");
                numberCard.className = "number-card";
                numberCard.textContent = num;
                numberCard.dataset.index = index;
                numberCard.dataset.value = num;
                
                // 检查该数字是否已被使用
                const isUsed = usedNumbers.filter(n => n.index === index).length > 0;
                if (isUsed) {
                    numberCard.classList.add("used-number");
                    numberCard.style.cursor = "not-allowed";
                }
                
                numberCard.addEventListener("click", () => addNumberToExpression(num, index));
                numbersContainer.appendChild(numberCard);
            });
        }
        
        // 将数字添加到表达式
        function addNumberToExpression(num, index) {
            if (!gameActive) return;
            
            // 检查该数字是否已被使用
            const isUsed = usedNumbers.filter(n => n.index === index).length > 0;
            if (isUsed) {
                updateFeedback(`数字 ${num} 已经被使用过了!`, "wrong");
                return;
            }
            
            // 记录已使用的数字
            usedNumbers.push({value: num, index: index});
            
            // 添加数字到表达式
            if (currentExpression === "点击上面的数字和符号来创建算式" || 
                currentExpression.trim() === "") {
                currentExpression = num.toString();
            } else {
                // 获取最后一个字符
                const lastChar = currentExpression.trim().slice(-1);
                
                // 如果最后一个字符是数字或右括号,则需要先添加运算符
                if (!isNaN(lastChar) || lastChar === ')') {
                    updateFeedback("请在数字之间添加运算符!", "wrong");
                    // 移除刚刚添加的使用记录
                    usedNumbers = usedNumbers.filter(n => n.index !== index);
                    return;
                } else {
                    // 直接添加数字
                    currentExpression += num.toString();
                }
            }
            
            updateExpressionDisplay();
            updateNumbersDisplay(); // 更新数字卡片状态
        }
        
        // 添加运算符到表达式
        function addOperator(op) {
            if (!gameActive) return;
            
            if (currentExpression === "点击上面的数字和符号来创建算式" || 
                currentExpression.trim() === "") {
                // 如果表达式为空,只能添加左括号或负数符号
                if (op === "(") {
                    currentExpression = "(";
                } else if (op === "-") {
                    currentExpression = "-";
                } else {
                    updateFeedback("请先选择数字!", "wrong");
                }
                updateExpressionDisplay();
                return;
            }
            
            // 检查是否可以在表达式末尾添加运算符
            const trimmedExpression = currentExpression.trim();
            const lastChar = trimmedExpression.slice(-1);
            
            // 如果最后一个字符是运算符或左括号,不能直接添加运算符(除了右括号)
            if (isOperator(lastChar) || lastChar === '(') {
                // 例外:左括号后可以跟负号
                if (lastChar === '(' && op === '-') {
                    currentExpression += " -";
                } 
                // 例外:运算符后可以跟左括号
                else if (isOperator(lastChar) && op === '(') {
                    currentExpression += " (";
                }
                else {
                    updateFeedback("这里不能添加运算符!", "wrong");
                    return;
                }
            } 
            // 如果最后一个字符是数字或右括号,可以添加任何运算符
            else if (!isNaN(lastChar) || lastChar === ')') {
                // 添加运算符
                currentExpression += ` ${op} `;
            } else {
                currentExpression += op;
            }
            
            updateExpressionDisplay();
        }
        
        // 检查字符是否是运算符
        function isOperator(char) {
            return ['+', '-', '×', '÷'].includes(char);
        }
        
        // 更新表达式显示
        function updateExpressionDisplay() {
            expressionArea.textContent = currentExpression;
        }
        
        // 清空表达式
        function clearExpression() {
            currentExpression = "点击上面的数字和符号来创建算式";
            usedNumbers = [];
            updateExpressionDisplay();
            updateNumbersDisplay();
        }
        
        // 检查答案
        function checkAnswer() {
            if (!gameActive) {
                updateFeedback("请先开始新游戏!", "wrong");
                return;
            }
            
            // 验证是否使用了所有4个数字
            if (usedNumbers.length !== 4) {
                updateFeedback(`只使用了 ${usedNumbers.length} 个数字,必须使用全部4个数字!`, "wrong");
                return;
            }
            
            // 检查是否每个数字都只使用了一次
            const usedIndices = usedNumbers.map(n => n.index);
            const uniqueIndices = [...new Set(usedIndices)];
            if (uniqueIndices.length !== 4) {
                updateFeedback("每个数字只能使用一次!", "wrong");
                return;
            }
            
            // 计算表达式结果
            try {
                // 替换乘除符号为JavaScript可识别的符号
                let expression = currentExpression
                    .replace(/×/g, '*')
                    .replace(/÷/g, '/');
                
                // 安全地计算表达式
                const result = eval(expression);
                
                // 检查结果是否为24(允许轻微浮点数误差)
                if (Math.abs(result - 24) < 0.0001) {
                    // 正确答案
                    solvedCount++;
                    score += 10 * difficultySettings[currentLevel].scoreMultiplier;
                    
                    updateSolvedCount();
                    updateScore();
                    updateFeedback(`太棒了!${currentExpression} = 24`, "correct");
                    
                    // 播放成功音效(模拟)
                    playSuccessSound();
                    
                    // 1.5秒后开始新游戏
                    setTimeout(() => {
                        initGame();
                    }, 1500);
                } else {
                    updateFeedback(`算式结果是 ${result.toFixed(2)},不是24。再试试!`, "wrong");
                    playErrorSound();
                }
            } catch (error) {
                updateFeedback("算式有错误,请检查格式!", "wrong");
                playErrorSound();
            }
        }
        
        // 显示提示
        function showHint() {
            if (!gameActive) {
                updateFeedback("请先开始新游戏!", "wrong");
                return;
            }
            
            // 减少分数作为提示代价
            score = Math.max(0, score - 5);
            updateScore();
            
            // 生成简单的提示
            solutionElement.style.display = "block";
            
            // 根据当前数字生成不同的提示
            const hint = generateHint();
            solutionElement.innerHTML = `<strong>提示:</strong>${hint}`;
            
            updateFeedback("已显示提示,扣除5分。继续努力!", "default");
        }
        
        // 生成提示
        function generateHint() {
            const nums = currentNumbers.slice();
            
            // 尝试找到一些简单的24点组合
            // 这里提供一些通用的提示策略
            const hints = [
                "尝试先找到一个乘法组合,比如 6×4=24 或 8×3=24,然后看看剩下的数字能否得到1或0",
                "看看是否有数字相加或相乘接近24,然后调整其他数字",
                "尝试使用除法,比如 48÷2=24 或 72÷3=24",
                "括号可以改变运算顺序,试试用括号把某些数字组合起来",
                "如果数字中有6,可以尝试 6×4=24,然后看其他数字能否组合成4",
                "如果数字中有8,可以尝试 8×3=24,然后看其他数字能否组合成3"
            ];
            
            // 根据具体数字给出更具体的提示
            if (nums.includes(6) && nums.includes(4)) {
                return "你有6和4,6×4=24,看看剩下的两个数字能否得到1(这样就是6×4×1=24)或0(这样就是6×4+0=24)";
            }
            
            if (nums.includes(8) && nums.includes(3)) {
                return "你有8和3,8×3=24,看看剩下的两个数字能否得到1或0";
            }
            
            if (nums.includes(12) && nums.includes(2)) {
                return "你有12和2,12×2=24,看看剩下的两个数字能否得到1或0";
            }
            
            // 返回随机提示
            return hints[Math.floor(Math.random() * hints.length)];
        }
        
        // 隐藏解题提示
        function hideSolution() {
            solutionElement.style.display = "none";
        }
        
        // 更新反馈信息
        function updateFeedback(message, type) {
            feedbackElement.textContent = message;
            feedbackElement.className = "feedback " + type;
        }
        
        // 更新已解决计数
        function updateSolvedCount() {
            solvedCountElement.textContent = solvedCount;
        }
        
        // 更新分数
        function updateScore() {
            scoreElement.textContent = score;
        }
        
        // 重置计时器
        function resetTimer() {
            timer = 60;
            timerElement.textContent = timer;
            timerElement.style.color = "#0288d1";
        }
        
        // 开始计时器
        function startTimer() {
            clearInterval(timerInterval);
            
            timerInterval = setInterval(() => {
                if (!gameActive) return;
                
                timer--;
                timerElement.textContent = timer;
                
                if (timer <= 0) {
                    clearInterval(timerInterval);
                    gameActive = false;
                    updateFeedback("时间到!点击'新游戏'重新开始。", "wrong");
                    playTimeUpSound();
                } else if (timer <= 10) {
                    timerElement.style.color = "#e53935";
                    // 播放倒计时音效(模拟)
                    if (timer <= 5) {
                        playTickSound();
                    }
                }
            }, 1000);
        }
        
        // 改变难度
        function changeDifficulty(level) {
            currentLevel = level;
            currentLevelElement.textContent = difficultySettings[level].name;
            
            // 更新难度按钮状态
            document.querySelectorAll(".diff-btn").forEach(btn => {
                if (btn.dataset.level === level) {
                    btn.classList.add("active");
                } else {
                    btn.classList.remove("active");
                }
            });
            
            // 开始新游戏
            initGame();
        }
        
        // 音效函数(模拟)
        function playSuccessSound() {
            // 在实际应用中,这里可以播放音频文件
            console.log("播放成功音效");
        }
        
        function playErrorSound() {
            console.log("播放错误音效");
        }
        
        function playTimeUpSound() {
            console.log("播放时间到音效");
        }
        
        function playTickSound() {
            console.log("播放倒计时音效");
        }
        
        // 事件监听器设置
        function setupEventListeners() {
            // 新游戏按钮
            document.getElementById("new-game").addEventListener("click", () => {
                initGame();
                updateFeedback("新游戏开始!使用这4个数字得到24。", "default");
            });
            
            // 检查答案按钮
            document.getElementById("check-answer").addEventListener("click", checkAnswer);
            
            // 提示按钮
            document.getElementById("hint-btn").addEventListener("click", showHint);
            
            // 清空按钮
            document.getElementById("clear-btn").addEventListener("click", () => {
                if (gameActive) {
                    clearExpression();
                    updateFeedback("已清空算式,重新开始计算。", "default");
                }
            });
            
            // 难度按钮
            document.querySelectorAll(".diff-btn").forEach(btn => {
                btn.addEventListener("click", () => {
                    changeDifficulty(btn.dataset.level);
                });
            });
            
            // 运算符号按钮
            document.querySelectorAll(".op-btn").forEach(btn => {
                btn.addEventListener("click", () => {
                    addOperator(btn.dataset.op);
                });
            });
            
            // 初始游戏说明
            updateFeedback("欢迎来到24点数学游戏!点击'新游戏'开始挑战。", "default");
        }
        
        // 页面加载完成后初始化
        document.addEventListener("DOMContentLoaded", () => {
            setupEventListeners();
            // 初始化为简单难度
            changeDifficulty("easy");
        });
    </script>
</body>
</html>
        
编辑器加载中
预览
控制台