/*-------------------- Ex10_1.java Bingo! 自動ビンゴ判定版 ---------------------*/ package jp_bunkyo; import java.util.Scanner; import java.util.Random; public class Ex10_1 { public static void main(String[] args) { Scanner stdin = new Scanner(System.in); Random rnd = new Random(); int[][] you = new int[5][5]; int[][] com = new int[5][5]; int[] ball = new int[50]; // 11,12,...,50 を代入 int i, j, k, x1, x2, tmp, sumy1, sumy2, sumc1, sumc2; for (i = 0; i < 50; i++) { // Ball初期化 ball[i] = i + 11; // 11,12,13,...,50を順に代入 } for (k = 0; k < 10000; k++) { // ballシャッフル([you]ビンゴマス生成用) x1 = rnd.nextInt(50); // ballの交換元の位置 x1 x2 = rnd.nextInt(50); // ballの交換先の位置 x2 tmp = ball[x1]; // ball[x1] と ball[x2] を交換 swap ball[x1] = ball[x2]; ball[x2] = tmp; } for (i = 0; i < 5; i++) { // Bingoマスの初期化 [you] for (j = 0; j < 5; j++) { you[i][j] = ball[5*i+j]; // [you]用ビンゴマス生成 } } for (k = 0; k < 10000; k++) { // ballシャッフル([com]ビンゴマス生成用) x1 = rnd.nextInt(50); // ballの交換元の位置 x1 x2 = rnd.nextInt(50); // ballの交換先の位置 x2 tmp = ball[x1]; // ball[x1] と ball[x2] を交換 swap ball[x1] = ball[x2]; ball[x2] = tmp; } for (i = 0; i < 5; i++) { // Bingoマスの初期化 [com] for (j = 0; j < 5; j++) { com[i][j] = ball[5*i+j]; // [com]用ビンゴマス生成 } } for (k = 0; k < 10000; k++) { // ballシャッフル(当たりボール生成用) x1 = rnd.nextInt(50); // ballの交換元の位置 x1 x2 = rnd.nextInt(50); // ballの交換先の位置 x2 tmp = ball[x1]; // ball[x1] と ball[x2] を交換 swap ball[x1] = ball[x2]; ball[x2] = tmp; } // Bingo Game 開始 System.out.println("------- Bingo Game ! -------"); for (i = 0; i < 5; i++) { // Bingoシートの表示 System.out.print(" You = "); for (j = 0; j < 5; j++) { System.out.print("|" + you[i][j]); } System.out.print(" Com = "); for (j = 0; j < 5; j++) { System.out.print("|" + com[i][j]); } System.out.println(); } for (k = 0; k < 50; k++ ) { // 最大50回繰り返し System.out.println(" 第" + (k+1) + "回目の当たり数字は…… " + ball[k]); for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { if ( you[i][j] == ball[k] ) { you[i][j] = 0; // [you] bingoシートの当たり数字を[0]に変更 } if ( com[i][j] == ball[k] ) { com[i][j] = 0; // [com] bingoシートの当たり数字を[0]に変更 } } } for (i = 0; i < 5; i++) { // Bingoシートの表示 System.out.print(" You = "); for (j = 0; j < 5; j++) { if ( you[i][j] == 0 ) { // すでに当たりのマス目なら「■」を表示 System.out.print("|■"); } else { // それ以外は数字を表示 System.out.print("|" + you[i][j]); } } System.out.print(" Com = "); for (j = 0; j < 5; j++) { if ( com[i][j] == 0 ) { // すでに当たりのマス目なら「●」を表示 System.out.print("|●"); } else { // それ以外は数字を表示 System.out.print("|" + com[i][j]); } } System.out.println(); } // Bingo判定 for (i = 0; i < 5; i++) { sumy1 = 0; sumc1 = 0; sumy2 = 0; sumc2 = 0; for (j = 0; j < 5; j++) { sumy1 += you[i][j]; // [you] 横の足し算 sumy2 += you[j][i]; // [you] 縦の足し算 sumc1 += com[i][j]; // [com] 横の足し算 sumc2 += com[j][i]; // [com] 縦の足し算 } if ( sumy1 == 0 || sumy2 == 0 ) { System.out.println(" ★☆★ Bingo! [You Win!] Congratulations! ☆★☆ "); return; } else if ( sumc1 == 0 || sumc2 == 0 ) { System.out.println(" Comp Bingo! [You Lose...] Bad End..."); return; } } sumy1 = 0; sumc1 = 0; sumy2 = 0; sumc2 = 0; for (i = 0; i < 5; i++) { sumy1 += you[i][i]; // [you] 左斜めの足し算 sumy2 += you[4-i][i]; // [you] 右斜めの足し算 sumc1 += com[i][i]; // [com] 左斜め足し算 sumc2 += com[4-i][i]; // [com] 右斜め足し算 } if ( sumy1 == 0 || sumy2 == 0 ) { System.out.println(" ★☆★ Bingo! [You Win!] Congratulations! ☆★☆ "); return; } else if ( sumc1 == 0 || sumc2 == 0 ) { System.out.println(" Comp Bingo! [You Lose...] Bad End..."); return; } System.out.print(" 次のボールを引きます (y / n) > "); if ( stdin.nextLine().charAt(0) != 'y' ) { System.out.println("途中で諦めるんだね。さよなら。。。"); return; } } } }