Java 如何为我的游戏实现玩家界面?

Java 如何为我的游戏实现玩家界面?,java,eclipse,oop,Java,Eclipse,Oop,为了使我的程序更加面向对象,我刚刚实现了一个播放器接口。该游戏有一个计算机播放器和一个人类播放器,两者都通过播放器界面实现 但是,我无法理解为什么代码不起作用。现在运行程序时,我无法在板上输入计数器,它似乎只是要求人类玩家玩(忽略计算机逻辑) 以下是我遇到的问题的图像: Player.java import java.io.IOException; public interface Player { public String getUserInput() throws IOExc

为了使我的程序更加面向对象,我刚刚实现了一个播放器接口。该游戏有一个计算机播放器和一个人类播放器,两者都通过播放器界面实现

但是,我无法理解为什么代码不起作用。现在运行程序时,我无法在板上输入计数器,它似乎只是要求人类玩家玩(忽略计算机逻辑)

以下是我遇到的问题的图像:

Player.java

import java.io.IOException;

public interface Player {

    public String getUserInput() throws IOException;
    }
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class HumanPlayer implements Player {

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        outer:
        while(true){

            int boardColumn = 0;

            //Player One Logic ----------------------------------------------------------------

            while(true){
                System.out.println("");
                System.out.println("Player 1, please select your column:");
                boardColumn = Integer.parseInt(br.readLine());

                if(Connect4.canMakeMove(boardColumn)){
                    if(Connect4.placeCounter(boardColumn, 1)){
                        Connect4.printBoard();
                        System.out.println("");
                        System.out.println("Congratulations! Player 1 has won the game");
                        break outer;
                    }
                    break;
                }
                else
                    System.out.println("Column "+boardColumn+" is already full!!");
            }


    }
        return null;

    }   

}
import java.io.IOException;
import java.util.Random;

public class ComputerPlayer implements Player{

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();

        outer:
        while(true){
            System.out.println("");
            System.out.println("The Computer has selected a column and played a counter");
            System.out.println("");

            Random r = new Random();
            int num = r.nextInt(7);

            int boardColumn = num;

            if(Connect4.canMakeMove(boardColumn)){
                if(Connect4.placeCounter(boardColumn, 2)){
                    Connect4.printBoard();
                    System.out.println("");
                    System.out.println("Unlucky! The Computer has won this game");
                    break outer;
                }
                break;
            }
            else
                System.out.println("Column "+boardColumn+" is already full!!");
        }

        return null;
    }



}
import java.io.InputStreamReader;
import java.util.Random;
import java.io.BufferedReader;
import java.io.IOException;

public class Main {

    public static void main(String args[])throws IOException{

        Board Connect4 = new Board();


        welcomeMessage();
        Connect4.printBoard();


            HumanPlayer human = new HumanPlayer();
            human.getUserInput();

                Connect4.printBoard();

                //Player Two Logic ---------------------------------------------------------------   

                ComputerPlayer computer = new ComputerPlayer();
                computer.getUserInput();

                Connect4.printBoard();

            }


    public static void welcomeMessage() {
        System.out.println("Welcome to Connect 4");
        System.out.println("There are 2 players red and yellow");
        System.out.println("Player 1 is Red, Player 2 is Yellow");
        System.out.println("To play the game type in the number of the boardColumn you want to drop you counter in");
        System.out.println("A player wins by connecting 4 counters in a row - vertically, horizontally or diagonally");
        System.out.println(""); 
    }
public abstract class Counter {

    int widthOfBoard = 7;
    int heightOfBoard = 7;
    int totalPlayed;
    int [][] gameBoard;

    public boolean placeCounter(int boardColumn, int playerNum){
        int i = 0;
        for(i = 0; i<widthOfBoard; i++){
            if(gameBoard[i][boardColumn] == 1 || gameBoard[i][boardColumn] == 2){
                gameBoard[i-1][boardColumn]=playerNum;
                break;
            }
        }
        if(i == widthOfBoard)
            gameBoard[i-1][boardColumn]=playerNum;

        totalPlayed++;
        return isFourConnected(i-1,boardColumn);
    }

    public boolean canMakeMove(int boardColumn){
        return gameBoard[0][boardColumn] == 0; 
    }

