五子棋

双人/简易 AI 对战

416 次访问

五子棋 AI 对战

轮到黑棋(你)

关于本工具

了解工具定位 · 使用场景 · 对比优势

在棋盘上交替落子,先连成五子的一方获胜。适合两人同屏对弈,或与内置 AI 练习棋感。所有逻辑在浏览器内运行,棋局不离开你的设备。

使用场景

🎲

等车消遣对局

通勤路上、排队等候时,打开五子棋与朋友或AI来一局。无需等待匹配,无需联网,双人模式下两人轮流落子,AI模式可随时调整难度。一局3-5分钟,节奏紧凑,适合碎片时间打发,比刷短视频更有参与感。

🧠

AI战术练习

想提升五子棋水平但找不到陪练?简易AI提供稳定、可重复的对手。通过反复对局,观察AI的防守策略与进攻线路,练习活三冲四的布局技巧。AI不会疲劳,可以随时复盘上一手,适合新手系统锻炼棋感。

👨‍👩‍👧

亲子益智互动

家长带孩子玩五子棋,用双人模式轮流落子,边下边讲解规则:连成五子即胜、堵住对方的活三。棋盘清晰无干扰,孩子能直观理解空间连接与预判。一局时间短,适合6岁以上儿童入门逻辑思维训练。

🖥️

远程双人娱乐

朋友不在身边?用同一台电脑或手机,双人模式轮流操作即可对弈。无需注册账号、无需分享屏幕,打开网页即玩。适合视频通话时同步开一局,增加互动乐趣,比纯聊天更有话题。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (五子棋大师)传统方法
AI 对手强度简易 AI,适合新手入门多级 AI,含高级算法无 AI,需真人对手
数据隐私纯浏览器,零上传需下载安装,本地运行线下棋盘,完全离线
处理速度即时响应即时响应即时响应
离线可用依赖网络加载安装后完全离线完全离线
平台兼容浏览器,跨平台仅限 Windows/Android实体棋盘,无平台限制
收费免费基础免费,高级功能付费需购买棋盘棋子
注册无需注册无需注册无需注册

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 选择模式:点击「双人对战」或「AI 对战」按钮开始游戏
  2. 轮流点击棋盘交叉点落子,黑棋先手,白棋后手
  3. 任意一方在横、竖、斜方向连成五子即获胜,棋盘自动判定并显示结果
  4. 点击「重新开局」按钮清空棋盘,开始新一局

输入输出示例8 个典型场景,覆盖常规、边界与易错

输入输出说明
双人模式:黑棋(7,7),白棋(7,8),黑棋(8,8),白棋(8,7),黑棋(9,9)黑棋五子连珠((7,7)→(8,8)→(9,9)→(10,10)→(11,11) 未完成),白棋无胜,游戏继续典型双人对战:演示斜线连珠判断
AI 模式(简单难度):黑棋(5,5),AI 白棋自动落子AI 白棋落子 (5,6) 或 (4,5) 或 (6,5)(随机简单防守)典型 AI 对战:简单难度下 AI 随机防守
双人模式:黑棋(0,0),白棋(0,1),黑棋(0,2),白棋(0,3),黑棋(0,4)黑棋获胜(五子连珠:第 0 行第 0-4 列)边界 case:棋盘边缘水平连珠
双人模式:黑棋(14,14),白棋(14,13),黑棋(14,12),白棋(14,11),黑棋(14,10)黑棋获胜(五子连珠:第 14 行第 10-14 列)边界 case:棋盘另一侧边缘连珠
双人模式:黑棋(7,7),白棋(7,8),黑棋(8,8),白棋(8,7),黑棋(9,9),白棋(9,8),黑棋(10,10),白棋(10,9),黑棋(11,11)黑棋获胜(五子连珠:主对角线 (7,7)→(8,8)→(9,9)→(10,10)→(11,11))边界 case:长连珠(超过5子)仍算获胜
AI 模式(困难难度):黑棋(7,7),AI 白棋自动落子AI 白棋落子 (7,8) 或 (8,7) 或 (6,7) 或 (7,6)(防守黑棋活二)易错 case:困难 AI 会主动防守活二
双人模式:黑棋(7,7),白棋(7,7)无效落子:该位置已有棋子易错 case:重复点击同一格
双人模式:黑棋(-1,5)无效落子:坐标超出棋盘范围(0-14)边界 case:输入负坐标

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 误以为 AI 难度可调

错误
点击「开始游戏」后,发现 AI 太强或太弱,四处寻找「难度」或「等级」设置。
修复
当前 AI 为固定难度(简易级),仅提供基础防守和随机进攻。如需调整,可切换至「双人模式」自行控制双方水平。

