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