You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

o's and x's(井字棋)获胜检测函数无法识别横斜向胜利的优化问题

井字棋获胜检测逻辑修复方案

原有代码问题

  • 对角线判断逻辑存在语法错误:逗号表达式(0, 0), (0, 1), (0, 1)最终仅会取最后一个值作为数组索引,every()方法未传入判断条件,完全无法实现对角线检测
  • 缺少纵向胜利场景的检测逻辑
  • 现有判断逻辑零散,后续维护成本高

优化实现方案

推荐通过枚举所有获胜线坐标的方式实现检测,逻辑统一清晰,覆盖所有横、纵、斜获胜场景,代码如下:

detectWinner = () => {
  // 枚举所有获胜的坐标组合:3横 + 3纵 + 2斜
  const winningLines = [
    // 横向
    [[0,0], [0,1], [0,2]],
    [[1,0], [1,1], [1,2]],
    [[2,0], [2,1], [2,2]],
    // 纵向
    [[0,0], [1,0], [2,0]],
    [[0,1], [1,1], [2,1]],
    [[0,2], [1,2], [2,2]],
    // 对角线
    [[0,0], [1,1], [2,2]],
    [[0,2], [1,1], [2,0]]
  ];

  // 遍历所有获胜线判断是否满足条件
  for (const line of winningLines) {
    const [p1, p2, p3] = line;
    const val1 = board[p1[0]][p1[1]];
    // 第一个位置是空格直接跳过该线
    if (val1 === ' ') continue;
    const val2 = board[p2[0]][p2[1]];
    const val3 = board[p3[0]][p3[1]];
    // 三个位置棋子一致则判定获胜
    if (val1 === val2 && val2 === val3) {
      return true;
    }
  }
  return false;
};

方案优势

  • 一次性覆盖所有8种获胜场景,不会遗漏横、纵、斜任意一种情况
  • 逻辑直观易读,不需要分别处理不同方向的检测规则
  • 不需要依赖JSON序列化对比,性能更优,也避免序列化带来的潜在问题

内容的提问来源于stack exchange,提问作者dcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 17:09:03