当前位置:首页 > JavaScript

js实现迷宫游戏

2026-01-30 18:35:52JavaScript

实现迷宫游戏的基本思路

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

迷宫生成算法

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

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表示通路。

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平滑移动。
  • 难度调整:通过修改迷宫尺寸或算法复杂度调整难度。

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

js实现迷宫游戏

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

相关文章

vue实现猜拳游戏

vue实现猜拳游戏

实现猜拳游戏的基本思路 使用Vue实现猜拳游戏需要设计玩家与电脑的交互逻辑,包括选择手势、随机生成电脑手势、判断胜负以及显示结果。以下是具体实现方法。 创建Vue项目 使用Vue CLI或Vite初…

react如何实现游戏上号器

react如何实现游戏上号器

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

react实现游戏

react实现游戏

React 实现游戏的基本方法 使用 React 实现游戏可以结合其组件化特性和状态管理能力。以下是一些关键步骤和常用库: 选择游戏类型 适合 React 实现的游戏类型包括 2D 游戏、文字冒险游…

css制作游戏

css制作游戏

使用CSS制作游戏的方法 CSS可以结合HTML和JavaScript创建简单的游戏。以下是几种常见的方法和示例: 纯CSS游戏 利用CSS动画和伪类实现交互,无需JavaScript。例如创建一个…

游戏制作css

游戏制作css

CSS 在游戏制作中的应用 CSS 不仅用于网页设计,还可以用于创建简单的浏览器游戏或游戏界面元素。以下是几种利用 CSS 制作游戏的方法和技巧。 使用 CSS 动画制作简单游戏 CSS 动画可…

css制作游戏代码

css制作游戏代码

CSS 制作游戏代码 使用纯 CSS 制作游戏虽然有一定局限性,但可以通过动画、过渡和交互选择器等实现简单的游戏效果。以下是几种常见的 CSS 游戏实现方法: 贪吃蛇游戏 通过键盘事件和 C…