java - 为什么在输入错误后跳过玩家 2 的回合,而不是允许另一个输入(2p tictactoe game java)
问题描述
基本上,如果玩家 1 输入了不正确的移动(在 1-9 之外),那么“错误输入”将被打印出来,他们将被允许再试一次。我对玩家 2 有相同的代码,但在打印错误消息后,他们的回合被跳过并返回给玩家 1。我对如何解决这个问题感到非常困惑
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class TicTactoe3 {
static ArrayList<Integer> playerPositions = new ArrayList<Integer>();
static ArrayList<Integer> playerPositions2 = new ArrayList<Integer>();
public static void main(String[] args) {
char[][] gameBoard = {{' ', '|', ' ', '|', ' '},
{'-', '+', '-', '+', '-'},
{' ', '|', ' ', '|', ' '},
{'-', '+', '-', '+', '-'},
{' ', '|', ' ', '|', ' '}};
printGameBoard(gameBoard);
while(true) {
Scanner move = new Scanner(System.in);
System.out.println("Enter your move (1-9) player one ");
int playerPos = move.nextInt();
while(playerPositions.contains(playerPos) || playerPositions2.contains(playerPos)) {
System.out.println("Position taken");
playerPos = move.nextInt();
}
if(playerPos >= 10 || playerPos <= 0) {
System.out.println("Incorrect Input");
continue;
}
placePiece(gameBoard, playerPos, "player 1");
printGameBoard(gameBoard);
String result = checkWinner();
if(result.length() > 0) {
System.out.println(result);
break;
}
System.out.println("Enter your move (1-9) player two ");
int playerPos2 = move.nextInt();
while(playerPositions.contains(playerPos2) || playerPositions2.contains(playerPos2)) {
System.out.println("Position taken");
playerPos2 = move.nextInt();
}
if(playerPos2 >= 10 || playerPos2 <= 0) {
System.out.println("Incorrect Input");
continue;
}
placePiece(gameBoard, playerPos2, "player 2");
printGameBoard(gameBoard);
result = checkWinner();
if(result.length() > 0) {
System.out.println(result);
break;
}
}
}
public static void printGameBoard(char[][] gameBoard) {
for(char[] row : gameBoard) {
for(char c : row) {
System.out.print(c);
}
System.out.println();
}
}
public static void placePiece(char[][] gameBoard, int pos, String user) {
char symbol = ' ';
if(user.equals("player 1")) {
symbol = 'X';
playerPositions.add(pos);
} else if(user.equals("player 2")) {
symbol = 'O';
playerPositions2.add(pos);
}
switch(pos) {
case 1:
gameBoard[0][0] = symbol;
break;
case 2:
gameBoard[0][2] = symbol;
break;
case 3:
gameBoard[0][4] = symbol;
break;
case 4:
gameBoard[2][0] = symbol;
break;
case 5:
gameBoard[2][2] = symbol;
break;
case 6:
gameBoard[2][4] = symbol;
break;
case 7:
gameBoard[4][0] = symbol;
break;
case 8:
gameBoard[4][2] = symbol;
break;
case 9:
gameBoard[4][4] = symbol;
break;
default:
break;
}
}
public static String checkWinner() {
List topRow = Arrays.asList(1, 2, 3);
List midRow = Arrays.asList(4, 5, 6);
List botRow = Arrays.asList(7, 8, 9);
List leftCol = Arrays.asList(1, 4, 7);
List midCol = Arrays.asList(2, 5, 8);
List rightCol = Arrays.asList(3, 6, 9);
List cross1 = Arrays.asList(1, 5, 9);
List cross2 = Arrays.asList(7, 5, 3);
List<List> winning = new ArrayList<List>();
winning.add(topRow);
winning.add(midRow);
winning.add(botRow);
winning.add(leftCol);
winning.add(midCol);
winning.add(rightCol);
winning.add(cross1);
winning.add(cross2);
for (List l : winning) {
if(playerPositions.containsAll(l)) {
return "Congrats, player 1 wins!";
}
else if(playerPositions2.containsAll(l)) {
return "Congrats, player 2 wins";
}
}
for (List l : winning) {
if(playerPositions.size() + playerPositions2.size() == 9) {
return "NOBODY WINS";
}
}
return "";
}
}
我仍然是java的初学者,如果这是非常基本的,我深表歉意。我在这里找到了多个其他 tictactoe 问题,但没有一个可以解决我的具体问题。
解决方案
推荐阅读
- node.js - 错误:协议错误(Fetch.continueRequest):InterceptionId 无效
- photogrammetry - Meshroom Meshing 节点因“深度图融合给出空结果”而失败
- xml - 对 XML 文档段的多个 XSL 转换
- python - 有什么方法可以让 DPKT 在读取时收集所有 pcaps 文件内容
- react-state-management - 是否可以使用 useSWR 知道重新验证的原因?
- matlab - 线性回归外推大数据分析
- excel - 获取和比较字符串中的整数
- javascript - jQuery .load() 函数后,jQuery sortable() 不起作用
- node.js - 修改 server.js 以使用 heroku 部署处理 api 调用
- google-drive-api - Google Drive API - 转移整个驱动器的所有权(如网络界面)