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

如何实现井字棋(Tic Tac Toe)获胜判定函数?新手求助

井字棋获胜局面判断函数实现问题

需求说明

我正在开发一个井字棋(Tic Tac Toe)程序,已经定义了所有可能的获胜局面常量。需要编写evaluatePlay函数,判断当前棋盘是否出现获胜局面,并在控制台输出类似X Won、O Lost的结果。

示例:

当传入diagonalWinInverse时,控制台应输出:
X Won
O Lost

我刚入门编程,不知道该怎么实现这个函数。

现有代码

const rowWin = [
  ["O", "O", "O"],
  ["", "", ""],
  ["", "", ""]
]

const colWin = [
  ["", "X", ""],
  ["", "X", ""],
  ["", "X", ""]
]

const diagonalWin = [
  ["", "", "O"],
  ["", "O", ""],
  ["O", "", ""]
]

const diagonalWinInverse = [
  ["X", "", ""],
  ["", "X", ""],
  ["", "", "X"]
]

//This function will evaluate all the grids I have defined above
//And will tell the user which sign has won

let ask = prompt("Please Choose an option and only select the number:\n 1 Row Win \n2 Column Win \n3 Diagonal Win \n4 Inverse Diagonal Win")

function evaluatePlay(grid){

}

实现方案

核心思路

要判断获胜局面,需要检查棋盘的所有行、所有列、两条对角线,看是否存在三个连续相同的非空字符(X或O)。找到获胜者后,直接输出对应的胜负结果即可。

完整实现代码

const rowWin = [
  ["O", "O", "O"],
  ["", "", ""],
  ["", "", ""]
]

const colWin = [
  ["", "X", ""],
  ["", "X", ""],
  ["", "X", ""]
]

const diagonalWin = [
  ["", "", "O"],
  ["", "O", ""],
  ["O", "", ""]
]

const diagonalWinInverse = [
  ["X", "", ""],
  ["", "X", ""],
  ["", "", "X"]
]

let ask = prompt("Please Choose an option and only select the number:\n 1 Row Win \n2 Column Win \n3 Diagonal Win \n4 Inverse Diagonal Win")

function evaluatePlay(grid) {
  let winner = null;

  // 检查所有行
  for (let row of grid) {
    if (row[0] !== "" && row[0] === row[1] && row[1] === row[2]) {
      winner = row[0];
      break;
    }
  }

  // 检查所有列
  if (!winner) {
    for (let col = 0; col < 3; col++) {
      if (grid[0][col] !== "" && grid[0][col] === grid[1][col] && grid[1][col] === grid[2][col]) {
        winner = grid[0][col];
        break;
      }
    }
  }

  // 检查主对角线(左上到右下)
  if (!winner) {
    if (grid[0][0] !== "" && grid[0][0] === grid[1][1] && grid[1][1] === grid[2][2]) {
      winner = grid[0][0];
    }
  }

  // 检查副对角线(右上到左下)
  if (!winner) {
    if (grid[0][2] !== "" && grid[0][2] === grid[1][1] && grid[1][1] === grid[2][0]) {
      winner = grid[0][2];
    }
  }

  // 输出结果
  if (winner) {
    const loser = winner === "X" ? "O" : "X";
    console.log(`${winner} Won`);
    console.log(`${loser} Lost`);
  } else {
    console.log("No winner yet");
  }
}

// 根据用户选择调用函数
switch (ask) {
  case "1":
    evaluatePlay(rowWin);
    break;
  case "2":
    evaluatePlay(colWin);
    break;
  case "3":
    evaluatePlay(diagonalWin);
    break;
  case "4":
    evaluatePlay(diagonalWinInverse);
    break;
  default:
    console.log("Invalid option selected");
}

代码说明

  1. 行检查:遍历每一行,判断三个格子是否为相同的非空字符
  2. 列检查:遍历每一列,判断同一列的三个格子是否为相同的非空字符
  3. 对角线检查:分别检查两条对角线上的三个格子是否符合获胜条件
  4. 结果输出:找到获胜者后,确定失败者并输出对应信息;若没有获胜者则提示无赢家
  5. 用户交互:根据用户输入的选项,调用evaluatePlay函数对应预定义的棋盘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:02:33