1

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

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;
            }

        }

    }
4

2 回答 2

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;
                }


            }
        }
于 2012-09-25T23:25:32.813 回答
0

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

*懒惰的方式

    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;
                    }

            }

        }   
于 2012-09-25T23:28:40.620 回答