【新春创造营】马年接福·红包消消乐

【新春创造营】马年接福·红包消消乐

项目简介

《马年接福·红包消消乐》是一款以马年"接福纳祥"和新春红包习俗为主题的益智休闲类HTML小游戏。游戏采用"串联红包、消除兑福"的核心玩法,通过拖拽串联相同图案的红包进行消除,打造了一个轻量化、低门槛的消消乐体验。游戏适配全设备,无需下载,打开即玩,适合全家老少共同娱乐,传递新春团圆、喜乐纳福的氛围。

游戏特色

  • :puzzle_piece: 简单消除:拖动串联3个及以上相同图案的红包即可消除

  • :video_game: 双重模式:关卡模式(10关递进挑战)和限时模式(60秒极速挑战)

  • :bomb: 道具系统:祥马炸弹和福马连线,助力破局

  • :confetti_ball: 马到成功:特殊红包彩蛋,双倍积分+全屏烟花

  • :trophy: 等级评定:限时模式根据得分评定福马级、祥马级、瑞马级

  • :floppy_disk: 进度保存:道具数量和特殊红包统计自动保存

  • :artist_palette: 喜庆视觉:中国红+金色主题,祥云、烟花等丰富特效

技术实现

核心技术栈

  • HTML5:网格结构搭建、道具及红包元素渲染

  • CSS3:样式设计、响应式布局、动画特效

  • JavaScript:拖拽交互、消除逻辑、得分计算、关卡控制

关键功能实现

1. 网格系统与拖拽交互

使用二维数组存储网格数据,实现流畅的拖拽交互:

// 网格数据结构
let grid = [];
let gridSize = 5;

// 初始化网格
function setupGrid() {
    grid = [];
    for (let i = 0; i < gridSize; i++) {
        grid[i] = [];
        for (let j = 0; j < gridSize; j++) {
            grid[i][j] = getRandomPattern();
        }
    }
    renderGrid();
}

// 拖拽交互处理
function handleDragStart(e) {
    isDragging = true;
    selectedCells = [];
    const cell = e.target.closest('.grid-cell');
    if (cell) {
        addToSelection(cell);
    }
}

2. 消除逻辑与路径判断

实现直线串联判断和消除算法:

// 添加到选择(检查相邻和图案相同)
function addToSelection(cell) {
    const row = parseInt(cell.dataset.row);
    const col = parseInt(cell.dataset.col);

    // 检查是否相邻(只允许直线移动)
    if (selectedCells.length > 0) {
        const lastCell = selectedCells[selectedCells.length - 1];
        const rowDiff = Math.abs(row - lastCell.row);
        const colDiff = Math.abs(col - lastCell.col);

        // 只允许横向或纵向移动
        if ((rowDiff > 0 && colDiff > 0) || (rowDiff > 1 || colDiff > 1)) {
            return;
        }
    }

    // 检查图案是否相同
    const currentPattern = grid[row][col].pattern;
    if (selectedCells.length > 0) {
        const firstPattern = grid[selectedCells[0].row][selectedCells[0].col].pattern;
        if (currentPattern !== firstPattern) {
            return;
        }
    }

    selectedCells.push({ row, col });
}

3. 得分计算系统

根据消除数量计算得分,特殊红包翻倍:

// 消除得分计算
function eliminateSelected() {
    const eliminateCount = selectedCells.length;
    let points = 0;
    let hasSpecial = false;

    // 基础得分
    if (eliminateCount === 3) {
        points = 10;
    } else if (eliminateCount === 4) {
        points = 25;
    } else {
        points = 50 + (eliminateCount - 5) * 10;
    }

    // 检查特殊红包(双倍积分)
    selectedCells.forEach(cell => {
        if (grid[cell.row][cell.col].isSpecial) {
            hasSpecial = true;
            points *= 2;
        }
    });

    score += points;
}

4. 红包掉落与填充

实现重力掉落和顶部填充:

// 红包掉落(类似俄罗斯方块的消除逻辑)
function dropPackets() {
    for (let col = 0; col < gridSize; col++) {
        let emptyRow = gridSize - 1;
        for (let row = gridSize - 1; row >= 0; row--) {
            if (grid[row][col] !== null) {
                if (row !== emptyRow) {
                    grid[emptyRow][col] = grid[row][col];
                    grid[row][col] = null;
                }
                emptyRow--;
            }
        }
    }
}

// 填充空位
function fillEmptyCells() {
    for (let row = 0; row < gridSize; row++) {
        for (let col = 0; col < gridSize; col++) {
            if (grid[row][col] === null) {
                grid[row][col] = getRandomPattern();
            }
        }
    }
}

