原生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
相关产品推荐
相关产品推荐

