HTML 五子棋实现方法

基础结构 使用HTML创建棋盘网格,CSS美化样式,JavaScript处理游戏逻辑。

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <style>
        #board {
            display: grid;
            grid-template-columns: repeat(15, 30px);
            grid-template-rows: repeat(15, 30px);
            gap: 1px;
            background: #000;
            padding: 5px;
        }
        .cell {
            width: 30px;
            height: 30px;
            background: #f0d9b5;
            cursor: pointer;
        }
        .black { background: black; border-radius: 50%; }
        .white { background: white; border-radius: 50%; }
    </style>
</head>
<body>
    <div id="board"></div>
    <script>
        const board = document.getElementById('board');
        let currentPlayer = 'black';

        // 初始化棋盘
        for (let i = 0; i < 15*15; i++) {
            const cell = document.createElement('div');
            cell.className = 'cell';
            cell.addEventListener('click', handleClick);
            board.appendChild(cell);
        }

        function handleClick(e) {
            if (e.target.classList.contains('black') || 
                e.target.classList.contains('white')) return;
            
            e.target.classList.add(currentPlayer);
            checkWin();
            currentPlayer = currentPlayer === 'black' ? 'white' : 'black';
        }

        function checkWin() {
            // 这里需要实现胜负判断逻辑
        }
    </script>
</body>
</html>
 

关键功能扩展

胜负判断逻辑checkWin()函数中添加以下算法检测五子连珠:

javascript 复制代码
function checkWin() {
    const cells = document.querySelectorAll('.cell');
    const size = 15;
    const index = Array.from(cells).indexOf(event.target);
    const row = Math.floor(index / size);
    const col = index % size;

    const directions = [
        [0, 1],   // 水平
        [1, 0],    // 垂直
        [1, 1],    // 对角线
        [1, -1]    // 反对角线
    ];

    for (const [dx, dy] of directions) {
        let count = 1;
        
        // 正向检查
        for (let i = 1; i < 5; i++) {
            const newRow = row + i * dx;
            const newCol = col + i * dy;
            if (newRow >= 0 && newRow < size && newCol >= 0 && newCol < size) {
                const checkIndex = newRow * size + newCol;
                if (cells[checkIndex].classList.contains(currentPlayer)) {
                    count++;
                } else break;
            }
        }

        // 反向检查
        for (let i = 1; i < 5; i++) {
            const newRow = row - i * dx;
            const newCol = col - i * dy;
            if (newRow >= 0 && newRow < size && newCol >= 0 && newCol < size) {
                const checkIndex = newRow * size + newCol;
                if (cells[checkIndex].classList.contains(currentPlayer)) {
                    count++;
                } else break;
            }
        }

        if (count >= 5) {
            alert(`${currentPlayer} wins!`);
            location.reload();
        }
    }
}
 

功能优化建议

添加游戏状态显示 在HTML中添加显示当前玩家的元素:

html 复制代码
<div id="status">Current: Black</div>
 

JavaScript中更新状态显示:

javascript 复制代码
const statusDisplay = document.getElementById('status');
// 在切换玩家时添加:
statusDisplay.textContent = `Current: ${currentPlayer === 'black' ? 'Black' : 'White'}`;
 

增加重新开始按钮 在HTML中添加按钮:

html 复制代码
<button id="restart">Restart</button>
 

JavaScript中添加事件监听:

javascript 复制代码
document.getElementById('restart').addEventListener('click', () => {
    location.reload();
});
 
相关推荐
墨痕诉清风2 分钟前
Web浏览器客户端检测网站网络健康(代码)
前端·网络·测试工具
IMPYLH5 分钟前
Linux 的 wc 命令
linux·运维·服务器·前端·bash
happybasic21 分钟前
Python库升级标准流程~
linux·前端·python
川冰ICE27 分钟前
前端工程化深度实战:从Webpack5到Vite5的构建工具演进与选型决策
前端
CDwenhuohuo28 分钟前
优惠券组件直接用 uview plus
前端·javascript·vue.js
用户740904723627535 分钟前
我用 curl 排查了一次 OpenAI-compatible API 连接失败:401、403、404 分别怎么定位
前端
kft131443 分钟前
XSS深度剖析:从弹窗到持久化窃取Cookie
前端·web安全·xss·安全测试
烬羽1 小时前
《前端三权分立:HTML、CSS、JS为什么不能“乱搞”》
前端
恋爱脑1 小时前
vue自定义指令封装-是否点击当前元素以外区域
前端
川冰ICE1 小时前
TypeScript装饰器与元编程实战
前端·javascript·typescript