    public boolean isFourConnected(int n1, int n2){
        int num=gameBoard[n1][n2];
        int count=0;
        int x = n2;

        // Vertical Logic ----------------------------------------------------
        count=0;
        int j=n1;
        while(j < widthOfBoard && gameBoard[j][n2] == num){
            count++;
            j++;
        }
        if(count == 4)
            return true;

        // Right Diagonal Logic ----------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x< widthOfBoard && j < widthOfBoard && gameBoard[x][j] == num){
            count++;
            x++;
            j++;
        }

        if(count == 4)
            return true;

        // Left Diagonal Logic ------------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x < widthOfBoard && j >= 0 && gameBoard[x][j] == num){
            count++;
            x++;
            j--;
        }

        if(count == 4)
            return true;

        // Horizontal Logic -------------------------------------------------
        while(x < widthOfBoard && gameBoard[n1][x] == num){
            count++;
            x++;
        }
        x = n2-1;
        while(x >= 0 && gameBoard[n1][x] == num){
            count++;
            x--;
        }
        if(count == 4)
            return true;

        return false;
    }
}
public class Board extends Counter {

    public Board() {
        gameBoard = new int[super.heightOfBoard][super.widthOfBoard];
        super.totalPlayed = 0;
    }

    public void printBoard(){
        for(int i = 0; i<super.gameBoard.length; i++){
            for(int j = 0; j<super.gameBoard[0].length; j++){
                if(super.gameBoard[i][j] == 0)
                    System.out.print(".  ");
                else
                    System.out.print(super.gameBoard[i][j]+"  ");
            }
            System.out.println("");
        }
        System.out.println("--------------------");
        System.out.println("0  1  2  3  4  5  6");
    }


}
HumanPlayer.Java

import java.io.IOException;

public interface Player {

    public String getUserInput() throws IOException;
    }
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class HumanPlayer implements Player {

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        outer:
        while(true){

            int boardColumn = 0;

            //Player One Logic ----------------------------------------------------------------

            while(true){
                System.out.println("");
                System.out.println("Player 1, please select your column:");
                boardColumn = Integer.parseInt(br.readLine());

                if(Connect4.canMakeMove(boardColumn)){
                    if(Connect4.placeCounter(boardColumn, 1)){
                        Connect4.printBoard();
                        System.out.println("");
                        System.out.println("Congratulations! Player 1 has won the game");
                        break outer;
                    }
                    break;
                }
                else
                    System.out.println("Column "+boardColumn+" is already full!!");
            }


    }
        return null;

    }   

}
import java.io.IOException;
import java.util.Random;

public class ComputerPlayer implements Player{

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();

        outer:
        while(true){
            System.out.println("");
            System.out.println("The Computer has selected a column and played a counter");
            System.out.println("");

            Random r = new Random();
            int num = r.nextInt(7);

            int boardColumn = num;

            if(Connect4.canMakeMove(boardColumn)){
                if(Connect4.placeCounter(boardColumn, 2)){
                    Connect4.printBoard();
                    System.out.println("");
                    System.out.println("Unlucky! The Computer has won this game");
                    break outer;
                }
                break;
            }
            else
                System.out.println("Column "+boardColumn+" is already full!!");
        }

        return null;
    }



}
import java.io.InputStreamReader;
import java.util.Random;
import java.io.BufferedReader;
import java.io.IOException;

public class Main {

    public static void main(String args[])throws IOException{

        Board Connect4 = new Board();


        welcomeMessage();
        Connect4.printBoard();


            HumanPlayer human = new HumanPlayer();
            human.getUserInput();

                Connect4.printBoard();

                //Player Two Logic ---------------------------------------------------------------   

                ComputerPlayer computer = new ComputerPlayer();
                computer.getUserInput();

                Connect4.printBoard();

            }


    public static void welcomeMessage() {
        System.out.println("Welcome to Connect 4");
        System.out.println("There are 2 players red and yellow");
        System.out.println("Player 1 is Red, Player 2 is Yellow");
        System.out.println("To play the game type in the number of the boardColumn you want to drop you counter in");
        System.out.println("A player wins by connecting 4 counters in a row - vertically, horizontally or diagonally");
        System.out.println(""); 
    }
public abstract class Counter {

