无法获得连接4的垂直检测

时间:2012-09-25 23:21:43

标签: java arrays

现在我有一个学校作业,我必须在java中创建一个连接4游戏而没有使用数组的gui。到目前为止,我已经能够让游戏连续四次检测水平,但我似乎无法连续四次获得垂直。最初我的阵列是一个6x7,但我已经将它改为5x5,只是为了测试交换数组dementions的概念。为了减少混乱,我只在垂直检测中包含了部分代码。

for (column = 0; column < board.length; column++) {

            count_piece = 0;
            max = 0;
            for (row = 0; row < board.length; row++) {
                if (max < count_piece) {
                    max = count_piece;
                }
                if (board[column][row] == 'X') {
                    count_piece++;
                } else {
                    count_piece = 0;
                }

            }

        }
        System.out.println(max);
        if (max == 4) {
            System.out.println("\nYou Win!");
            break;
        }

如果您需要更多信息或有任何不清楚的地方,请告诉我,我很乐意提供更多信息。

编辑: 这是倒环的那个。

for (row = 0; row < board.length; row++) {
        count_piece = 0;
        max = 0;
        for (column = 0; column < board.length; column++) {

            if (max < count_piece) {
                max = count_piece;
            }
            if (board[column][row] == 'X') {
                count_piece++;
            } else {
                count_piece = 0;
            }

        }

    }

2 个答案:

答案 0 :(得分:2)

如何以内部循环更改的方式反转循环,而不是行?

还要使你的内部循环占用你所在的单个数组的长度。

因此,不要使用board.length,而是使用board[i].length

之类的内容

修改

我认为你内心循环中的逻辑是错误的......

试试这个:

if (board[row][column] == 'X') {
    count_piece++;
    if(count_piece == 4) {
        System.out.println("you win");
        return;
    }
} else {
    count_piece = 0;
}

这里有水平和垂直的检查,任何大小的数组

int count_piece = 0;

        //Checking Vertical Win
        for (int row = 0; row < board.length; row++) {
            count_piece = 0;
            for (int column = 0; column < board[row].length; column++) {

                if (board[row][column] == 'X') {
                    count_piece++;
                    if (count_piece == 4) {
                        System.out.println("you win");
                        return;
                    }

                } else {
                    count_piece = 0;
                }


            }
        }

        //Checking Horizontal Win
        for (int column = 0; column < board.length; column++) {
            count_piece = 0;
            for (int row = 0; row < board[column].length; row++) {

                if (board[row][column] == 'X') {
                    count_piece++;
                    if (count_piece == 4) {
                        System.out.println("you win");
                        return;
                    }

                } else {
                    count_piece = 0;
                }


            }
        }

答案 1 :(得分:0)

我看到的主要问题是在递增count_piece之前分配max(意味着你必须连续获得5个)。 另外,正如其他人所说的长度可能有问题(不熟悉java,所以你可以侥幸使用它,因为长度将是5或25,取决于它是否需要所有索引或只是第一列索引。无论你何时回到6x7它会打破。 您的代码当前正在执行的操作是遍历每一列并检查该行是否连续4行。你想要的是检查两个轴上的连续4个(我的解决方案是有一个行计数变量和一个列计数变量(除非你需要对角线))。 加入 count_piece_Col = 0;最大= 0; 在第一个for循环之上,并将其递增,类似于行计数

*懒惰的方式

    for(column=0;column<board.length;column++)   
            {
                count_piece=0; max_r=0;
                for(row=0;row<board.length;row++)
                {

                if(max_r<count_piece) 
                    {
                        max_r=count_piece;
                    }
                    if(board[column][row]=='X')
                    {
                        count_piece++;
                    }
                    else
                    {
                        count_piece=0;
                    }

            }

        }   
    for(row=0;row<board.length;row++)   
            {
                count_piece=0; max_c=0;
                for(column=0;column<board.length;column++)
                {

                if(max_c<count_piece) 
                    {
                        max_c=count_piece;
                    }
                    if(board[column][row]=='X')
                    {
                        count_piece++;
                    }
                    else
                    {
                        count_piece=0;
                    }

            }

        }