1

現在、配列を使用して GUI を使用せずに Java で Connect 4 ゲームを作成する必要がある学校の課題があります。これまでのところ、ゲームで横方向の 4 つが連続していることを検出できましたが、縦方向の 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 に答える