    int widthOfBoard = 7;
    int heightOfBoard = 7;
    int totalPlayed;
    int [][] gameBoard;

    public boolean placeCounter(int boardColumn, int playerNum){
        int i = 0;
        for(i = 0; i<widthOfBoard; i++){
            if(gameBoard[i][boardColumn] == 1 || gameBoard[i][boardColumn] == 2){
                gameBoard[i-1][boardColumn]=playerNum;
                break;
            }
        }
        if(i == widthOfBoard)
            gameBoard[i-1][boardColumn]=playerNum;

        totalPlayed++;
        return isFourConnected(i-1,boardColumn);
    }

    public boolean canMakeMove(int boardColumn){
        return gameBoard[0][boardColumn] == 0; 
    }

    public boolean isFourConnected(int n1, int n2){
        int num=gameBoard[n1][n2];
        int count=0;
        int x = n2;

        // Vertical Logic ----------------------------------------------------
        count=0;
        int j=n1;
        while(j < widthOfBoard && gameBoard[j][n2] == num){
            count++;
            j++;
        }
        if(count == 4)
            return true;

        // Right Diagonal Logic ----------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x< widthOfBoard && j < widthOfBoard && gameBoard[x][j] == num){
            count++;
            x++;
            j++;
        }

        if(count == 4)
            return true;

        // Left Diagonal Logic ------------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x < widthOfBoard && j >= 0 && gameBoard[x][j] == num){
            count++;
            x++;
            j--;
        }

        if(count == 4)
            return true;

        // Horizontal Logic -------------------------------------------------
        while(x < widthOfBoard && gameBoard[n1][x] == num){
            count++;
            x++;
        }
        x = n2-1;
        while(x >= 0 && gameBoard[n1][x] == num){
            count++;
            x--;
        }
        if(count == 4)
            return true;

        return false;
    }
}
public class Board extends Counter {

    public Board() {
        gameBoard = new int[super.heightOfBoard][super.widthOfBoard];
        super.totalPlayed = 0;
    }

    public void printBoard(){
        for(int i = 0; i<super.gameBoard.length; i++){
            for(int j = 0; j<super.gameBoard[0].length; j++){
                if(super.gameBoard[i][j] == 0)
                    System.out.print(".  ");
                else
                    System.out.print(super.gameBoard[i][j]+"  ");
            }
            System.out.println("");
        }
        System.out.println("--------------------");
        System.out.println("0  1  2  3  4  5  6");
    }


}
ComputerPlayer.java

import java.io.IOException;

public interface Player {

    public String getUserInput() throws IOException;
    }
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class HumanPlayer implements Player {

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        outer:
        while(true){

            int boardColumn = 0;

            //Player One Logic ----------------------------------------------------------------

            while(true){
                System.out.println("");
                System.out.println("Player 1, please select your column:");
                boardColumn = Integer.parseInt(br.readLine());

                if(Connect4.canMakeMove(boardColumn)){
                    if(Connect4.placeCounter(boardColumn, 1)){
                        Connect4.printBoard();
                        System.out.println("");
                        System.out.println("Congratulations! Player 1 has won the game");
                        break outer;
                    }
                    break;
                }
                else
                    System.out.println("Column "+boardColumn+" is already full!!");
            }


    }
        return null;

    }   

}
import java.io.IOException;
import java.util.Random;

public class ComputerPlayer implements Player{

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();

        outer:
        while(true){
            System.out.println("");
            System.out.println("The Computer has selected a column and played a counter");
            System.out.println("");

            Random r = new Random();
            int num = r.nextInt(7);

            int boardColumn = num;

            if(Connect4.canMakeMove(boardColumn)){
                if(Connect4.placeCounter(boardColumn, 2)){
                    Connect4.printBoard();
                    System.out.println("");
                    System.out.println("Unlucky! The Computer has won this game");
                    break outer;
                }
                break;
            }
            else
                System.out.println("Column "+boardColumn+" is already full!!");
        }

        return null;
    }



}
import java.io.InputStreamReader;
import java.util.Random;
import java.io.BufferedReader;
import java.io.IOException;

public class Main {

