在第6列中丢弃硬币时,Java连接四个Diagonal win错误和错误

时间:2018-06-17 21:38:16

标签: java multidimensional-array

我是java的新手,并且有一项任务要求我制作一个connect4游戏。我的代码中的所有内容都完美无缺,除了对角线之外,由于某些原因我无法在第6列中输入硬币。此外,如果发现任何其他错误,请同样指出!任何帮助将不胜感激。谢谢!

public class Connect4 {

    /**
     * @param args the command line arguments
     */
    public static void displayGrid(char [][]connectfourGrid){
       for(int i=0;i<connectfourGrid.length;i++)
       {
           for(int j=0;j<connectfourGrid[i].length;j++)
               System.out.print("|"+connectfourGrid[i][j]);
           System.out.println("|");
       }
       for(int i=0;i<connectfourGrid.length-1;i++)
            System.out.print("---");
        System.out.println("");

    }
    public static void playConnect4(char[][]connectfourGrid){
        Scanner input = new Scanner(System.in);
        boolean gameOver=false;
        boolean playersTurn = true;
        int columnPos = 0;
        char colour;
        while(!gameOver){
            if(playersTurn){
                System.out.print("Drop a red coin at column 0-6:");
                colour = 'R';         
            }
            else{
                System.out.print("Drop a yellow coin at column 0-6:");
                colour = 'Y';
            }
            columnPos = input.nextByte();
            while(columnPos<0||columnPos>6){
                System.out.println("C'est out of bounds. "+colour+" please enter again mate");
                columnPos=input.nextByte();
            }
            playersTurn = !playersTurn;
            if(dropCoin(connectfourGrid, columnPos, colour))
                playersTurn=!playersTurn;
            else{
                displayGrid(connectfourGrid);
                if(gameStatus(connectfourGrid,columnPos,colour)){
                    gameOver=true;
                    System.out.println(colour+" won!");
                }
                else if(checkTie(connectfourGrid)){
                    gameOver = true;
                    System.out.println("C'est a tie!");
                }
            }

        }
    }
    public static boolean checkTie(char[][]connectfourGrid){
        for(int i=0;i<connectfourGrid[0].length;i++)
            if(connectfourGrid[0][i]==0)
                return false;
        return true;
    }
    public static boolean gameStatus(char[][]connectfourGrid,int columnPos,char colour){
        int rowPos=0;
        for(int i=0;i<connectfourGrid.length;i++)
            if(connectfourGrid[i][columnPos]!=0){
                rowPos = i;
                break;
            }
        if(checkCol(connectfourGrid,columnPos,colour,rowPos))
            return true;
        if(checkRow(connectfourGrid,columnPos,colour,rowPos))
            return true;
        if(checkMajorDiagonal(connectfourGrid,columnPos,colour,rowPos))
            return true;
        if(checkMinorDiagonal(connectfourGrid,columnPos,colour,rowPos))
            return true;

        return false;
    }
    public static boolean checkMajorDiagonal(char[][]connectfourGrid,int columnPos,char colour,int rowPos){
     int count=1;
     for(int i=rowPos-1,j=columnPos-1;i>=0&&j>=0;i--,j--)
         if(colour==connectfourGrid[i][j])
             return true;
         else 
             break;
     if(count>=4)
         return true;
      for(int i=rowPos+1,j=columnPos+1;i<connectfourGrid.length&&j<connectfourGrid[0].length;i++,j++)
         if(colour==connectfourGrid[i][j])
             return true;
         else 
             break;
     if(count>=4)
         return true;

    /* for(int i=rowPos-1;i>=0;i--)
        for(int j=columnPos-1;j>=0;j--)
            if(colour==connectfourGrid[i][j])
                count++;
            else 
                break;
     if(count>=4)
         return true;
     for(int i=rowPos+1;i<connectfourGrid.length;i++)
         for(int j=columnPos+1;j<connectfourGrid[0].length;j++)
            if(colour==connectfourGrid[i][j])
                return true;
            else 
                break;
     if(count>=4)
         return true;*/

     return false;
    }
    public static boolean checkMinorDiagonal(char[][]connectfourGrid,int columnPos,char colour,int rowPos){
        int count=1;
        for(int i=rowPos+1,j=columnPos-1;i<connectfourGrid.length&&j>=0;i++,j--)
            if(colour==connectfourGrid[i][j])
                count++;
            else 
                break;
        if(count>=4)
            return true;
        for(int i=rowPos-1,j=columnPos+1;i>=0&&j<connectfourGrid[0].length;i--,j++)
            if(colour==connectfourGrid[i][j])
                count++;
            else 
                break;
        if(count>=4)
            return true;

        /*for(int i=rowPos+1;i<connectfourGrid.length;i++)
            for(int j=columnPos-1;j>=0;j--)
                if(colour==connectfourGrid[i][j])
                    count++;
                else 
                    break;
        if(count>=4)
            return true;
        for(int i=rowPos-1;i>=0;i--)
            for(int j=columnPos+1;i<connectfourGrid[0].length;j++)
                if(colour==connectfourGrid[i][j])
                    count++;
                else 
                    break;
        if(count>=4)
            return true;*/


        return false;  
    }

