Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 主要/次要对角线和row在connect four项目中未注册为胜利_Java - Fatal编程技术网

Java 主要/次要对角线和row在connect four项目中未注册为胜利

Java 主要/次要对角线和row在connect four项目中未注册为胜利,java,Java,我已经在这个connect four项目上工作了将近一个星期了,我想我已经完成了,但是如果4个筹码以正确的模式放置,我无法将主对角线、次对角线或行注册为胜利 import java.util.Scanner; public class connect4 { public static void main(String args[]) { char[][] connectFourGrid= new char[6][7]; displayGrid(connectFourGrid);

我已经在这个connect four项目上工作了将近一个星期了,我想我已经完成了,但是如果4个筹码以正确的模式放置,我无法将主对角线、次对角线或行注册为胜利

import java.util.Scanner;

public class connect4
{
public static void main(String args[])
{
    char[][] connectFourGrid= new char[6][7];
    displayGrid(connectFourGrid);
    playConnectFour(connectFourGrid);
}




      //Plays the game 




public static void playConnectFour(char[][] connectFourGrid)
{   
    Scanner input = new Scanner(System.in);
    boolean gameOver = false, playersTurn = true;
    int columnPosition = 0;
    char chipColor;
    while(!gameOver)
    {
        if(playersTurn)
        {
            System.out.print("Drop a an 'x' in column (0,6):");
            chipColor = 'X';
        }
        else
        {   
            System.out.print("Drop a an 'o' in column (0,6):");
            chipColor = 'O';
        }
        columnPosition = input.nextInt();
        while(columnPosition < 0 || columnPosition > 6)
        {
            System.out.print("Column Position must be between 0 to 6, try again");
            columnPosition = input.nextInt();
        }
        playersTurn = !playersTurn;

        if (dropChip(connectFourGrid, columnPosition, chipColor))        
            playersTurn = !playersTurn;
        else
        {
            displayGrid(connectFourGrid);

            if(gameStatus(connectFourGrid, columnPosition, chipColor))
            {
                gameOver = true;
                System.out.print(chipColor + " won! game over.");
            }
            else if(checkTie(connectFourGrid))
            {
                gameOver = true;
                System.out.print("It's a tie!");
            }
        }

    }

    input.close();
}



/**
 * This is where the check for a tie takes place
 */


public static boolean checkTie(char[][] connectFourGrid)
{
    for(int i = 0; i < connectFourGrid[0].length; i++)
        if(connectFourGrid[0][i] == 0)
            return false;

    return true;

/**
 * This is where the gameStatus will update if 4 x's or o's are found horizontally, vertically or diagonally    
 */


}
public static boolean gameStatus(char[][] connectFourGrid, int columnPosition, char chipColor)
{
    int rowPosition = 0;

    for (int i = 0; i < connectFourGrid.length; i++)
        if (connectFourGrid[i][columnPosition] != 0)
    {
        rowPosition = 1;
        break;

    }
    if(checkColumn(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;
    if(checkRow(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;
    if(checkMajorDiagonal(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;
    if(checkMinorDiagonal(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;

    return false;
}




/*
 * checks for four chips in minor diagonal
 */



public static boolean checkMinorDiagonal(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    for(int i = rowPosition + 1, j = columnPosition - 1; i < connectFourGrid.length && j>= 0; i++, j--)
        if(chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    for(int i = rowPosition - 1, j = columnPosition + 1; i >= 0 && j < connectFourGrid[0].length; i--, j++)
        if (chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    return false;
}

/*
 * checks for four chips in major diagonal
 */

public static boolean checkMajorDiagonal(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    for(int i = rowPosition - 1, j = columnPosition - 1; i < 0 && j >= 0; i--, j--)
        if (chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    for(int i = rowPosition + 1, j = columnPosition + 1; i < connectFourGrid.length && j < connectFourGrid[0].length; i++, j++)
        if (chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    return false;
}



/*
 * checks for four chips in a row
 */





public static boolean checkRow(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    for (int i = columnPosition - 1; i >= 0; i--)
        if (chipColor == connectFourGrid[rowPosition][i])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    for(int i = columnPosition + 1; i < connectFourGrid[0].length; i++)
        if (chipColor == connectFourGrid[rowPosition][i])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;


    return false;
}


/*
 * checks for four chips in a column
 */




public static boolean checkColumn(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    if ((rowPosition + 4) <=6)
        for (int i = rowPosition + 1; i <= (rowPosition + 3); i++)
            if(chipColor == connectFourGrid[i][columnPosition])
                chipCounter++;
            else 
                break;
    if(chipCounter == 4)
        return true;

    return false;
}




/**
 * Drops a chip to bottom of column picked, if the column is full asks to place again
 */ 

public static boolean dropChip(char[][] connectFourGrid, int columnPosition, char chipColor)
{
    for (int i = connectFourGrid.length - 1; i >= 0; i--)
        if (connectFourGrid[i][columnPosition] == 0)
        {  
            connectFourGrid[i][columnPosition] = chipColor;
            return false;
        }
    System.out.println("Column is full, " + chipColor + " player, try again");
    return true;
}



//Displays the grid





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; i++);
        System.out.print("---");
    System.out.println();
}
}
如果我能请别人看一下我的代码,让我知道我做错了什么,我会非常感激

import java.util.Scanner;

public class connect4
{
public static void main(String args[])
{
    char[][] connectFourGrid= new char[6][7];
    displayGrid(connectFourGrid);
    playConnectFour(connectFourGrid);
}




      //Plays the game 




public static void playConnectFour(char[][] connectFourGrid)
{   
    Scanner input = new Scanner(System.in);
    boolean gameOver = false, playersTurn = true;
    int columnPosition = 0;
    char chipColor;
    while(!gameOver)
    {
        if(playersTurn)
        {
            System.out.print("Drop a an 'x' in column (0,6):");
            chipColor = 'X';
        }
        else
        {   
            System.out.print("Drop a an 'o' in column (0,6):");
            chipColor = 'O';
        }
        columnPosition = input.nextInt();
        while(columnPosition < 0 || columnPosition > 6)
        {
            System.out.print("Column Position must be between 0 to 6, try again");
            columnPosition = input.nextInt();
        }
        playersTurn = !playersTurn;

        if (dropChip(connectFourGrid, columnPosition, chipColor))        
            playersTurn = !playersTurn;
        else
        {
            displayGrid(connectFourGrid);

            if(gameStatus(connectFourGrid, columnPosition, chipColor))
            {
                gameOver = true;
                System.out.print(chipColor + " won! game over.");
            }
            else if(checkTie(connectFourGrid))
            {
                gameOver = true;
                System.out.print("It's a tie!");
            }
        }

    }

    input.close();
}



/**
 * This is where the check for a tie takes place
 */


public static boolean checkTie(char[][] connectFourGrid)
{
    for(int i = 0; i < connectFourGrid[0].length; i++)
        if(connectFourGrid[0][i] == 0)
            return false;

    return true;

/**
 * This is where the gameStatus will update if 4 x's or o's are found horizontally, vertically or diagonally    
 */


}
public static boolean gameStatus(char[][] connectFourGrid, int columnPosition, char chipColor)
{
    int rowPosition = 0;

    for (int i = 0; i < connectFourGrid.length; i++)
        if (connectFourGrid[i][columnPosition] != 0)
    {
        rowPosition = 1;
        break;

    }
    if(checkColumn(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;
    if(checkRow(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;
    if(checkMajorDiagonal(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;
    if(checkMinorDiagonal(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;

    return false;
}




/*
 * checks for four chips in minor diagonal
 */



public static boolean checkMinorDiagonal(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    for(int i = rowPosition + 1, j = columnPosition - 1; i < connectFourGrid.length && j>= 0; i++, j--)
        if(chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    for(int i = rowPosition - 1, j = columnPosition + 1; i >= 0 && j < connectFourGrid[0].length; i--, j++)
        if (chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    return false;
}

/*
 * checks for four chips in major diagonal
 */

public static boolean checkMajorDiagonal(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    for(int i = rowPosition - 1, j = columnPosition - 1; i < 0 && j >= 0; i--, j--)
        if (chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    for(int i = rowPosition + 1, j = columnPosition + 1; i < connectFourGrid.length && j < connectFourGrid[0].length; i++, j++)
        if (chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    return false;
}



/*
 * checks for four chips in a row
 */





public static boolean checkRow(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    for (int i = columnPosition - 1; i >= 0; i--)
        if (chipColor == connectFourGrid[rowPosition][i])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    for(int i = columnPosition + 1; i < connectFourGrid[0].length; i++)
        if (chipColor == connectFourGrid[rowPosition][i])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;


    return false;
}


/*
 * checks for four chips in a column
 */




public static boolean checkColumn(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    if ((rowPosition + 4) <=6)
        for (int i = rowPosition + 1; i <= (rowPosition + 3); i++)
            if(chipColor == connectFourGrid[i][columnPosition])
                chipCounter++;
            else 
                break;
    if(chipCounter == 4)
        return true;

    return false;
}




/**
 * Drops a chip to bottom of column picked, if the column is full asks to place again
 */ 

public static boolean dropChip(char[][] connectFourGrid, int columnPosition, char chipColor)
{
    for (int i = connectFourGrid.length - 1; i >= 0; i--)
        if (connectFourGrid[i][columnPosition] == 0)
        {  
            connectFourGrid[i][columnPosition] = chipColor;
            return false;
        }
    System.out.println("Column is full, " + chipColor + " player, try again");
    return true;
}



//Displays the grid





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; i++);
        System.out.print("---");
    System.out.println();
}
}
import java.util.Scanner;
公共类连接4
{
公共静态void main(字符串参数[])
{
char[]connectFourGrid=new char[6][7];
显示网格(connectFourGrid);
playConnectFour(connectFourGrid);
}
//玩游戏
公共静态void playConnectFour(char[][]connectFourGrid)
{   
扫描仪输入=新扫描仪(System.in);
布尔gameOver=false,playersTurn=true;
int columnPosition=0;
炭屑颜色;
而(!gameOver)
{
如果(球员轮换)
{
系统输出打印(“在第(0,6)列中放置一个“x”:;
chipColor='X';
}
其他的
{   
系统输出打印(“在第(0,6)列中删除一个“o”);
chipColor='O';
}
columnPosition=input.nextInt();
而(columnPosition<0 | | columnPosition>6)
{
System.out.print(“列位置必须介于0到6之间,请重试”);
columnPosition=input.nextInt();
}
playersTurn=!playersTurn;
if(dropChip(connectFourGrid、columnPosition、chipColor))
playersTurn=!playersTurn;
其他的
{
显示网格(connectFourGrid);
if(游戏状态(connectFourGrid、columnPosition、chipColor))
{
gameOver=true;
系统输出打印(chipColor+“赢了!游戏结束”);
}
否则如果(勾选(连接四格))
{
gameOver=true;
System.out.print(“这是一条领带!”);
}
}
}
input.close();
}
/**
*这是检查领带的地方
*/
公共静态布尔校验(char[][]connectFourGrid)
{
对于(int i=0;i=0;i++,j--)
如果(chipColor==connectFourGrid[i][j])
芯片计数器++;
其他的
打破
如果(芯片计数器>=4)
返回true;
对于(int i=rowPosition-1,j=columnPosition+1;i>=0&&j=4)
返回true;
返回false;
}
/*
*检查主对角线上是否有四个缺口
*/
公共静态布尔checkMajorDagonal(char[][]connectFourGrid,int-columnPosition,char-chipColor,int-rowPosition)
{
int芯片计数器=1;
对于(int i=行位置-1,j=列位置-1;i<0&&j>=0;i--,j--)
如果(chipColor==connectFourGrid[i][j])
芯片计数器++;
其他的
打破
如果(芯片计数器>=4)
返回true;
对于(int i=rowPosition+1,j=columnPosition+1;i=4)
返回true;
返回false;
}
/*
*连续检查四个芯片
*/
公共静态布尔校验行(char[][]connectFourGrid,int-columnPosition,char-chipColor,int-rowPosition)
{
int芯片计数器=1;
对于(int i=columnPosition-1;i>=0;i--)
如果(chipColor==connectFourGrid[rowPosition][i])
芯片计数器++;
其他的
打破
如果(芯片计数器>=4)
返回true;
对于(int i=columnPosition+1;i=4)
返回true;
返回false;
}
/*
*在一列中检查四个芯片
*/
公共静态布尔checkColumn(char[][]connectFourGrid,int-columnPosition,char-chipColor,int-rowPosition)
{
int芯片计数器=1;

如果((rowPosition+4)方法中的
gameStatus
部分导致您的问题:

import java.util.Scanner;

public class connect4
{
public static void main(String args[])
{
    char[][] connectFourGrid= new char[6][7];
    displayGrid(connectFourGrid);
    playConnectFour(connectFourGrid);
}




      //Plays the game 




public static void playConnectFour(char[][] connectFourGrid)
{   
    Scanner input = new Scanner(System.in);
    boolean gameOver = false, playersTurn = true;
    int columnPosition = 0;
    char chipColor;
    while(!gameOver)
    {
        if(playersTurn)
        {
            System.out.print("Drop a an 'x' in column (0,6):");
            chipColor = 'X';
        }
        else
        {   
            System.out.print("Drop a an 'o' in column (0,6):");
            chipColor = 'O';
        }
        columnPosition = input.nextInt();
        while(columnPosition < 0 || columnPosition > 6)
        {
            System.out.print("Column Position must be between 0 to 6, try again");
            columnPosition = input.nextInt();
        }
        playersTurn = !playersTurn;

        if (dropChip(connectFourGrid, columnPosition, chipColor))        
            playersTurn = !playersTurn;
        else
        {
            displayGrid(connectFourGrid);

            if(gameStatus(connectFourGrid, columnPosition, chipColor))
            {
                gameOver = true;
                System.out.print(chipColor + " won! game over.");
            }
            else if(checkTie(connectFourGrid))
            {
                gameOver = true;
                System.out.print("It's a tie!");
            }
        }

    }

    input.close();
}



/**
 * This is where the check for a tie takes place
 */


public static boolean checkTie(char[][] connectFourGrid)
{
    for(int i = 0; i < connectFourGrid[0].length; i++)
        if(connectFourGrid[0][i] == 0)
            return false;

    return true;

/**
 * This is where the gameStatus will update if 4 x's or o's are found horizontally, vertically or diagonally    
 */


}
public static boolean gameStatus(char[][] connectFourGrid, int columnPosition, char chipColor)
{
    int rowPosition = 0;

    for (int i = 0; i < connectFourGrid.length; i++)
        if (connectFourGrid[i][columnPosition] != 0)
    {
        rowPosition = 1;
        break;

    }
    if(checkColumn(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;
    if(checkRow(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;
    if(checkMajorDiagonal(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;
    if(checkMinorDiagonal(connectFourGrid, columnPosition, chipColor,rowPosition))
        return true;

    return false;
}




/*
 * checks for four chips in minor diagonal
 */



public static boolean checkMinorDiagonal(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    for(int i = rowPosition + 1, j = columnPosition - 1; i < connectFourGrid.length && j>= 0; i++, j--)
        if(chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    for(int i = rowPosition - 1, j = columnPosition + 1; i >= 0 && j < connectFourGrid[0].length; i--, j++)
        if (chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    return false;
}

/*
 * checks for four chips in major diagonal
 */

public static boolean checkMajorDiagonal(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    for(int i = rowPosition - 1, j = columnPosition - 1; i < 0 && j >= 0; i--, j--)
        if (chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    for(int i = rowPosition + 1, j = columnPosition + 1; i < connectFourGrid.length && j < connectFourGrid[0].length; i++, j++)
        if (chipColor == connectFourGrid[i][j])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    return false;
}



/*
 * checks for four chips in a row
 */





public static boolean checkRow(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    for (int i = columnPosition - 1; i >= 0; i--)
        if (chipColor == connectFourGrid[rowPosition][i])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;

    for(int i = columnPosition + 1; i < connectFourGrid[0].length; i++)
        if (chipColor == connectFourGrid[rowPosition][i])
            chipCounter++;
        else
            break;

    if (chipCounter >= 4)
        return true;


    return false;
}


/*
 * checks for four chips in a column
 */




public static boolean checkColumn(char[][] connectFourGrid, int columnPosition, char chipColor, int rowPosition)
{
    int chipCounter = 1;

    if ((rowPosition + 4) <=6)
        for (int i = rowPosition + 1; i <= (rowPosition + 3); i++)
            if(chipColor == connectFourGrid[i][columnPosition])
                chipCounter++;
            else 
                break;
    if(chipCounter == 4)
        return true;

    return false;
}




/**
 * Drops a chip to bottom of column picked, if the column is full asks to place again
 */ 

public static boolean dropChip(char[][] connectFourGrid, int columnPosition, char chipColor)
{
    for (int i = connectFourGrid.length - 1; i >= 0; i--)
        if (connectFourGrid[i][columnPosition] == 0)
        {  
            connectFourGrid[i][columnPosition] = chipColor;
            return false;
        }
    System.out.println("Column is full, " + chipColor + " player, try again");
    return true;
}



//Displays the grid





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; i++);
        System.out.print("---");
    System.out.println();
}
}
int rowPosition = 0;

for (int i = 0; i < connectFourGrid.length; i++)
    if (connectFourGrid[i][columnPosition] != 0)
{
    rowPosition = 1;
    break;

}

我已经解决了这个问题。谢谢你指出我把事情搞砸了,我所需要做的就是把rowPosition设置为“I”,而不是1。