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

原生JS硬编码井字棋胜负判断函数故障排查求助

原生JS硬编码井字棋胜负判断函数故障排查求助

各位好,我最近在工作中需要用原生JS实现一个井字棋的胜负判断功能。之前直接用if语句逐个判断格子的写法是能正常运行的,但现在要求必须结合预定义的胜负状态变量来实现,结果我写的判断函数一直没法正确触发,卡在这里好一阵子了,想请大家帮忙找找问题。

先贴一下我目前的代码:

const userGame = [
  row1 = ["O", "O", "O"],
  row2 = ["", "", ""],
  row3 = ["", "", ""]
]

// Made this for easier referencing
cells = [
  cell1 = row1[0],
  cell2 = row1[1],
  cell3 = row1[2],
  cell4 = row2[0],
  cell5 = row2[1], // C = Center
  cell6 = row2[2],
  cell7 = row3[0],
  cell8 = row3[1],
  cell9 = row3[2]
]

// Defining win conditions (row, column, diagonal)
const rowWinO = [
  ["O", "O", "O"]
]
const rowWinX = [
  ["X", "X", "X"]
]
const colWinO = [
  ["O"],
  ["O"],
  ["O"]
]
const colWinX = [
  ["X"],
  ["X"],
  ["X"]
]
const diagonalWinO = [
  ["", "", "O"],
  ["", "O", ""],
  ["O", "", ""]
]
const diagonalWinX = [
  ["", "", "X"],
  ["", "X", ""],
  ["X", "", ""]
]
const diagonalWinInverseO = [
  ["O", "", ""],
  ["", "O", ""],
  ["", "", "O"]
]
const diagonalWinInverseX = [
  ["X", "", ""],
  ["", "X", ""],
  ["", "", "X"]
]

// Placement of X and O
Xcell = 'X'
Ocell = 'O'

let gameWin = false

// Where the struggle is.
// The function isn't calling (for example)
// rowWinO for the if statements below this function.
// This program should be returning rowWinO and
// declaring that 'O has won on a row'
function evaluatePlay(board) {
  board = userGame
  if (cell1 == Ocell && cell2 == Ocell && cell3 == Ocell
    || cell4 == Ocell && cell5 == Ocell && cell6 == Ocell
    || cell7 == Ocell && cell8 == Ocell && cell9 == Ocell) {
    rowWinO == true
  }
  else if (cell1 == Xcell && cell2 == Xcell && cell3 == Xcell
    || cell4 == Xcell && cell5 == Xcell && cell6 == Xcell
    || cell7 == Xcell && cell8 == Xcell && cell9 == Xcell) {
    rowWinX == true
  }
  else if (cell1 == Ocell && cell4 == Ocell && cell7 == Ocell
    || cell2 == Ocell && cell5 == Ocell && cell8 == Ocell
    || cell3 == Ocell && cell6 == Ocell && cell9 == Ocell) {
    colWinO == true
  }
  else if (cell1 == Xcell && cell4 == Xcell && cell7 == Xcell
    || cell2 == Xcell && cell5 == Xcell && cell8 == Xcell
    || cell3 == Xcell && cell6 == Xcell && cell9 == Xcell) {
    colWinX == true
  }
  else if (board == diagonalWinO ) {
    // Done this way because the board can only get
    // a win like this in one way
    diagonalWinO == true
  }
  else if (board == diagonalWinInverseO) {
    diagonalWinInverseO == true
  }
  else if (board == diagonalWinX) {
    diagonalWinX == true
  }
  else if (board == diagonalWinInverseX) {
    diagonalWinInverseX == true
  }

  if (rowWinO == true || rowWinX == true || colWinO == true
    || colWinX == true || diagonalWinO == true || diagonalWinX == true
    || diagonalWinInverseO == true || diagonalWinInverseX == true) {
    // If the gameboard matches a win state, return that we have a
    // winner
    gameWin == true
  }
  return;
}

evaluatePlay(userGame)

if (gameWin == true) {
  if (rowWinO == true ) {
    // O wins on a row
    console.log('O wins on a row!')
  }
  // X Wins on a row
  else if(rowWinX == true) {
    console.log('X wins on a row! ')
  }
  // O Wins on a column
  else if(colWinO == true) {
    console.log('O wins on a column!')
  }
  // X Wins on a column
  else if(colWinX == true) {
    console.log('X wins on a column!')
  }
  // O wins on a diagonal
  else if(diagonalWinO == true) {
    console.log('O wins on a diagonal!')
  }
  else if(diagonalWinInverseO == true) {
    console.log('O wins on a diagonal!')
  }
  // X wins on a diagonal
  else if(diagonalWinX == true) {
    console.log('X wins on a diagonal!')
  }
  else if(diagonalWinInverseX == true) {
    console.log('X wins on a diagnoal!')
  }
}
else if (gameWin == false) {
  console.log('Nothing happens')
}

我的问题说明:

我硬编码了一个第一行全是O的棋盘:

const userGame = [
  row1 = ["O", "O", "O"],
  row2 = ["", "", ""],
  row3 = ["", "", ""]
]

按照要求,我必须预定义好各种胜负状态(比如rowWinO、diagonalWinX这些),然后让函数对比当前棋盘和这些胜负状态来判断结果。

但现在的问题是,evaluatePlay函数完全没正确触发判断——明明棋盘满足rowWinO的条件,却始终输出Nothing happens,好像函数里的判断逻辑根本没生效。

我自己试过调整变量名(比如把X = 'X'改成Xcell = 'X'),但还是找不到问题出在哪。之前不用预定义胜负状态的时候,直接像下面这样写if判断是能正常工作的:

else if(row1[0] == 'O' && row2[0] == 'O' && row3[0] == 'O') {
  console.log('O wins on column')
  gameWin == true
}

预期输出:

程序应该识别到第一行全O的情况,把rowWinO设为true,同时gameWin也设为true,最终输出O wins on a row!。如果没有任何胜负条件满足,才输出Nothing happens。

麻烦各位帮忙看看我的函数哪里写错了,谢谢!

备注:内容来源于stack exchange,提问作者Vermillion Orange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:17:35