    public static boolean checkRow(char[][]connectfourGrid,int columnPos,char colour,int rowPos){
        int count=1;
        for(int i=columnPos-1;i>=0;i--)
            if(colour==connectfourGrid[rowPos][i])
                count++;
            else 
                break;
        if(count>=4)
            return true;

        for(int i=columnPos+1;i<connectfourGrid[0].length;i++)
            if(colour==connectfourGrid[rowPos][i])
                count++;
            else 
                break;
        if(count>=4)
            return true;

        return false;
    }
    public static boolean checkCol(char [][]connectfourGrid,int columnPos,char colour,int rowPos){
        int count=1;
        if((rowPos+4)<=6)
            for(int i=rowPos+1;i<=(rowPos+3);i++)
                if(colour==connectfourGrid[i][columnPos])
                    count++;
                else 
                    break;
        if(count==4)
            return true;
        return false;

    }
    public static boolean dropCoin(char[][]connectfourGrid, int columnPos,char colour){
        for(int i=connectfourGrid.length-1;i>=0;i--)
            if(connectfourGrid[i][columnPos]==0){
                connectfourGrid[i][columnPos]=colour;
                return false;
            }
        System.out.println("C'est full. "+colour+" try again mate!");

        return true;
    }
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner input = new Scanner(System.in);
        char[][]connectfourGrid = new char [6][7];
        displayGrid(connectfourGrid);
        playConnect4(connectfourGrid);



    }

}

1 个答案:

答案 0 :(得分:0)

这似乎没有意义......

public static boolean checkMajorDiagonal(char[][] connectfourGrid, int columnPos, char colour, int rowPos) {
    int count = 1;
    System.out.println(columnPos + "x" + rowPos);
    for (int i = rowPos - 1, j = columnPos - 1; i >= 0 && j >= 0; i--, j--) {
        if (colour == connectfourGrid[i][j]) {
            return true;
        } else {
            break;
        }
    }
    if (count >= 4) {
        return true;
    }
    for (int i = rowPos + 1, j = columnPos + 1; i < connectfourGrid.length && j < connectfourGrid[0].length; i++, j++) {
        if (colour == connectfourGrid[i][j]) {
            return true;
        } else {
            break;
        }
    }
    if (count >= 4) {
        return true;
    }
    return false;
}

当您找到具有匹配颜色的单元格时,您将返回true,如果还有其他匹配的硬币,则不会考虑这些硬币,以形成获胜条件。< / p>

甚至更奇怪的是,您已经设置了代码来检查&#34;匹配&#34;的数量,但是没有使用它们。

所以,当我把它改成......时,

public static boolean checkMajorDiagonal(char[][] connectfourGrid, int columnPos, char colour, int rowPos) {
    int count = 1;
    System.out.println(columnPos + "x" + rowPos);
    for (int i = rowPos - 1, j = columnPos - 1; i >= 0 && j >= 0; i--, j--) {
        if (colour == connectfourGrid[i][j]) {
            //return true;
            count++;
        } else {
            break;
        }
    }
    if (count >= 4) {
        return true;
    }
    for (int i = rowPos + 1, j = columnPos + 1; i < connectfourGrid.length && j < connectfourGrid[0].length; i++, j++) {
        if (colour == connectfourGrid[i][j]) {
            //return true;
            count++;
        } else {
            break;
        }
    }
    if (count >= 4) {
        return true;
    }
    return false;
}

我得到了它(在我的有限测试中)。

除了checkMinorDiagonal之外,你似乎做得更奇怪了。

我也没有问题将硬币输入第6列