0

ビンゴ ゲーム用にこの静的メソッドを作成しました。

public static void bingoCard(){

    int [][]card = new int [5][5];
    ArrayList<Integer> alreadyUsed = new ArrayList<Integer>();
    boolean valid = false;

    // First row
    for(int row = 0; row < card.length; row++){
        int tmp = 0;
        while(!valid){
            tmp = (int)(Math.random()*15)+1;
            if(!alreadyUsed.contains(tmp)){
                valid = true;
                alreadyUsed.add(tmp);
            }
        }
        card[row][0] = tmp;
        valid = false;
    }

    // Second row
    for(int row = 0; row < card.length; row++){
        int tmp = 0;
        while(!valid){
            tmp = (int)(Math.random()*15)+1;
            if(!alreadyUsed.contains(tmp)){
                valid = true;
                alreadyUsed.add(tmp);
            }
        }
        card[row][1] = tmp;
        valid = false;
    }

    // Third row
    for(int row = 0; row < card.length; row++){
        int tmp = 0;
        while(!valid){
            tmp = (int)(Math.random()*15)+1;
            if(!alreadyUsed.contains(tmp)){
                valid = true;
                alreadyUsed.add(tmp);
            }
        }
        card[row][2] = tmp;
        valid = false;
    }

    card[2][2] = 0; // The 3rd matrix to the left and right is a 0.

    // Fourth row
    for(int row = 0; row < card.length; row++){
        int tmp = 0;
        while(!valid){
            tmp = (int)(Math.random()*15)+1;
            if(!alreadyUsed.contains(tmp)){
                valid = true;
                alreadyUsed.add(tmp);
            }
        }
        card[row][3] = tmp;
        valid = false;
    }

    // Fifth row
    for(int row = 0; row < card.length; row++){
        int tmp = 0;
        while(!valid){
            tmp = (int)(Math.random()*15)+1;
            if(!alreadyUsed.contains(tmp)){
                valid = true;
                alreadyUsed.add(tmp);
            }
        }
        card[row][4] = tmp;
        valid = false;
    }

    // Creates an array to make title

    String title[] = {"B","I","N","G","O"};
    for(int i = 0; i < title.length;i++){
        System.out.print(title[i] + "\t");
    }

    System.out.println();

    for(int row = 0; row < card.length; row++){
        for(int col = 0; col < card[row].length; col++){
            System.out.print(card[row][col] + "\t");
        }
        System.out.println();
    }
}

出力では、このコードはこのコンソール ビンゴ カードに出力されます: http://puu.sh/487mz/939c8d7a59.png

私の主な問題は、数字の繰り返しです。5x5 配列内で繰り返される数字を取り除く方法を知りたいです。ありがとうございました!

2番目の編集:ゲームを単独でプレイすることにも興味があります。つまり、乱数を引き出し、数字がボード上にあるかどうかに対応します。BINGO条件の条件が満たされた場合、何かをします。これに関して誰か提案がありますか?

4

8 に答える 8

0

ArrayListに から までの数字を入力1N、 a を使用しjava.util.Randomて数字を選択/削除します (シャッフルは必要ありません):

ArrayList<Integer> card = new ArrayList<Integer>(N);
for (int i = 0; i < N; i++)
   card.add(i + 1);

Random random = Random();
int pick = card.remove(random.nextInt(card.size()));

これをクラスに簡単にラップして、物事を整理できます。

于 2013-08-22T15:32:05.873 に答える
0

そのような random 関数を使用しないでください。代わりに、配列または ArrayList に潜在的な乱数をすべて入力してください。次に、そこから数字をランダムに削除します。これにより、それぞれの数字が 1 つしか存在しないため、繰り返し数字を取得できなくなります。

于 2013-08-22T15:25:02.810 に答える
0

生成された訪問した乱数のリストを保持し、この番号をゲームに追加する前に確認できます。

boolean[] visited = new boolean[100];
for(int i = 0; i < 100; i ++) visited[i] = false;

そして各ループ内でこれを使用します

for(int row=0; row < card.length; row++){
int num = (int)(Math.random()*15)+1;
    if visited[num]{
        row --;
        continue;
    }
    visited[num] = true;
    card[row][0] = num;
}
于 2013-08-22T15:28:29.373 に答える
0

これが私がそれを実装した方法です。

    int[][] board = new int[5][5];
    ArrayList<Integer> list = new ArrayList<Integer>();
    int number = 0;
    int index = 0;
    int increment = 1;
    int col = 0;

    //Run a loop until you're at your last column.
    while (col < board.length) {

        //Ensure uniqueness of your numbers
        while (list.size() < 5) {
            number = (int) (Math.random() * 15) + increment;
            if (!list.contains(number))
                list.add(number);
        }

        //Add elements to the array.
        for (int i : list)
            board[index++][col] = i;

        //Set values for the next iteration.
        index = 0;
        increment += 15;
        list.clear();
        col++;
    }
    board[2][2] = 0;

    //Print the board.
    System.out.println("B\tI\tN\tG\tO\n");
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
            System.out.print(board[i][j] + "\t");
        System.out.println("");
    }

結果:

B   I   N   G   O

9   29  34  59  62  
8   23  44  52  64  
7   16  0   53  63  
1   19  33  46  71  
15  17  41  58  61
于 2013-08-22T15:59:46.157 に答える