    public static void main(String args[])throws IOException{

        Board Connect4 = new Board();


        welcomeMessage();
        Connect4.printBoard();


            HumanPlayer human = new HumanPlayer();
            human.getUserInput();

                Connect4.printBoard();

                //Player Two Logic ---------------------------------------------------------------   

                ComputerPlayer computer = new ComputerPlayer();
                computer.getUserInput();

                Connect4.printBoard();

            }


    public static void welcomeMessage() {
        System.out.println("Welcome to Connect 4");
        System.out.println("There are 2 players red and yellow");
        System.out.println("Player 1 is Red, Player 2 is Yellow");
        System.out.println("To play the game type in the number of the boardColumn you want to drop you counter in");
        System.out.println("A player wins by connecting 4 counters in a row - vertically, horizontally or diagonally");
        System.out.println(""); 
    }
public abstract class Counter {

    int widthOfBoard = 7;
    int heightOfBoard = 7;
    int totalPlayed;
    int [][] gameBoard;

    public boolean placeCounter(int boardColumn, int playerNum){
        int i = 0;
        for(i = 0; i<widthOfBoard; i++){
            if(gameBoard[i][boardColumn] == 1 || gameBoard[i][boardColumn] == 2){
                gameBoard[i-1][boardColumn]=playerNum;
                break;
            }
        }
        if(i == widthOfBoard)
            gameBoard[i-1][boardColumn]=playerNum;

        totalPlayed++;
        return isFourConnected(i-1,boardColumn);
    }

    public boolean canMakeMove(int boardColumn){
        return gameBoard[0][boardColumn] == 0; 
    }

    public boolean isFourConnected(int n1, int n2){
        int num=gameBoard[n1][n2];
        int count=0;
        int x = n2;

        // Vertical Logic ----------------------------------------------------
        count=0;
        int j=n1;
        while(j < widthOfBoard && gameBoard[j][n2] == num){
            count++;
            j++;
        }
        if(count == 4)
            return true;

        // Right Diagonal Logic ----------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x< widthOfBoard && j < widthOfBoard && gameBoard[x][j] == num){
            count++;
            x++;
            j++;
        }

        if(count == 4)
            return true;

        // Left Diagonal Logic ------------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x < widthOfBoard && j >= 0 && gameBoard[x][j] == num){
            count++;
            x++;
            j--;
        }

        if(count == 4)
            return true;

        // Horizontal Logic -------------------------------------------------
        while(x < widthOfBoard && gameBoard[n1][x] == num){
            count++;
            x++;
        }
        x = n2-1;
        while(x >= 0 && gameBoard[n1][x] == num){
            count++;
            x--;
        }
        if(count == 4)
            return true;

        return false;
    }
}
public class Board extends Counter {

    public Board() {
        gameBoard = new int[super.heightOfBoard][super.widthOfBoard];
        super.totalPlayed = 0;
    }

    public void printBoard(){
        for(int i = 0; i<super.gameBoard.length; i++){
            for(int j = 0; j<super.gameBoard[0].length; j++){
                if(super.gameBoard[i][j] == 0)
                    System.out.print(".  ");
                else
                    System.out.print(super.gameBoard[i][j]+"  ");
            }
            System.out.println("");
        }
        System.out.println("--------------------");
        System.out.println("0  1  2  3  4  5  6");
    }


}
Main.java

import java.io.IOException;

public interface Player {

    public String getUserInput() throws IOException;
    }
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class HumanPlayer implements Player {

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        outer:
        while(true){

            int boardColumn = 0;

            //Player One Logic ----------------------------------------------------------------

            while(true){
                System.out.println("");
                System.out.println("Player 1, please select your column:");
                boardColumn = Integer.parseInt(br.readLine());

                if(Connect4.canMakeMove(boardColumn)){
                    if(Connect4.placeCounter(boardColumn, 1)){
                        Connect4.printBoard();
                        System.out.println("");
                        System.out.println("Congratulations! Player 1 has won the game");
                        break outer;
                    }
                    break;
                }
                else
                    System.out.println("Column "+boardColumn+" is already full!!");
            }


    }
        return null;

    }   

}
import java.io.IOException;
import java.util.Random;

public class ComputerPlayer implements Player{

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();