简易 AI 对战模式不提供难度选项,AI 行为是写死的。用户期望可调节,但工具实现未包含该功能。

2. 在 AI 模式下尝试「悔棋」

错误
AI 落子后,点击「悔棋」按钮,发现只能撤回自己的上一步,AI 的落子并未撤销。
修复
悔棋功能仅作用于当前玩家(人类)的上一步操作,AI 的落子不会被撤销。如需重新开始,请使用「重新开局」按钮。

悔棋逻辑只记录人类玩家的落子历史,AI 的决策不参与撤销队列。这是实现简化,并非 Bug。

3. 双人模式误判「谁先手」

错误
黑方落子后,白方等待黑方再次落子,误以为「双人」是轮流在同一设备上操作,但未注意当前轮到哪一方。
修复
界面会高亮显示当前执子颜色(黑/白),并在状态栏提示「黑方落子」或「白方落子」。请根据提示操作。

双人模式下没有自动切换提示音或闪烁,仅靠 UI 文字和颜色区分。用户容易忽略状态栏变化。

4. 在棋盘边缘落子后无法继续

错误
将棋子落在棋盘最边角(如 A1 或 O15),后续 AI 或对手落子后,自己找不到可落子的有效位置。
修复
五子棋棋盘为 15×15,边角位置合法。若所有格子被填满仍无五子连珠,则判定为平局。

用户误以为边角是「无效区域」,实际上棋盘无禁手规则,所有交叉点均可落子。平局是正常结局。

5. 误以为「禁手」规则存在

错误
黑方下出「双活三」或「长连」后,系统未提示违规,用户认为工具存在 Bug。
修复
本工具不实现禁手规则。黑方可以下双活三、四四、长连(超过五子)等,均视为合法落子。

标准五子棋竞赛(如 RIF 规则)有禁手,但本工具为简易对战,完全开放所有落子位置。

6. AI 模式下连续点击同一位置

错误
AI 落子后,用户快速多次点击同一个空位,发现棋子被重复放置或界面卡顿。
修复
每次落子后需等待 AI 响应(约 0.5-1 秒),期间点击无效。请勿连续点击同一位置。

前端防抖机制会忽略 AI 思考期间的点击事件,但用户感知为「无反应」,误以为工具卡死。

7. 双人模式使用「AI 落子」按钮

错误
在双人模式下点击「AI 落子」按钮,期望 AI 帮当前玩家走一步,但按钮无反应或报错。
修复
「AI 落子」按钮仅在 AI 对战模式下可用。双人模式下该按钮应被禁用或隐藏。

UI 未明确区分模式,用户可能误按。工具应通过禁用状态或文字提示来避免混淆。

8. 误以为可以「复盘」历史对局

错误
对局结束后,点击棋盘上的棋子想查看落子顺序,但无法拖动或回放。
修复
本工具不支持复盘功能。对局结束后,棋盘状态固定为最终局面。如需回顾,请自行截图或记录。

用户期望有「回放」或「逐步查看」功能,但工具实现仅保留最终棋盘,不存储落子序列。

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

评估函数:Score = w1 × (2×连子数 + 活三数) + w2 × 冲四数 - w3 × 对方威胁值

变量说明

  • 连子数 — 当前方向上连续同色棋子数量
  • 活三数 — 两端均无阻挡的三连子数量
  • 冲四数 — 一端受阻的四连子数量
  • 对方威胁值 — 对手下一步能形成五连的评分
  • w1, w2, w3 — 权重系数,通常 w1=10, w2=5, w3=8

示例

棋盘上己方有 1 个活三(连子数=3,活三数=1),1 个冲四(冲四数=1),对方有 1 个活三(威胁值=10)。则 Score = 10×(2×3 + 1) + 5×1 - 8×10 = 10×7 + 5 - 80 = 70 + 5 - 80 = -5。AI 会优先选择评分更高的落子位置。

适用范围

适用于本工具简易 AI 的贪心评估策略,仅考虑局部棋型,不包含全局搜索树。对复杂棋局(如双活三、长连禁手)可能误判,不适用于专业五子棋规则(如三手交换、五手两打)。

原理图

五子棋对战流程玩家落子点击棋盘交叉点胜负判定五子连珠检测显示结果胜利/平局/继续循环未分胜负 → 切换玩家 → 继续落子AI 模式:自动落子AI 走棋逻辑AI 落子完成
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import numpy as np

# 五子棋棋盘 15x15,0=空 1=黑 2=白
board = np.zeros((15, 15), dtype=int)

