Java实现井字棋获胜后多循环一次BUG排查求助
问题根因
你判断胜利时传入的玩家符号错误,永远检测的是下一位待行动玩家的胜负状态,而非刚完成落子的当前玩家,导致胜负检测慢了整整一轮:
- 玩家1(X)完成落子后,代码先把
playerSymbol修改为下一位玩家的符号O,再调用winConditions传入O检测胜负,刚落子的X是否获胜完全没有被校验 - 只有等下一位玩家(O)完成落子、
playerSymbol被改回X时,才会校验X的胜负状态,这时候已经多要求玩家走了一步
修复方案
调整逻辑顺序,先校验当前落子玩家的胜负,再切换玩家符号即可:
- 先明确当前落子玩家的符号,不要用你现在的
playerSymbol(它现在存的是下一位玩家的符号)做胜负校验参数 - 处理完落子逻辑(包括非法落子回退
activePlayer的逻辑)后,立刻用当前落子玩家的符号做胜负判断,确认没有获胜再修改playerSymbol为下一位玩家的符号
示例修改参考:
在处理activePlayer分支前先定义当前玩家符号:
String currentSymbol = activePlayer == 1 ? "X" : "O";
处理完落子逻辑后,先调用winConditions传入currentSymbol校验胜负,如果没获胜再修改playerSymbol为下一位玩家的符号。
另外补充一个你没注意到的小bug:玩家2(O)落子的非法校验逻辑只判断了格子是否被X占用,没有判断是否被O自己占用,会导致O可以重复落子自己的格子,建议和玩家1的校验逻辑对齐,判断格子是否已经是X或O。
内容的提问来源于stack exchange,提问作者NickvdP
相关产品推荐
相关产品推荐