5. 道具系统

实现两种特色道具:

// 祥马炸弹:消除3×3范围内的红包
function useBomb() {
    const row = Math.floor(Math.random() * gridSize);
    const col = Math.floor(Math.random() * gridSize);

    // 消除3x3范围内的红包
    const cellsToEliminate = [];
    for (let i = -1; i <= 1; i++) {
        for (let j = -1; j <= 1; j++) {
            const newRow = row + i;
            const newCol = col + j;
            if (newRow >= 0 && newRow < gridSize && 
                newCol >= 0 && newCol < gridSize && grid[newRow][newCol]) {
                cellsToEliminate.push({ row: newRow, col: newCol });
            }
        }
    }
    // 播放特效并消除
}

// 福马连线:强制消除任意2个相同红包
function useLine() {
    // 寻找有至少2个相同图案的
    for (const pattern in patternCounts) {
        if (patternCounts[pattern].length >= 2) {
            const cell1 = patternCounts[pattern][0];
            const cell2 = patternCounts[pattern][1];
            // 播放连线特效并消除
        }
    }
}

6. 关卡与限时控制

// 关卡配置
const LEVEL_CONFIG = [
    { size: 5, target: 100, lives: 3, patterns: 4 },
    { size: 5, target: 150, lives: 3, patterns: 5 },
    // ... 更多关卡
    { size: 6, target: 600, lives: 3, patterns: 6 }
];

// 关卡模式加载
function loadLevel(level) {
    const config = LEVEL_CONFIG[level - 1];
    gridSize = config.size;
    availablePatterns = config.patterns;
    lives = config.lives;
    setupGrid();
}

// 限时模式计时器
function startTimer() {
    gameInterval = setInterval(() => {
        if (!isPaused && gameState === GameState.PLAYING) {
            timeLeft--;
            if (timeLeft <= 0) {
                endGame(true);
            }
        }
    }, 1000);
}

7. 视觉特效系统

使用CSS3动画实现丰富特效:

/* 消除特效 */
@keyframes eliminateBurst {
    0% { transform: scale(0); opacity: 1; }
    100% { transform: scale(2); opacity: 0; }
}

/* 烟花特效 */
@keyframes fireworkBurst {
    0% { transform: scale(1); opacity: 1; }
    100% { transform: scale(0); opacity: 0; }
}

/* 特殊红包脉冲 */
@keyframes specialPulse {
    0%, 100% { box-shadow: 0 0 10px rgba(255, 215, 0, 0.5); }
    50% { box-shadow: 0 0 20px rgba(255, 215, 0, 0.8); }
}

8. 本地数据存储

// 保存道具和进度
function saveData() {
    const data = {
        bombCount: bombCount,
        lineCount: lineCount,
        specialRedPackets: specialRedPackets
    };
    localStorage.setItem('redPacketGameData', JSON.stringify(data));
}

// 加载保存的数据
function loadData() {
    try {
        const savedData = localStorage.getItem('redPacketGameData');
        if (savedData) {
            const data = JSON.parse(savedData);
            bombCount = data.bombCount || 0;
            lineCount = data.lineCount || 0;
        }
    } catch (e) {
        console.error('加载数据失败:', e);
    }
}

9. 响应式布局

/* 网格自适应 */
.game-grid {
    display: grid;
    gap: 5px;
    touch-action: none;
}

@media (max-width: 480px) {
    .grid-cell {
        width: 40px;
        height: 40px;
    }
}

@media (max-width: 360px) {
    .grid-cell {
        width: 35px;
        height: 35px;
    }
}

使用 iFlow CLI 功能

在开发过程中,使用了以下 iFlow CLI 功能:

1. 任务管理

  • 使用 todo_write 工具规划和追踪开发任务

  • 将复杂任务分解为9个子任务,系统化完成开发

2. 文件创建

  • 使用 write_file 工具创建完整的HTML游戏文件

  • 单文件包含所有HTML、CSS、JavaScript代码

3. 系统操作

  • 使用 run_shell_command 工具在浏览器中打开游戏进行测试

  • 使用 Invoke-Item 命令启动默认浏览器

4. 文件读取

  • 使用 read_file 工具检查现有文件内容

实现过程

第一步:需求分析与规划

根据需求文档,分析游戏核心要素:

  • 主题:马年新春消消乐

  • 玩法:拖拽串联消除

  • 模式:关卡模式和限时模式

  • 特色:道具系统、特殊红包、关卡祝福

第二步:任务分解

