微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

初学者:如何检查4个标记在行,列和/或对角线中是否在Connect 4游戏中宣布获胜者

如何解决初学者:如何检查4个标记在行,列和/或对角线中是否在Connect 4游戏中宣布获胜者

我想知道如何检查Connect,R,Y分别在行,列和对角线中是否有4个Rs或Ys(使用代码显示的以下字符串)来声明我的Connect 4游戏的获胜者,我花了5个小时来计算它但我对编码还是太陌生,无法理解该怎么做。请保留下面所有的代码(请不要使用私有类,或初学者自从交给我的老师以来不知道的任何东西)。 感谢所有发表评论并给予我答复的人。

package finalproject;


import java.util.*;

import java.util.Arrays;

public class ConnectFour

{

public static void main(String[] args) 
{
    System.out.println("Welcome to Connect 4,\n\nObjective:\nBe the first player to get four of your colored checkers in a row- in any direction.\nRemember,you have to drop your circle to the very bottom row,you can't leave circles floating in random areas.");
    String [] tokenColor = {"R","Y"};
    //methods arrays
    int playerselect = menu();
    System.out.println("Im in main");
    int currentPlayer = players(1);



    //arrays for each column of the board
    String [] column1 = {"O","O","O"};
    String [] column2 = {"O","O"};
    String [] column3 = {"O","O"};
    String [] column4 = {"O","O"};
    String [] column5 = {"O","O"};
    String [] column6 = {"O","O"};
    String [] column7 = {"O","O"};


    for (int i = 1; i<=42; i++)
    {
        //using a for loop to to change the board after every player move
        printboard(column1,column2,column3,column4,column5,column6,column7);

        System.out.println("before placement");
        tokenPlacement(tokenColor[currentPlayer],column1,column7);
        System.out.println("after placement");

        printboard(column1,column7);
        currentPlayer = players(currentPlayer);
        
        
        
    }

    




}





public static void printboard(String[] column1,String[] column2,String[] column3,String[] column4,String[] column5,String[] column6,String[] column7) 
{
    System.out.println(1234567);
    //prints out board using loop
    for (int i = 5; i>=0; i--) 
    {
        System.out.print(column1[i]);
        System.out.print(column2[i]);
        System.out.print(column3[i]);
        System.out.print(column4[i]);
        System.out.print(column5[i]);
        System.out.print(column6[i]);
        System.out.print(column7[i]);
        System.out.println();
    }

}



public static int menu() 
{ 
    //enters menu method



    //scanner looks for next input from user

    Scanner myInput = new Scanner (system.in);
    int playerX;

    //prints out menu,this menu give the user the option to pick either P1,P2 or to exit the game
    System.out.println("\nUse the corresponding numbers below to choose a eaither a player,or to exit the program.\n (Note that when you choose player 1 you will always go first)");
    System.out.println("\n            1.   Choose player 1 (R)" );
    System.out.println("            2.   Choose player 2 (Y)");
    System.out.println("            3.   Exit");
    System.out.println("\n                 Select an option");
    playerX = myInput.nextInt();

    //if statements for player selection
    if (playerX == 1)
    {   
        System.out.println("You are Red");
        System.out.println("\nPlayer 2 is Yellow");


    }

    else if (playerX == 2) 
    {

        System.out.println("You are Yellow");
        System.out.println("\nPlayer 2 is Red");

    }
    //exits program
    else if (playerX == 3)
    {
        System.out.println("You didn't choose a player! Shutting Down connect_four.exe");
        System.exit(0);
    }
    //exits program
    else 
    {
        System.out.println("Sorry,I dont't understand? Please re-run the program and choose again.");
        System.exit(0);
    }


    return playerX;






}//end menu


public static int players(int currentPlayer) {
    System.out.println("Im in the players method");



    //displays and decides who's turn it is 
    if (currentPlayer == 0)
    {
        currentPlayer = (1);
        System.out.println("\nIt's Yellow's Turn");
    }

    else if (currentPlayer == 1)
    {
        currentPlayer = (0);
        System.out.println("\nIt's Red's Turn");
    }


    System.out.println(currentPlayer);


    //loops on who goes


    return currentPlayer;   

}//end players  
public static void tokenPlacement(String tokenColor,String [] column1,String [] column2,String [] column3,String [] column4,String [] column5,String [] column6,String [] column7) 
{
    //scans for user's next input
    Scanner myInput = new Scanner (system.in);
    System.out.println("\nOut of the 7 columns above,choose a number between 1-7 to signify which column you choose");
    int columnChoice = myInput.nextInt();
    boolean placed = false;
    //if statement that runs a for loop if columnChoice/users's input == 1
    if (columnChoice == 1)
    {
        for (int i=0; i<=5; i++) 
        {   
            //looks to see if the selected slot has a "O" and if so prints out either a "R" or a "Y" dependent of what player you are
            if (column1[i].equals("O")) 
            {
                column1[i] = tokenColor;
                placed = true;
                break;
            }

        }
        //if a whole column if filled with "R"s or "Y"s tell the user to choose a different column
        if (!placed)
        {
            System.out.println("Sorry that column is full. Choose another column");
            tokenPlacement(tokenColor,column7);
        }
    }




    else if (columnChoice == 2)
    {
        for (int i=0; i<=5; i++) 
        {   
            //looks to see if the selected slot has a "O" and if so prints out either a "R" or a "Y" dependent of what player you are
            if (column2[i].equals("O")) 
            {
                column2[i] = tokenColor;
                placed = true;
                break;
            }

        }
        //if a whole column if filled with "R"s or "Y"s tell the user to choose a different column
        if (!placed)
        {
            System.out.println("Sorry that column is full. Choose another column");
            tokenPlacement(tokenColor,column7);
        }
    }




    else if (columnChoice == 3)
    {
        for (int i=0; i<=5; i++) 
        {   
            //looks to see if the selected slot has a "O" and if so prints out either a "R" or a "Y" dependent of what player you are
            if (column3[i].equals("O")) 
            {
                column3[i] = tokenColor;
                placed = true;
                break;
            }

        }
        //if a whole column if filled with "R"s or "Y"s tell the user to choose a different column
        if (!placed)
        {
            System.out.println("Sorry that column is full. Choose another column");
            tokenPlacement(tokenColor,column7);
        }
    }



    else if (columnChoice == 4)
    {
        for (int i=0; i<=5; i++) 
        {   
            //looks to see if the selected slot has a "O" and if so prints out either a "R" or a "Y" dependent of what player you are
            if (column4[i].equals("O")) 
            {
                column4[i] = tokenColor;
                placed = true;
                break;
            }

        }
        //if a whole column if filled with "R"s or "Y"s tell the user to choose a different column
        if (!placed)
        {
            System.out.println("Sorry that column is full. Choose another column");
            tokenPlacement(tokenColor,column7);
        }
    }




    else if (columnChoice == 5)
    {
        for (int i=0; i<=5; i++) 
        {   
            if (column5[i].equals("O")) 
            {
                column5[i] = tokenColor;
                placed = true;
                break;
            }

        }
        //if a whole column if filled with "R"s or "Y"s tell the user to choose a different column
        if (!placed)
        {
            System.out.println("Sorry that column is full. Choose another column");
            tokenPlacement(tokenColor,column7);
        }
    }




    else if (columnChoice == 6)
    {
        for (int i=0; i<=5; i++) 
        {   
            //looks to see if the selected slot has a "O" and if so prints out either a "R" or a "Y" dependent of what player you are
            if (column6[i].equals("O")) 
            {
                column6[i] = tokenColor;
                placed = true;
                break;
            }

        }
        //if a whole column if filled with "R"s or "Y"s tell the user to choose a different column
        if (!placed)
        {
            System.out.println("Sorry that column is full. Choose another column");
            tokenPlacement(tokenColor,column7);
        }
    }



    else if (columnChoice == 7)
    {
        for (int i=0; i<=5; i++) 
        {   
            //looks to see if the selected slot has a "O" and if so prints out either a "R" or a "Y" dependent of what player you are
            if (column7[i].equals("O")) 
            {
                column7[i] = tokenColor;
                placed = true;
                break;
            }

        }
        //if a whole column if filled with "R"s or "Y"s tell the user to choose a different column
        if (!placed)
        {
            System.out.println("Sorry that column is full. Choose another column");
            tokenPlacement(tokenColor,column7);
        }
    }








}//end tokenPlacement



}//end main

