C#井字棋重放功能失效 重开后未重置棋盘状态问题
问题原因
重开功能失效是因为新一局启动时没有重置上一局的游戏状态:
- 棋盘数组
board保留了上一局所有落子痕迹,没有清空回全-的初始状态 - 先手轮次标记
isplayer1停留在上一局最后一步的轮次,不会回到玩家1先手的初始状态 - 终局标记
gameEnded的重置代码被注释,加上之前在胜负/平局判定时仅用break跳出循环、没有主动设置gameEnded = true,导致循环状态逻辑混乱 - 仅设置了
replay = true,但核心游戏状态全部沿用上一局的终局值,自然会直接显示上局结束的棋盘,直接要求输入落子。
修复步骤
- 补全重开分支的状态重置逻辑,把输入
yes后的else块替换成下面的代码:
else { System.Console.Clear(); replay = true; // 重置终局标记 gameEnded = false; // 重置先手为玩家1 isplayer1 = true; // 清空棋盘为初始状态 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { board[i,j] = '-' ; } } }
- 补全胜负、平局判定时的终局标记赋值,避免循环逻辑隐患:
在获胜分支的break前加一行gameEnded = true;:
if(win) { DrawGameBoard(board); System.Console.WriteLine("We HAVE A WINNERRR!!!!"); gameEnded = true; break; }
在平局分支的break前也加一行gameEnded = true;:
if(boardIsFull) { DrawGameBoard(board); Console.WriteLine("It's A Tie!!!!"); gameEnded = true; break; }
改完之后重开就会正常加载空棋盘,从玩家1的回合开始新游戏。
内容的提问来源于stack exchange,提问作者Mostlygoldie
相关产品推荐
相关产品推荐

