当前位置:首页 > JavaScript

js实现迷宫游戏

2026-01-30 18:35:52JavaScript

实现迷宫游戏的基本思路

迷宫游戏的核心包括迷宫生成、玩家移动控制和碰撞检测。以下是使用JavaScript实现的基本步骤。

迷宫生成算法

深度优先搜索(DFS)是常用的迷宫生成算法。通过递归或栈实现随机路径生成,确保迷宫有解。

js实现迷宫游戏

function generateMaze(width, height) {
    const grid = Array(height).fill().map(() => Array(width).fill(1));
    const stack = [];
    const start = { x: 1, y: 1 };
    grid[start.y][start.x] = 0;
    stack.push(start);

    while (stack.length) {
        const current = stack.pop();
        const neighbors = getUnvisitedNeighbors(current, grid);
        if (neighbors.length) {
            stack.push(current);
            const next = neighbors[Math.floor(Math.random() * neighbors.length)];
            grid[next.y][next.x] = 0;
            stack.push(next);
        }
    }
    return grid;
}

function getUnvisitedNeighbors(cell, grid) {
    const dirs = [[0, 2], [2, 0], [0, -2], [-2, 0]];
    return dirs.map(([dx, dy]) => ({ x: cell.x + dx, y: cell.y + dy }))
        .filter(next => 
            next.x > 0 && next.y > 0 && 
            next.x < grid[0].length - 1 && 
            next.y < grid.length - 1 && 
            grid[next.y][next.x] === 1
        );
}

渲染迷宫到Canvas

使用HTML Canvas绘制迷宫,1表示墙,0表示通路。

js实现迷宫游戏

function drawMaze(ctx, maze, cellSize) {
    ctx.fillStyle = 'black';
    for (let y = 0; y < maze.length; y++) {
        for (let x = 0; x < maze[y].length; x++) {
            if (maze[y][x] === 1) {
                ctx.fillRect(x * cellSize, y * cellSize, cellSize, cellSize);
            }
        }
    }
}

玩家控制与移动

监听键盘事件控制玩家移动,并检测是否碰撞墙壁。

const player = { x: 1, y: 1, size: 10 };
document.addEventListener('keydown', (e) => {
    const prevPos = { ...player };
    if (e.key === 'ArrowUp') player.y--;
    if (e.key === 'ArrowDown') player.y++;
    if (e.key === 'ArrowLeft') player.x--;
    if (e.key === 'ArrowRight') player.x++;

    // 碰撞检测
    if (maze[player.y][player.x] === 1) {
        Object.assign(player, prevPos);
    }
    redraw();
});

完整示例代码

整合生成、渲染和控制逻辑的完整示例:

<!DOCTYPE html>
<html>
<body>
<canvas id="mazeCanvas" width="400" height="400"></canvas>
<script>
    const canvas = document.getElementById('mazeCanvas');
    const ctx = canvas.getContext('2d');
    const cellSize = 20;
    const maze = generateMaze(20, 20);
    const player = { x: 1, y: 1, size: cellSize / 2 };

    function redraw() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        drawMaze(ctx, maze, cellSize);
        ctx.fillStyle = 'red';
        ctx.fillRect(
            player.x * cellSize + (cellSize - player.size) / 2,
            player.y * cellSize + (cellSize - player.size) / 2,
            player.size,
            player.size
        );
    }

    document.addEventListener('keydown', (e) => {
        const prevPos = { ...player };
        if (e.key === 'ArrowUp') player.y--;
        if (e.key === 'ArrowDown') player.y++;
        if (e.key === 'ArrowLeft') player.x--;
        if (e.key === 'ArrowRight') player.x++;

        if (maze[player.y][player.x] === 1) {
            Object.assign(player, prevPos);
        }
        redraw();
    });

    redraw();
</script>
</body>
</html>

扩展功能建议

  • 终点检测:设置终点坐标,当玩家到达时触发胜利条件。
  • 动画效果:使用requestAnimationFrame平滑移动。
  • 难度调整:通过修改迷宫尺寸或算法复杂度调整难度。

通过以上步骤,可以实现一个基础的迷宫游戏,并根据需求进一步扩展功能。

标签: 迷宫游戏
分享给朋友:

相关文章

如何用java做游戏

如何用java做游戏

使用Java开发游戏的基本方法 Java是一种跨平台的编程语言,适合开发2D游戏甚至简单的3D游戏。以下是使用Java开发游戏的主要方法和工具。 选择游戏开发框架 Java游戏开发通常依赖以下框架或…

react如何实现游戏上号器

react如何实现游戏上号器

React 实现游戏上号器的关键步骤 技术选型与架构设计 使用 React 作为前端框架,结合 TypeScript 增强类型安全。后端可采用 Node.js + Express 或 Python F…

css制作游戏页面

css制作游戏页面

CSS制作游戏页面 制作游戏页面需要结合CSS的布局、动画和交互特性。以下是一些关键方法和技巧: 布局设计 使用Flexbox或Grid布局创建游戏界面的基础结构。Flexbox适合简单的一维布局,…

js实现迷宫

js实现迷宫

JavaScript 实现迷宫 在 JavaScript 中实现迷宫通常涉及迷宫生成算法和可视化。以下是两种常见的迷宫生成方法及其实现代码: 深度优先搜索(DFS)算法 DFS 是一种递归算法,通过…

java游戏如何运行

java游戏如何运行

Java 游戏的运行方法 Java 游戏通常以 JAR 文件或类文件形式分发,运行方式取决于游戏的分发形式和运行环境。 通过 JAR 文件运行 确保已安装 Java 运行时环境(JRE)或开发工具…

uniapp游戏源码

uniapp游戏源码

uniapp游戏源码获取途径 开源平台搜索 在GitHub、Gitee等开源平台搜索关键词如uniapp game或uniapp 游戏源码,可找到俄罗斯方块、贪吃蛇等经典游戏的示例项目。例如GitHu…