解决方法

为水平检查,垂直检查,向上对角线检查和向下对角线检查编写单独的方法。为每个板位调用4种方法。 – Gilbert Le Blanc 10小时前

 public static void main(String[] args) {
   String [] [] board = new String[6][7];

   //set everything on the board to zero
    for (int i =0; i< board.length; i++) {
        for (int j = 0; j < board[i].length; j++) {
            board[i][j] = "0";
        }
        System.out.println();
    }
    //assign a random winning situation
    board[3][2] = "Y";
    board[3][3] = "Y";
    board[3][4] = "Y";
    board[3][5] = "Y";
    board[3][1] = "R";
    board[2][2] = "R";
    board[1][3] = "R";
    board[0][4] = "R";
    board[4][5] = "Y";
    board[3][4] = "Y";
    board[2][3] = "Y";
    board[1][2] = "Y";
    board[3][1] = "R";
    board[2][1] = "R";
    board[1][1] = "R";
    board[0][1] = "R";
    board[2][5] = "Y";
    board[1][5] = "Y";
    board[4][3] = "Y";
    board[5][2] = "Y";
    //print board
    printBoard(board);
    //check for right row
    System.out.println(isRightRowContain4(board,3,2));
    //check for up-right-diagonal
    System.out.println(isUpRightDiagonalContain4(board,1));
    //check for up-left-diagonal
    System.out.println(isUpLeftDiagonalContain4(board,4,5));
    //check for up-column
    System.out.println(isUpColumnContain4(board,1));
    //check for down-column
    System.out.println(isDownColumnContain4(board,1,5));
    //check for left row
    System.out.println(isLeftRowContain4(board,5));
    //down-left-diagonal
    System.out.println(isDownLeftDiagonalContain4(board,2,5));
    //down-right-diagonal
    System.out.println(isDownRightDiagonalContain4(board,2));
}
public static void printBoard(String [][] board){
    for (int i =0; i< board.length; i++){
        for(int j=0; j<board[i].length; j++){
           System.out.print(board[i][j]+" ");
        }
        System.out.println();
    }
}