        outer:
        while(true){
            System.out.println("");
            System.out.println("The Computer has selected a column and played a counter");
            System.out.println("");

            Random r = new Random();
            int num = r.nextInt(7);

            int boardColumn = num;

            if(Connect4.canMakeMove(boardColumn)){
                if(Connect4.placeCounter(boardColumn, 2)){
                    Connect4.printBoard();
                    System.out.println("");
                    System.out.println("Unlucky! The Computer has won this game");
                    break outer;
                }
                break;
            }
            else
                System.out.println("Column "+boardColumn+" is already full!!");
        }

        return null;
    }



}
import java.io.InputStreamReader;
import java.util.Random;
import java.io.BufferedReader;
import java.io.IOException;

public class Main {

    public static void main(String args[])throws IOException{

        Board Connect4 = new Board();


        welcomeMessage();
        Connect4.printBoard();


            HumanPlayer human = new HumanPlayer();
            human.getUserInput();

                Connect4.printBoard();

                //Player Two Logic ---------------------------------------------------------------   

                ComputerPlayer computer = new ComputerPlayer();
                computer.getUserInput();

                Connect4.printBoard();

            }


    public static void welcomeMessage() {
        System.out.println("Welcome to Connect 4");
        System.out.println("There are 2 players red and yellow");
        System.out.println("Player 1 is Red, Player 2 is Yellow");
        System.out.println("To play the game type in the number of the boardColumn you want to drop you counter in");
        System.out.println("A player wins by connecting 4 counters in a row - vertically, horizontally or diagonally");
        System.out.println(""); 
    }
public abstract class Counter {

    int widthOfBoard = 7;
    int heightOfBoard = 7;
    int totalPlayed;
    int [][] gameBoard;

    public boolean placeCounter(int boardColumn, int playerNum){
        int i = 0;
        for(i = 0; i<widthOfBoard; i++){
            if(gameBoard[i][boardColumn] == 1 || gameBoard[i][boardColumn] == 2){
                gameBoard[i-1][boardColumn]=playerNum;
                break;
            }
        }
        if(i == widthOfBoard)
            gameBoard[i-1][boardColumn]=playerNum;

        totalPlayed++;
        return isFourConnected(i-1,boardColumn);
    }

    public boolean canMakeMove(int boardColumn){
        return gameBoard[0][boardColumn] == 0; 
    }

    public boolean isFourConnected(int n1, int n2){
        int num=gameBoard[n1][n2];
        int count=0;
        int x = n2;

        // Vertical Logic ----------------------------------------------------
        count=0;
        int j=n1;
        while(j < widthOfBoard && gameBoard[j][n2] == num){
            count++;
            j++;
        }
        if(count == 4)
            return true;

        // Right Diagonal Logic ----------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x< widthOfBoard && j < widthOfBoard && gameBoard[x][j] == num){
            count++;
            x++;
            j++;
        }

        if(count == 4)
            return true;

        // Left Diagonal Logic ------------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x < widthOfBoard && j >= 0 && gameBoard[x][j] == num){
            count++;
            x++;
            j--;
        }

        if(count == 4)
            return true;

        // Horizontal Logic -------------------------------------------------
        while(x < widthOfBoard && gameBoard[n1][x] == num){
            count++;
            x++;
        }
        x = n2-1;
        while(x >= 0 && gameBoard[n1][x] == num){
            count++;
            x--;
        }
        if(count == 4)
            return true;

        return false;
    }
}
public class Board extends Counter {

    public Board() {
        gameBoard = new int[super.heightOfBoard][super.widthOfBoard];
        super.totalPlayed = 0;
    }

    public void printBoard(){
        for(int i = 0; i<super.gameBoard.length; i++){
            for(int j = 0; j<super.gameBoard[0].length; j++){
                if(super.gameBoard[i][j] == 0)
                    System.out.print(".  ");
                else
                    System.out.print(super.gameBoard[i][j]+"  ");
            }
            System.out.println("");
        }
        System.out.println("--------------------");
        System.out.println("0  1  2  3  4  5  6");
    }


}
Counter.java

import java.io.IOException;

public interface Player {