# 简易 AI:检查是否有连续四子可堵,否则随机落子
def ai_move(board, player=1):
    opponent = 2 if player == 1 else 1
    
    # 检查对手是否有活四或冲四
    for r in range(15):
        for c in range(15):
            if board[r][c] != 0:
                continue
            # 模拟落子后检查是否形成四子
            board[r][c] = opponent
            if check_win(board, opponent):
                board[r][c] = 0
                return (r, c)  # 堵住
            board[r][c] = 0
    
    # 随机落子(简单策略)
    empty = [(r, c) for r in range(15) for c in range(15) if board[r][c] == 0]
    return empty[np.random.randint(len(empty))] if empty else None

def check_win(board, player):
    # 检查四个方向是否有五子连珠
    for r in range(15):
        for c in range(15):
            if board[r][c] != player:
                continue
            # 水平
            if c <= 10 and all(board[r][c+i] == player for i in range(5)):
                return True
            # 垂直
            if r <= 10 and all(board[r+i][c] == player for i in range(5)):
                return True
            # 主对角线
            if r <= 10 and c <= 10 and all(board[r+i][c+i] == player for i in range(5)):
                return True
            # 副对角线
            if r <= 10 and c >= 4 and all(board[r+i][c-i] == player for i in range(5)):
                return True
    return False

# 示例:黑棋下在 (7,7)
board[7][7] = 1
move = ai_move(board, 2)
print(f"AI 落子位置: {move}")  # 输出类似 (7,8)
package main

import (
	"fmt"
	"math/rand"
)

const size = 15

type Board [size][size]int // 0=空 1=黑 2=白

// 检查五子连珠
func checkWin(b *Board, player int) bool {
	dirs := [][2]int{{0, 1}, {1, 0}, {1, 1}, {1, -1}}
	for r := 0; r < size; r++ {
		for c := 0; c < size; c++ {
			if b[r][c] != player {
				continue
			}
			for _, d := range dirs {
				count := 1
				for i := 1; i < 5; i++ {
					nr, nc := r+i*d[0], c+i*d[1]
					if nr < 0 || nr >= size || nc < 0 || nc >= size {
						break
					}
					if b[nr][nc] != player {
						break
					}
					count++
				}
				if count >= 5 {
					return true
				}
			}
		}
	}
	return false
}

// 简易 AI:堵四子或随机
func aiMove(b *Board, player int) (int, int) {
	opponent := 2
	if player == 2 {
		opponent = 1
	}

	// 检查对手是否有活四
	for r := 0; r < size; r++ {
		for c := 0; c < size; c++ {
			if b[r][c] != 0 {
				continue
			}
			b[r][c] = opponent
			if checkWin(b, opponent) {
				b[r][c] = 0
				return r, c
			}
			b[r][c] = 0
		}
	}

	// 随机落子
	var empty [][2]int
	for r := 0; r < size; r++ {
		for c := 0; c < size; c++ {
			if b[r][c] == 0 {
				empty = append(empty, [2]int{r, c})
			}
		}
	}
	if len(empty) == 0 {
		return -1, -1
	}
	move := empty[rand.Intn(len(empty))]
	return move[0], move[1]
}

func main() {
	var board Board
	board[7][7] = 1 // 黑棋下在 (7,7)
	r, c := aiMove(&board, 2)
	fmt.Printf("AI 落子: (%d,%d)\n", r, c) // 输出类似 (7,8)
}
// 五子棋棋盘 15x15,0=空 1=黑 2=白
const SIZE = 15;
const board = Array.from({ length: SIZE }, () => Array(SIZE).fill(0));

// 检查五子连珠
function checkWin(board, player) {
  const dirs = [[0,1],[1,0],[1,1],[1,-1]];
  for (let r = 0; r < SIZE; r++) {
    for (let c = 0; c < SIZE; c++) {
      if (board[r][c] !== player) continue;
      for (const [dr, dc] of dirs) {
        let count = 1;
        for (let i = 1; i < 5; i++) {
          const nr = r + i * dr, nc = c + i * dc;
          if (nr < 0 || nr >= SIZE || nc < 0 || nc >= SIZE) break;
          if (board[nr][nc] !== player) break;
          count++;
        }
        if (count >= 5) return true;
      }
    }
  }
  return false;
}

// 简易 AI:堵四子或随机
function aiMove(board, player) {
  const opponent = player === 1 ? 2 : 1;
  
  // 检查对手是否有活四
  for (let r = 0; r < SIZE; r++) {
    for (let c = 0; c < SIZE; c++) {
      if (board[r][c] !== 0) continue;
      board[r][c] = opponent;
      if (checkWin(board, opponent)) {
        board[r][c] = 0;
        return [r, c];
      }
      board[r][c] = 0;
    }
  }
  
  // 随机落子
  const empty = [];
  for (let r = 0; r < SIZE; r++) {
    for (let c = 0; c < SIZE; c++) {
      if (board[r][c] === 0) empty.push([r, c]);
    }
  }
  return empty[Math.floor(Math.random() * empty.length)] || null;
}

