首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java connect four Diagonal win错误和在第6列中丢硬币时的错误

Java connect four Diagonal win错误和在第6列中丢硬币时的错误
EN

Stack Overflow用户
提问于 2018-06-18 05:38:16
回答 1查看 31关注 0票数 0

我是java新手,有一个任务要求我做一个connect4游戏。我的代码中的所有东西都工作得很好,除了对角线和出于某种原因我不能在第6栏中输入硬币。另外,如果发现任何其他错误,请指出这一点!任何帮助都将不胜感激。谢谢!

代码语言:javascript
运行
复制
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);



    }

}
EN

回答 1

Stack Overflow用户

发布于 2018-06-18 05:52:40

这似乎没有道理..。

代码语言:javascript
运行
复制
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,它不会考虑是否有其他匹配的硬币,这是形成获胜条件所必需的。

更奇怪的是,你已经设置了代码来检查“匹配”的数量,但并没有使用它们。

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

代码语言:javascript
运行
复制
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做了正确的事情。

我把硬币放到第六列也没问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50900666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档