    public String getUserInput() throws IOException;
    }
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class HumanPlayer implements Player {

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        outer:
        while(true){

            int boardColumn = 0;

            //Player One Logic ----------------------------------------------------------------

            while(true){
                System.out.println("");
                System.out.println("Player 1, please select your column:");
                boardColumn = Integer.parseInt(br.readLine());

                if(Connect4.canMakeMove(boardColumn)){
                    if(Connect4.placeCounter(boardColumn, 1)){
                        Connect4.printBoard();
                        System.out.println("");
                        System.out.println("Congratulations! Player 1 has won the game");
                        break outer;
                    }
                    break;
                }
                else
                    System.out.println("Column "+boardColumn+" is already full!!");
            }


    }
        return null;

    }   

}
import java.io.IOException;
import java.util.Random;

public class ComputerPlayer implements Player{

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();

        outer:
        while(true){
            System.out.println("");
            System.out.println("The Computer has selected a column and played a counter");
            System.out.println("");

            Random r = new Random();
            int num = r.nextInt(7);

            int boardColumn = num;

            if(Connect4.canMakeMove(boardColumn)){
                if(Connect4.placeCounter(boardColumn, 2)){
                    Connect4.printBoard();
                    System.out.println("");
                    System.out.println("Unlucky! The Computer has won this game");
                    break outer;
                }
                break;
            }
            else
                System.out.println("Column "+boardColumn+" is already full!!");
        }

        return null;
    }



}
import java.io.InputStreamReader;
import java.util.Random;
import java.io.BufferedReader;
import java.io.IOException;

public class Main {

    public static void main(String args[])throws IOException{

        Board Connect4 = new Board();


        welcomeMessage();
        Connect4.printBoard();


            HumanPlayer human = new HumanPlayer();
            human.getUserInput();

                Connect4.printBoard();

                //Player Two Logic ---------------------------------------------------------------   

                ComputerPlayer computer = new ComputerPlayer();
                computer.getUserInput();

                Connect4.printBoard();

            }


    public static void welcomeMessage() {
        System.out.println("Welcome to Connect 4");
        System.out.println("There are 2 players red and yellow");
        System.out.println("Player 1 is Red, Player 2 is Yellow");
        System.out.println("To play the game type in the number of the boardColumn you want to drop you counter in");
        System.out.println("A player wins by connecting 4 counters in a row - vertically, horizontally or diagonally");
        System.out.println(""); 
    }
public abstract class Counter {

    int widthOfBoard = 7;
    int heightOfBoard = 7;
    int totalPlayed;
    int [][] gameBoard;

    public boolean placeCounter(int boardColumn, int playerNum){
        int i = 0;
        for(i = 0; i<widthOfBoard; i++){
            if(gameBoard[i][boardColumn] == 1 || gameBoard[i][boardColumn] == 2){
                gameBoard[i-1][boardColumn]=playerNum;
                break;
            }
        }
        if(i == widthOfBoard)
            gameBoard[i-1][boardColumn]=playerNum;

        totalPlayed++;
        return isFourConnected(i-1,boardColumn);
    }

    public boolean canMakeMove(int boardColumn){
        return gameBoard[0][boardColumn] == 0; 
    }

    public boolean isFourConnected(int n1, int n2){
        int num=gameBoard[n1][n2];
        int count=0;
        int x = n2;

        // Vertical Logic ----------------------------------------------------
        count=0;
        int j=n1;
        while(j < widthOfBoard && gameBoard[j][n2] == num){
            count++;
            j++;
        }
        if(count == 4)
            return true;

        // Right Diagonal Logic ----------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x< widthOfBoard && j < widthOfBoard && gameBoard[x][j] == num){
            count++;
            x++;
            j++;
        }

        if(count == 4)
            return true;

        // Left Diagonal Logic ------------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x < widthOfBoard && j >= 0 && gameBoard[x][j] == num){
            count++;
            x++;
            j--;
        }

        if(count == 4)
            return true;

        // Horizontal Logic -------------------------------------------------
        while(x < widthOfBoard && gameBoard[n1][x] == num){
            count++;
            x++;
        }
        x = n2-1;
        while(x >= 0 && gameBoard[n1][x] == num){
            count++;
            x--;
        }
        if(count == 4)
            return true;

        return false;
    }
}
public class Board extends Counter {

    public Board() {
        gameBoard = new int[super.heightOfBoard][super.widthOfBoard];
        super.totalPlayed = 0;
    }

