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

如何在C#中实现3*3井字棋获胜组合检测方法

C# 井字棋获胜判定实现

需求说明

  • 基于3*3规格井字棋棋盘开发获胜判定逻辑
  • 两名玩家轮流落子,玩家1先手
  • 获胜条件:同玩家3个标记满足水平、垂直或斜向对齐(匹配示例获胜场景)
  • 方法返回获胜方的3个坐标组合,无获胜情况返回空列表

测试用例参考

// 玩家1落子坐标(按落子顺序排列)
List<(int x, int y)> player1Marker = new List<(int x, int y)>
{
    (x:2, y:2),
    (x:1, y:1),
    (x:0, y:2),
    (x:2, y:0),
};

// 玩家2落子坐标(按落子顺序排列)
List<(int x, int y)> player2Marker = new List<(int x, int y)>
{
    (x:0, y:1),
    (x:0, y:0),
    (x:1, y:2)
};

示例预期输出:[[1,1],[0,2],[2,0]](玩家1斜向对齐获胜)

完整实现代码

public List<(int x, int y)> GetWinningCombo(List<(int x, int y)> player1Markers, List<(int x, int y)> player2Markers)
{
    // 预定义所有获胜组合:3行+3列+2条对角线,共8种合法获胜场景
    var allWinningLines = new List<List<(int x, int y)>>
    {
        // 水平行获胜
        new List<(int x, int y)>{(0,0), (0,1), (0,2)},
        new List<(int x, int y)>{(1,0), (1,1), (1,2)},
        new List<(int x, int y)>{(2,0), (2,1), (2,2)},
        // 垂直列获胜
        new List<(int x, int y)>{(0,0), (1,0), (2,0)},
        new List<(int x, int y)>{(0,1), (1,1), (2,1)},
        new List<(int x, int y)>{(0,2), (1,2), (2,2)},
        // 斜向对角线获胜
        new List<(int x, int y)>{(0,0), (1,1), (2,2)},
        new List<(int x, int y)>{(0,2), (1,1), (2,0)}
    };

    // 玩家1先手,优先校验玩家1获胜情况
    var p1PositionSet = new HashSet<(int x, int y)>(player1Markers);
    foreach (var winningLine in allWinningLines)
    {
        if (winningLine.All(pos => p1PositionSet.Contains(pos)))
        {
            return winningLine;
        }
    }

    // 校验玩家2获胜情况
    var p2PositionSet = new HashSet<(int x, int y)>(player2Markers);
    foreach (var winningLine in allWinningLines)
    {
        if (winningLine.All(pos => p2PositionSet.Contains(pos)))
        {
            return winningLine;
        }
    }

    // 无获胜方返回空集合
    return new List<(int x, int y)>();
}

实现说明

  • 采用HashSet存储玩家落子坐标,单次查询时间复杂度为O(1),比直接遍历列表性能更高
  • 优先校验玩家1获胜情况,符合先手规则,可覆盖极端场景下双方同时存在获胜线的异常逻辑
  • 预定义获胜线的方案扩展性强,如仅需校验水平、垂直对齐,直接删除两条斜向对角线的配置即可
  • 完全匹配示例测试用例,输入给定落子数据时返回结果与预期一致

注:如果需要按照落子顺序返回获胜坐标,可在匹配到获胜线后,遍历玩家的落子列表筛选出对应坐标重新排序即可,当前实现返回的获胜坐标顺序为标准线顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:45:05