当前位置:首页 > JavaScript

js实现迷宫游戏

2026-04-04 10:19:18JavaScript

使用JavaScript实现迷宫游戏

基本思路

迷宫游戏的核心是生成迷宫地图、处理玩家移动以及判断胜利条件。可以通过HTML5 Canvas或DOM元素渲染迷宫,用键盘事件控制玩家移动。

迷宫生成算法

深度优先搜索(DFS)是常用的迷宫生成算法,递归回溯实现简单:

function generateMaze(width, height) {
  const grid = Array(height).fill().map(() => Array(width).fill(1));
  const stack = [];
  const startX = 1, startY = 1;
  grid[startY][startX] = 0;
  stack.push([startX, startY]);

  while (stack.length) {
    const [x, y] = stack[stack.length - 1];
    const directions = [[1, 0], [-1, 0], [0, 1], [0, -1]]
      .map(([dx, dy]) => [x + dx * 2, y + dy * 2])
      .filter(([nx, ny]) => nx > 0 && nx < width - 1 && ny > 0 && ny < height - 1 && grid[ny][nx] === 1);

    if (directions.length) {
      const [nx, ny] = directions[Math.floor(Math.random() * directions.length)];
      grid[ny][nx] = 0;
      grid[(y + ny) / 2][(x + nx) / 2] = 0;
      stack.push([nx, ny]);
    } else {
      stack.pop();
    }
  }
  return grid;
}

渲染迷宫

使用Canvas绘制迷宫和玩家:

const canvas = document.getElementById('maze');
const ctx = canvas.getContext('2d');
const cellSize = 20;

function drawMaze(maze) {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  maze.forEach((row, y) => {
    row.forEach((cell, x) => {
      ctx.fillStyle = cell === 1 ? '#000' : '#fff';
      ctx.fillRect(x * cellSize, y * cellSize, cellSize, cellSize);
    });
  });
}

玩家控制

监听键盘事件移动玩家:

let player = { x: 1, y: 1 };
const maze = generateMaze(21, 21);

document.addEventListener('keydown', (e) => {
  const moves = { 
    ArrowUp: [0, -1], ArrowDown: [0, 1], 
    ArrowLeft: [-1, 0], ArrowRight: [1, 0] 
  };
  const [dx, dy] = moves[e.key] || [0, 0];
  const newX = player.x + dx, newY = player.y + dy;

  if (maze[newY]?.[newX] === 0) {
    player = { x: newX, y: newY };
    drawPlayer();
    checkWin();
  }
});

function drawPlayer() {
  ctx.fillStyle = 'red';
  ctx.fillRect(player.x * cellSize, player.y * cellSize, cellSize, cellSize);
}

胜利条件

当玩家到达终点时触发胜利:

js实现迷宫游戏

function checkWin() {
  if (player.x === maze[0].length - 2 && player.y === maze.length - 2) {
    alert('You Win!');
  }
}

完整实现步骤

  1. 创建HTML文件包含Canvas元素
  2. 实现迷宫生成算法
  3. 添加Canvas渲染逻辑
  4. 实现键盘控制玩家移动
  5. 添加胜利条件检测

优化方向

  • 添加动画效果
  • 实现多关卡系统
  • 增加计时功能
  • 添加移动设备触摸控制

这种实现方式可以扩展为更复杂的迷宫游戏,包括敌人、道具等游戏元素。核心在于迷宫数据的表示和玩家位置的更新逻辑。

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

相关文章

css制作游戏

css制作游戏

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

js实现迷宫

js实现迷宫

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

安卓如何玩java游戏

安卓如何玩java游戏

安卓设备运行Java游戏的方法 由于安卓系统原生不支持传统的J2ME(Java 2 Micro Edition)游戏,需要通过模拟器或转换工具实现兼容。以下是具体实现方案: 使用J2ME模拟器 J2…

uniapp 3d游戏

uniapp 3d游戏

Uniapp 开发3D游戏的方法 Uniapp 本身是基于 Vue.js 的跨平台开发框架,主要用于开发移动应用和小程序。虽然 Uniapp 原生不支持 3D 游戏开发,但可以通过集成第三方引擎或库来…

uniapp游戏场景

uniapp游戏场景

uniapp游戏场景开发方法 uniapp虽然主要用于跨平台应用开发,但通过合理利用其能力和第三方库,可以实现简单的游戏场景。以下是几种常见方法: 使用Canvas绘制 uniapp支持Canvas…

vue实现对战游戏

vue实现对战游戏

Vue 实现对战游戏的步骤 项目初始化与基础配置 使用 Vue CLI 或 Vite 创建项目,安装必要依赖如 Vue Router、Pinia(状态管理)和动画库(如 GSAP 或 Anime.js…