    public void printBoard(){
        for(int i = 0; i<super.gameBoard.length; i++){
            for(int j = 0; j<super.gameBoard[0].length; j++){
                if(super.gameBoard[i][j] == 0)
                    System.out.print(".  ");
                else
                    System.out.print(super.gameBoard[i][j]+"  ");
            }
            System.out.println("");
        }
        System.out.println("--------------------");
        System.out.println("0  1  2  3  4  5  6");
    }


}
公共抽象类计数器{
板的内部宽度=7;
板的内部高度=7;
玩整数游戏;
int[][]游戏板;
公共布尔placeCounter(int boardColumn,int playerNum){
int i=0;
对于(i=0;i=0&&gameBoard[x][j]==num){
计数++;
x++;
j--;
}
如果(计数=4)
返回true;
//水平逻辑-------------------------------------------------
而(x<棋盘和游戏盘的宽度[n1][x]==num){
计数++;
x++;
}
x=n2-1;
而(x>=0&&gameBoard[n1][x]==num){
计数++;
x--;
}
如果(计数=4)
返回true;
返回false;
}
}
Board.java

import java.io.IOException;

public interface Player {

    public String getUserInput() throws IOException;
    }
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class HumanPlayer implements Player {

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        outer:
        while(true){

            int boardColumn = 0;

            //Player One Logic ----------------------------------------------------------------

            while(true){
                System.out.println("");
                System.out.println("Player 1, please select your column:");
                boardColumn = Integer.parseInt(br.readLine());

                if(Connect4.canMakeMove(boardColumn)){
                    if(Connect4.placeCounter(boardColumn, 1)){
                        Connect4.printBoard();
                        System.out.println("");
                        System.out.println("Congratulations! Player 1 has won the game");
                        break outer;
                    }
                    break;
                }
                else
                    System.out.println("Column "+boardColumn+" is already full!!");
            }


    }
        return null;

    }   

}
import java.io.IOException;
import java.util.Random;

public class ComputerPlayer implements Player{

    @Override
    public String getUserInput() throws IOException {

        Board Connect4 = new Board();

        outer:
        while(true){
            System.out.println("");
            System.out.println("The Computer has selected a column and played a counter");
            System.out.println("");

            Random r = new Random();
            int num = r.nextInt(7);

            int boardColumn = num;

            if(Connect4.canMakeMove(boardColumn)){
                if(Connect4.placeCounter(boardColumn, 2)){
                    Connect4.printBoard();
                    System.out.println("");
                    System.out.println("Unlucky! The Computer has won this game");
                    break outer;
                }
                break;
            }
            else
                System.out.println("Column "+boardColumn+" is already full!!");
        }

        return null;
    }



}
import java.io.InputStreamReader;
import java.util.Random;
import java.io.BufferedReader;
import java.io.IOException;

public class Main {

    public static void main(String args[])throws IOException{

        Board Connect4 = new Board();


        welcomeMessage();
        Connect4.printBoard();


            HumanPlayer human = new HumanPlayer();
            human.getUserInput();

                Connect4.printBoard();

                //Player Two Logic ---------------------------------------------------------------   

                ComputerPlayer computer = new ComputerPlayer();
                computer.getUserInput();

                Connect4.printBoard();

            }


    public static void welcomeMessage() {
        System.out.println("Welcome to Connect 4");
        System.out.println("There are 2 players red and yellow");
        System.out.println("Player 1 is Red, Player 2 is Yellow");
        System.out.println("To play the game type in the number of the boardColumn you want to drop you counter in");
        System.out.println("A player wins by connecting 4 counters in a row - vertically, horizontally or diagonally");
        System.out.println(""); 
    }
public abstract class Counter {

    int widthOfBoard = 7;
    int heightOfBoard = 7;
    int totalPlayed;
    int [][] gameBoard;

    public boolean placeCounter(int boardColumn, int playerNum){
        int i = 0;
        for(i = 0; i<widthOfBoard; i++){
            if(gameBoard[i][boardColumn] == 1 || gameBoard[i][boardColumn] == 2){
                gameBoard[i-1][boardColumn]=playerNum;
                break;
            }
        }
        if(i == widthOfBoard)
            gameBoard[i-1][boardColumn]=playerNum;

        totalPlayed++;
        return isFourConnected(i-1,boardColumn);
    }