// 示例:黑棋下在 (7,7)
board[7][7] = 1;
const move = aiMove(board, 2);
console.log(`AI 落子: (${move[0]},${move[1]})`); // 输出类似 (7,8)

常见问题

8 个高频疑问

五子棋的简易 AI 有多强?能打得过新手吗?
简易 AI 基于贪心评分算法,会优先防守玩家当前最长连子(活三、冲四),同时尝试自己连五。它的棋力大约相当于刚学会规则、能看出两步威胁的入门玩家。对于完全不懂防守的新手,AI 能轻松获胜;但稍微学过一些基础定式(如活三、冲四、禁手概念)的玩家,就能稳定战胜它。AI 不会使用复杂的 VCT/VCF 战术,也不会主动做棋(制造多个潜在连五点)。适合作为规则练习对手,不适合作为进阶训练。
为什么我明明连了五个子,AI 却没有认输?
本工具采用简易判定逻辑:AI 只在检测到棋盘上存在连续的五个同色棋子(横、竖、斜方向)时才会结束对局并判定胜负。如果连了五个子但界面没有反应,请检查:1)是否超过了五个(六子或以上在标准五子棋中算胜,但本工具只判五子);2)棋子是否完全在棋盘格点上(拖动放置时可能偏移导致未正确落子)。如果确认是五子连珠,刷新页面重新开始一局即可,偶尔是浏览器渲染延迟导致判定未刷新。
这个五子棋支持禁手规则吗?比如三三禁手、四四禁手?
不支持。本工具的双人和简易 AI 模式均采用无禁手规则,即黑棋和白棋都可以下任何位置,没有三三禁手、四四禁手、长连禁手等限制。如果希望练习有禁手的专业规则,建议使用专门的五子棋对战平台(如 QQ 游戏五子棋、弈城等)。本工具的设计初衷是快速开局、随意对战,适合朋友间娱乐或初次接触五子棋的玩家熟悉基本规则。
和 AI 对战的时候能不能悔棋?双人模式可以悔棋吗?
目前两个模式均不支持悔棋功能。落子后立即生效,无法撤销。如果需要纠正错误,只能点击界面上的「重新开局」按钮(通常在棋盘下方或侧边)清空棋盘重新开始。建议在双人模式中双方提前约定好是否允许悔棋,并自行在脑海中记忆;AI 模式则无此选项。未来可能会加入悔棋功能,但目前没有。
为什么我点棋盘没反应?棋子放不上去怎么办?
首先确认是否已经有一方获胜(AI 或玩家获胜后棋盘会锁定,无法继续落子)。如果对局未结束但无法落子,尝试:1)刷新页面(F5 或浏览器刷新按钮),这是最常见的浏览器渲染问题;2)检查是否使用了触屏设备,部分触屏浏览器需要长按或双击才能触发点击事件;3)如果使用手机横屏模式,切换回竖屏再试。本工具为纯前端实现,不依赖网络,刷新后所有数据重置,重新开始即可。
这个五子棋和微信小程序里的五子棋有什么区别?
主要区别:1)本工具直接在浏览器打开即用,无需下载安装或关注公众号,微信小程序需要微信环境;2)本工具只有双人同屏对战和简易 AI 对战两种模式,微信小程序通常包含排位赛、好友联机、段位系统等社交功能;3)本工具无广告、无内购、无用户数据收集,微信小程序通常有广告或付费解锁皮肤/道具;4)本工具棋力较弱(简易 AI),微信小程序通常有多个难度等级(初级到职业级)。适合不想安装 App、只想快速下一局的人。
AI 会不会故意放水?感觉有时候 AI 下得很蠢。
AI 不会故意放水。它的「蠢」是因为评分算法的局限性:AI 每步只评估当前棋盘上所有空位,找出「防守最强威胁」或「进攻最可能连五」的位置。但它不会做长距离的规划,比如不会主动制造「活三+眠三」的复合威胁,也不会计算三步之后的局面。当棋盘上同时出现多个威胁时,AI 可能只防守了其中一个,导致另一个被忽略。这种「顾此失彼」看起来像是故意失误,实际上是算法深度不足的体现。
能不能和电脑 AI 下五子棋的时候选择先手还是后手?
目前不支持手动选择先后手。每次点击「开始新对局」后,AI 随机决定谁先走(约 50% 概率玩家先手,50% 概率 AI 先手)。如果需要固定自己先手,可以反复点击「重新开局」直到玩家先手为止。AI 先手时第一步通常下在棋盘正中央(天元位置),这是最标准的开局。如果希望练习后手防守,可以等待 AI 先手;如果希望练习进攻,可以刷到玩家先手。
选择 打开 +新窗口 esc关闭