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 小时前
开源 Claude Code + Codex + 面板 的未来vibecoding平台
前端·后端·github
lyrieek3 小时前
pgadmin的导出图实现,还在搞先美容后拍照再恢复?
前端
永远是我的最爱3 小时前
基于.NET的小小便利店前台收银系统
前端·sqlserver·.net·visual studio
从文处安3 小时前
「九九八十一难」第一难:前端数据mock指南(TS + VUE)
前端
Zhencode3 小时前
Vue3 响应式依赖收集与更新之effect
前端·vue.js
x-cmd3 小时前
[x-cmd] jsoup 1.22.1 版本发布,引入 re2j 引擎,让 HTML 解析更安全高效
前端·安全·html·x-cmd·jsoup
天下代码客3 小时前
使用electronc框架调用dll动态链接库流程和避坑
前端·javascript·vue.js·electron·node.js
weixin199701080164 小时前
【性能提升300%】仿1688首页的Webpack优化全记录
前端·webpack·node.js
冰暮流星4 小时前
javascript之数组
java·前端·javascript
晚霞的不甘4 小时前
Flutter for OpenHarmony天气卡片应用:用枚举与动画打造沉浸式多城市天气浏览体验
前端·flutter·云原生·前端框架