    public boolean canMakeMove(int boardColumn){
        return gameBoard[0][boardColumn] == 0; 
    }

    public boolean isFourConnected(int n1, int n2){
        int num=gameBoard[n1][n2];
        int count=0;
        int x = n2;

        // Vertical Logic ----------------------------------------------------
        count=0;
        int j=n1;
        while(j < widthOfBoard && gameBoard[j][n2] == num){
            count++;
            j++;
        }
        if(count == 4)
            return true;

        // Right Diagonal Logic ----------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x< widthOfBoard && j < widthOfBoard && gameBoard[x][j] == num){
            count++;
            x++;
            j++;
        }

        if(count == 4)
            return true;

        // Left Diagonal Logic ------------------------------------------------
        count=0;
        x = n1;
        j = n2;
        while(x < widthOfBoard && j >= 0 && gameBoard[x][j] == num){
            count++;
            x++;
            j--;
        }

        if(count == 4)
            return true;

        // Horizontal Logic -------------------------------------------------
        while(x < widthOfBoard && gameBoard[n1][x] == num){
            count++;
            x++;
        }
        x = n2-1;
        while(x >= 0 && gameBoard[n1][x] == num){
            count++;
            x--;
        }
        if(count == 4)
            return true;

        return false;
    }
}
public class Board extends Counter {

    public Board() {
        gameBoard = new int[super.heightOfBoard][super.widthOfBoard];
        super.totalPlayed = 0;
    }

    public void printBoard(){
        for(int i = 0; i<super.gameBoard.length; i++){
            for(int j = 0; j<super.gameBoard[0].length; j++){
                if(super.gameBoard[i][j] == 0)
                    System.out.print(".  ");
                else
                    System.out.print(super.gameBoard[i][j]+"  ");
            }
            System.out.println("");
        }
        System.out.println("--------------------");
        System.out.println("0  1  2  3  4  5  6");
    }


}
公共类板扩展计数器{
公共委员会(){
gameBoard=新整数[super.heightOfBoard][super.widthOfBoard];
super.totalPlayed=0;
}
公共印制板(){

对于(int i=0;i
break outer;
之前丢弃您,而(true)循环将
主线程保持忙碌。由于这个原因,您的代码无法执行超过行
human.getUserInput();
,因为它一直在迭代,直到
human.getUserInput()的中断条件达到为止

中断外部;
之前将您丢弃,而(true)循环将
主线程保持忙碌。由于这个原因,您的代码无法执行超过行
human.getUserInput();
,因为它会不断迭代,直到
human.getUserInput();

“目前,我有一个人机界面、一个HumanPlayer类和一个ComputerPlayer类。"-请同时展示它们嗨,安德鲁,首先感谢你的回复。人机界面、人机播放器和电脑播放器目前没有代码。我知道它们需要存在以实现界面,但我无法确定如何将现有代码从主代码组织到主代码。玩家有id、名称并可以制作move.
Player
interface有三种方法问你,好提示。但是我该如何在move方法中实现对ComputerPlayer的随机逻辑呢?对不起,我无法确切了解你遇到的问题…你覆盖了
ComputerPlayer
中的一个方法,并将逻辑从
main
复制到它。然后你创建一个创建一个
ComputerPlayer
的实例,并调用该对象上的方法。您需要特定才能收到一个好的答案:)“目前,我有一个人机界面、一个HumanPlayer类和一个ComputerPlayer类。”-请同时展示它们嗨,安德鲁,首先感谢你的回复。人机界面、人机播放器和电脑播放器目前没有代码。我知道它们需要存在以实现界面,但我无法确定如何将现有代码从主代码组织到主代码。玩家有id、名称并可以制作move.
Player
interface有三种方法问你,好提示。但是我该如何在move方法中实现对ComputerPlayer的随机逻辑呢?对不起,我无法确切了解你遇到的问题…你覆盖了
ComputerPlayer
中的一个方法,并将逻辑从
main
复制到它。然后你创建一个创建一个
ComputerPlayer
的实例,并调用该对象上的方法。您需要特定才能得到一个好的答案:)