首页 > 解决方案 > 为什么在输入错误后跳过玩家 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 问题,但没有一个可以解决我的具体问题。

标签: java

解决方案


推荐阅读