public static boolean isRightRowContain4(String [] [] board,int row,int col){
    boolean result = false;
    int count =0;
    String tokenValue = board[row][col];

    for(int k=0; k<4; k++) {
        if (tokenValue.equalsIgnoreCase(board[row][col + k])) {
            count++;
        }
    }
       if (count == 4)
           result = true;

    return result;
}
public static boolean isLeftRowContain4(String [] [] board,int col){
    boolean result = false;
    int count =0;
    String tokenValue = board[row][col];

    for(int k=0; k<4; k++) {
        if (tokenValue.equalsIgnoreCase(board[row][col - k])) {
            count++;
        }
    }
    if (count == 4)
        result = true;

    return result;
}
public static boolean isUpRightDiagonalContain4(String [] [] board,int col){
    boolean result = false;
    int count =0;
    String tokenValue = board[row][col];
    for(int k=0; k<4; k++) {
        if (tokenValue.equalsIgnoreCase(board[row-k][(col+k)])) {
                count++;
        }
    }
    if (count == 4)
        result = true;

    return result;
}
public static boolean isUpLeftDiagonalContain4(String [] [] board,int col){
    boolean result = false;
    int count =0;
    String tokenValue = board[row][col];
    for(int k=0; k<4; k++) {
        if (tokenValue.equalsIgnoreCase(board[row-k][(col-k)])) {
            count++;
        }
    }
    if (count == 4)
        result = true;

    return result;
}
public static boolean isUpColumnContain4(String [] [] board,int col) {
    boolean result = false;
    int count = 0;
    String tokenValue = board[row][col];
    for (int k = 0; k < 4; k++) {
        if (tokenValue.equalsIgnoreCase(board[row - k][col])) {
            count++;
        }
    }
    if (count == 4)
        result = true;

    return result;
}
public static boolean isDownColumnContain4(String [] [] board,int col) {
    boolean result = false;
    int count = 0;
    String tokenValue = board[row][col];
    for (int k = 0; k < 4; k++) {
        if (tokenValue.equalsIgnoreCase(board[row + k][col])) {
            count++;
        }
    }
    if (count == 4)
        result = true;

    return result;
}
public static boolean isDownRightDiagonalContain4(String [] [] board,int col){
    boolean result = false;
    int count =0;
    String tokenValue = board[row][col];
    for(int k=0; k<4; k++) {
        if (tokenValue.equalsIgnoreCase(board[row+k][(col+k)])) {
            count++;
        }
    }
    if (count == 4)
        result = true;

    return result;
}
public static boolean isDownLeftDiagonalContain4(String [] [] board,int col){
    boolean result = false;
    int count =0;
    String tokenValue = board[row][col];
    for(int k=0; k<4; k++) {
        if (tokenValue.equalsIgnoreCase(board[row+k][(col-k)])) {
            count++;
        }
    }
    if (count == 4)
        result = true;

    return result;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。