首页
学习
活动
专区
圈层
工具
发布

扫雷js代码

扫雷游戏的JavaScript实现涉及前端开发中的HTML、CSS和JavaScript三个主要部分。下面是一个简单的扫雷游戏的实现示例:

HTML部分

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>扫雷游戏</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div id="game-board"></div>
    <script src="script.js"></script>
</body>
</html>

CSS部分(styles.css)

代码语言:txt
复制
#game-board {
    display: grid;
    grid-template-columns: repeat(10, 30px);
    gap: 2px;
}

.cell {
    width: 30px;
    height: 30px;
    background-color: #ddd;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
}

.cell.revealed {
    background-color: #fff;
}

.cell.mine {
    background-color: red;
}

.cell.number {
    font-weight: bold;
}

JavaScript部分(script.js)

代码语言:txt
复制
const boardSize = 10;
const mineCount = 10;

function createBoard() {
    const gameBoard = document.getElementById('game-board');
    gameBoard.innerHTML = '';
    gameBoard.style.gridTemplateColumns = `repeat(${boardSize}, 30px)`;

    const board = Array.from({ length: boardSize }, () => Array(boardSize).fill(0));
    const mines = new Set();

    while (mines.size < mineCount) {
        const x = Math.floor(Math.random() * boardSize);
        const y = Math.floor(Math.random() * boardSize);
        mines.add(`${x},${y}`);
    }

    mines.forEach(pos => {
        const [x, y] = pos.split(',').map(Number);
        board[x][y] = -1;
        for (let i = -1; i <= 1; i++) {
            for (let j = -1; j <= 1; j++) {
                const newX = x + i;
                const newY = y + j;
                if (newX >= 0 && newX < boardSize && newY >= 0 && newY < boardSize && board[newX][newY] !== -1) {
                    board[newX][newY]++;
                }
            }
        }
    });

    board.forEach((row, x) => {
        row.forEach((cell, y) => {
            const cellElement = document.createElement('div');
            cellElement.classList.add('cell');
            cellElement.dataset.x = x;
            cellElement.dataset.y = y;
            cellElement.addEventListener('click', () => revealCell(x, y));
            gameBoard.appendChild(cellElement);
        });
    });
}

function revealCell(x, y) {
    const cell = document.querySelector(`.cell[data-x="${x}"][data-y="${y}"]`);
    if (cell.classList.contains('revealed')) return;

    cell.classList.add('revealed');

    if (board[x][y] === -1) {
        cell.classList.add('mine');
        alert('Game Over!');
        createBoard();
        return;
    }

    if (board[x][y] > 0) {
        cell.classList.add('number');
        cell.textContent = board[x][y];
        return;
    }

    for (let i = -1; i <= 1; i++) {
        for (let j = -1; j <= 1; j++) {
            const newX = x + i;
            const newY = y + j;
            if (newX >= 0 && newX < boardSize && newY >= 0 && newY < boardSize) {
                revealCell(newX, newY);
            }
        }
    }
}

createBoard();

基础概念

  • HTML: 用于构建网页的结构。
  • CSS: 用于设置网页的样式。
  • JavaScript: 用于实现网页的交互逻辑。

优势

  • 简单直观: 用户界面简洁,易于上手。
  • 教育意义: 可以帮助初学者理解基本的编程概念,如数组、事件处理等。
  • 趣味性: 游戏本身具有一定的挑战性和娱乐性。

类型

  • 经典扫雷: 如上所示,玩家需要在一个网格中找出所有非雷区格子。
  • 扩展版本: 可能包括计时、难度选择、排行榜等功能。

应用场景

  • 教育工具: 帮助学习编程基础。
  • 休闲娱乐: 在网页上提供简单的游戏体验。

遇到的问题及解决方法

  1. 格子点击无反应:
    • 原因: 可能是事件监听器未正确绑定或JavaScript代码中有错误。
    • 解决方法: 检查addEventListener是否正确调用,并确保JavaScript代码无误。
  • 格子显示不正确:
    • 原因: 可能是数组索引错误或CSS样式问题。
    • 解决方法: 检查数组索引是否正确,并确保CSS样式应用无误。

通过上述代码和解释,你可以构建一个基本的扫雷游戏,并理解其背后的原理和技术实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的文章

领券