使用 todo_write 创建任务列表:

  1. 创建HTML游戏文件结构和基础布局

  2. 实现红包网格系统和拖拽交互逻辑

  3. 实现消除逻辑和得分计算系统

  4. 实现道具系统(祥马炸弹、福马连线)

  5. 实现关卡模式和限时模式

  6. 添加视觉特效(消除、烟花、红包掉落)

  7. 实现本地缓存和进度保存

  8. 优化响应式布局和移动端适配

  9. 测试游戏功能和修复问题

第三步:核心功能开发

界面设计

  • 启动界面:游戏标题、网格预览、模式选择、开始按钮

  • 游戏界面:得分面板、网格区域、道具栏、控制按钮

  • 结算界面:得分面板、等级显示、祝福语、功能按钮

拖拽交互

  • PC端:监听mousedown、mousemove、mouseup事件

  • 移动端:监听touchstart、touchmove、touchend事件

  • 路径判断:只允许横向或纵向直线移动

  • 图案验证:所有选中的红包图案必须相同

消除逻辑

  • 最少3个相同红包才能消除

  • 消除后红包从上方掉落填充

  • 新红包从顶部随机生成

  • 特殊红包双倍积分

道具实现

  • 祥马炸弹:随机选择位置,消除3×3范围

  • 福马连线:查找两个相同图案,强制消除

  • 道具随机掉落:消除时有5%概率获得

第四步:特效系统开发

消除特效

  • 金色光效扩散动画

  • 碎片飞散效果

  • 根据消除数量调整特效华丽度

道具特效

  • 炸弹:红色光效扩散

  • 连线:金色线条连接两个红包

节日特效

  • 烟花:12个粒子向四周扩散

  • 祥云背景:缓慢飘动

  • 特殊红包:脉冲发光效果

第五步:关卡与模式设计

关卡模式

  • 10个关卡,难度递增

  • 网格大小:5×5 → 6×6

  • 图案数量:4种 → 6种

  • 目标积分:100 → 600

  • 3次失误机会

限时模式

  • 60秒倒计时

  • 无失误限制

  • 等级评定:

    • 福马级:< 100分

    • 祥马级:100-200分

    • 瑞马级:> 200分

祝福语系统

  • 每关通关显示专属祝福语

  • 限时模式根据等级显示不同祝福

第六步:优化与完善

性能优化

  • 减少DOM操作频率

  • 使用CSS3 transform替代left/top

  • 动态清理过期特效元素

兼容性优化

  • 支持触摸事件(移动端)

  • 支持鼠标事件(PC端)

  • 防止默认拖拽行为

  • 触摸事件添加passive: false

体验优化

  • 添加暂停功能

  • 音效开关(视觉标识)

  • 道具使用反馈

  • 进度条实时更新

第七步:测试与验证

  • 在默认浏览器中打开游戏测试

  • 验证拖拽交互流畅性

  • 测试消除逻辑准确性

  • 检查道具功能完整性

  • 验证关卡和限时模式

  • 测试本地存储功能

  • 检查响应式布局效果

游戏界面展示

启动界面

  • 顶部:游戏标题"马年接福·红包消消乐"(金色书法字体)

  • 中间:5×5网格预览,展示6种红包图案

  • 模式选择:关卡模式和限时模式两个按钮

  • 底部:开始按钮和玩法提示

游戏界面

  • 顶部栏:得分、关卡/时间、音效开关、暂停按钮

  • 进度区域:关卡模式显示进度条和生命值

  • 中央网格:5×5或6×6红包网格,支持拖拽

  • 道具栏:祥马炸弹和福马连线两个道具

  • 底部按钮:重新开始、返回主页

结算界面

  • 背景:红包飘落特效

  • 中央:结算面板(红底金边)

  • 显示:最终得分、等级/通关状态、获得道具数量

  • 底部:继续闯关、切换模式、分享好友、返回主页

马到成功彩蛋

  • 金色背景弹窗

  • “马到成功!双倍积分 + 获得道具!”

  • 全屏烟花特效

游戏规则详解

消除规则

  • 最小消除:至少3个相同图案的红包

  • 移动限制:只支持横向或纵向直线串联

  • 图案一致:所有选中的红包图案必须相同

  • 高亮提示:选中的红包会高亮显示

得分规则

  • 基础得分

    • 3个相同:10分

    • 4个相同:25分

    • 5个及以上:50分 + 每多1个加10分

  • 特殊红包:得分翻倍(5%概率生成)

  • 道具得分

    • 祥马炸弹:每个红包额外加2分

    • 福马连线:消除得分翻倍

道具获取

  • 随机掉落:消除时有5%概率获得道具

  • 特殊红包:消除特殊红包有50%概率获得道具

  • 无使用限制:道具使用次数无限制

