如何实现井字棋(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"); }
代码说明
- 行检查:遍历每一行,判断三个格子是否为相同的非空字符
- 列检查:遍历每一列,判断同一列的三个格子是否为相同的非空字符
- 对角线检查:分别检查两条对角线上的三个格子是否符合获胜条件
- 结果输出:找到获胜者后,确定失败者并输出对应信息;若没有获胜者则提示无赢家
- 用户交互:根据用户输入的选项,调用
evaluatePlay函数对应预定义的棋盘
内容的提问来源于stack exchange,提问作者JadenBotha
相关产品推荐
相关产品推荐