关卡模式规则

  • 目标:达到关卡指定积分

  • 失误:拖动无法消除视为1次失误

  • 生命值:每关3次失误机会

  • 失败:失误次数用完则挑战失败

  • 通关:完成目标进入下一关

限时模式规则

  • 时间:60秒限时挑战

  • 失误:无失误限制

  • 等级评定

    • 福马级:< 100分

    • 祥马级:100-200分

    • 瑞马级:> 200分

红包图案

  • :horse_face: 小马:马年专属图案

  • 福字:新春祝福

  • :coin: 元宝:财富象征

  • :red_paper_lantern: 灯笼:节日喜庆

  • :firecracker: 鞭炮:热闹氛围

  • :cherry_blossom: 梅花:冬日美景

在线体验

移动端适配

游戏已完全适配移动端:

  • 支持触摸拖拽操作

  • 网格尺寸自适应屏幕

  • 竖屏布局优化

  • 兼容微信内置浏览器

项目总结

技术亮点

  1. 零依赖:纯原生开发,无需任何框架或库

  2. 轻量级:单个HTML文件包含所有代码,易于部署

  3. 高性能:优化的拖拽和消除逻辑,流畅运行

  4. 离线可用:支持本地存储,无需网络即可游玩

  5. 响应式:完美适配PC、平板、手机等多种设备

  6. 双模式:关卡模式和限时模式,满足不同玩家需求

创新点

  1. 传统与现代结合:将春节传统习俗与现代消消乐玩法结合

  2. 道具破局系统:祥马炸弹和福马连线,解决消除困境

  3. 特殊红包彩蛋:双倍积分+道具掉落,增加惊喜感

  4. 关卡祝福系统:每关通关显示专属马年祝福语

  5. 等级评定机制:限时模式根据得分评定等级,增加成就感

游戏平衡性

  1. 难度递进:关卡模式10关难度逐步提升

  2. 道具平衡:道具随机掉落,避免滥用

  3. 积分合理:消除数量与积分成正比

  4. 特殊限制:5%特殊红包概率,保持稀有性

开发心得

通过《马年接福·红包消消乐》的开发,我深刻体会到:

  1. 交互设计的重要性:拖拽交互的流畅性直接影响游戏体验,需要仔细处理各种边界情况

  2. 算法优化的价值:消除逻辑、掉落算法等核心逻辑需要高效实现,避免性能问题

  3. 视觉反馈的必要性:消除特效、选中高亮等视觉反馈能大大提升游戏品质

  4. 平衡性的艺术:游戏难度、道具获取率、积分设置等需要精心平衡

  5. 用户体验至上:在技术实现的同时,始终关注用户的操作体验和感受

  6. 响应式设计的挑战:不同设备尺寸的适配需要仔细设计和测试

  7. 单文件开发的优势:所有代码在一个文件中,便于部署和分享

这款游戏不仅实现了所有需求功能,还通过丰富的视觉特效、流畅的交互体验和合理的游戏平衡,为玩家带来了新春佳节的欢乐氛围。游戏简单易上手,又有足够的挑战性,适合全年龄段用户,完美契合"接福纳祥"的主题。

希望这款游戏能够为马年增添一份喜庆和欢乐,让玩家在消除红包的过程中感受到新春的快乐和祝福!


项目名称:马年接福·红包消消乐
开发工具:iFlow CLI
开发时间:2026年2月
项目类型:HTML5 益智消消乐游戏
技术栈:HTML5 + CSS3 + JavaScript
游戏模式:关卡模式 + 限时模式
支持设备:PC端、移动端、平板

1 个赞

似乎应该说明一下规则?比如只能拖拽三个以上的才算成功,还有如何积分的hhh

优化啦!添加了!首页也有哦!

1 个赞

哇!好有意思,玩法挺不错的,完成度不错的休闲小游戏。
希望后续可以优化一下,如果检测到没有可连线的提示一下吧

1 个赞

+1!

颜色如果也能调整一下就好了,玩了几关后再抬头感觉天黑了 :rofl:

优化啦 现在支持没有连线的了 弹出重组提示 可以继续玩哦

2 个赞

颜色吗…我不太确定要什么样的

但是也让 ai 改善了一下

提示词:index.html 如果检测到没有可连线的提示一下吧(支持重组 免费重组 无限次 颜色如果也能调整一下就好了

1 个赞

可以可以

1 个赞

哈哈哈就是太红了 长时间盯着伤眼睛,虽然过年不兴绿色,但以后可以做个护眼版摸鱼玩hhh