JAVA/Consol < 이차원 배열의 활용 > 빙고 게임 제작 빨코모 2018. 6. 12. 18:18 BingoProject.javaimport java.util.Scanner; public class BingoProject { static final int ARRSIZE50 = 50; static final int BORDERLINE25 = 25; static final int BINGOFINISHLINE = 5; // 랜덤 숫자 모음 static int[] inum = new int[ARRSIZE50]; // 빙고판 0~24 - 컴퓨터 // 25~49 - 내꺼 static int[] Bingo = new int[ARRSIZE50]; // 빙고 체크판 0~24 - 컴퓨터 // 25~49 - 내꺼 static int[] BingoChk = new int[ARRSIZE50]; // 이미 부른 숫자 체크 static int[] usenum = new int[ARRSIZE50]; static Scanner scan = new Scanner(System.in); static boolean bTurnChk = false; // 내 차례면 false, 상대 차례면 true static boolean bGameFinish = false; // static int iBingoCnt_My = 0; static int iBingoCnt_Computer = 0; static int ibingorowchk = 0; // 행빙고 체크 static int ibingocolchk = 0; // 열 빙고 체크 static int ibingocrossleftchk = 0; // 크로스 왼쪽 빙고 체크 static int ibingocrossrightchk = 0; // 크로스 오른쪽 빙고 체크 public static void main(String[] args) { // TODO Auto-generated method stub BingoReset(); BingoSetting(); OutputBingo(); do { InputBingo(); OutputBingo(); BingoLineCheck(); } while (!bGameFinish); } static void BingoReset() // 빙고판 세팅 // 초기화 { for (int i = 0; i < ARRSIZE50; i++) { Bingo[i] = 0; BingoChk[i] = 0; usenum[i] = 0; inum[i] = (i + 1); } } static void RandomNum() { // 100번 돌려서 숫자 섞어주기 int temp = 0; int irandom = 0; for (int i = 0; i < 100; i++) { for (int j = 0; j < ARRSIZE50; j++) { irandom = (int) ((Math.random() * 49)); temp = inum[irandom]; inum[irandom] = inum[j]; inum[j] = temp; } } } static void BingoSetting() // 빙고판 세팅 { RandomNum(); // 숫자 섞기 for (int i = 0; i < BORDERLINE25; i++) // 0~24 컴퓨터 Bingo[i] = inum[i]; RandomNum(); // 숫자 다시 섞기 for (int i = BORDERLINE25; i < ARRSIZE50; i++) // 25~49 컴퓨터 Bingo[i] = inum[i]; } static boolean OverLapNumberChk(int inputnum) // 중복 숫자 체크 { boolean bChk = false; for (int i = 0; i < ARRSIZE50; i++) { if (usenum[i] == inputnum) { bChk = false; return bChk; } } for (int i = 0; i < ARRSIZE50; i++) { if (usenum[i] == 0) { usenum[i] = inputnum; bChk = true; break; } } return bChk; } // 입력부 static void InputBingo() { int irandom = 0; boolean bChk = false; if (!bTurnChk) { // 내 차례일 때 do { System.out.println("--------------------------------------------------------------------------"); System.out.print("1~50 숫자 중 원하는 숫자를 입력하세요 : "); irandom = scan.nextInt(); // if(!isNumber(irandom)) // continue; System.out.println("--------------------------------------------------------------------------"); if ((irandom < 0) || (irandom > 50)) { System.out.print("해당숫자는 범위에 벗어나는 숫자입니다.\n1에서 50사이의 숫자로 다시 입력해주세요 : "); irandom = scan.nextInt(); } else { if (OverLapNumberChk(irandom)) // false = 이미 있는 단어, true = 없어서 추가한 단어 bChk = true; else System.out.println("이미 부른 숫자입니다."); } } while (!bChk); bTurnChk = true; } else { // 컴퓨터 차례일 때 do { irandom = (int) (Math.random() * 49) + 1; for (int i = 0; i < BORDERLINE25; i++) { if (Bingo[i] == irandom) { if (OverLapNumberChk(irandom)) { System.out.println("컴퓨터가 선택한 숫자는 " + irandom + "입니다."); bChk = true; break; } } } } while (!bChk); bTurnChk = false; } InputNumCheck(irandom); } static void InputNumCheck(int inputNum) { // 숫자가 있으면 그 숫자는 1로 체크 바꿔주기 for (int i = 0; i < ARRSIZE50; i++) { if (Bingo[i] == inputNum) { BingoChk[i] = 1; } } } // 빙고체크하기 static void BingoLineCheck() { int iBingoCnt = 0; // 체크 전 초기화 int startnum = 0; int lastnum = BORDERLINE25; int cnt = 0; ibingocrossleftchk = 0; ibingocrossrightchk = 0; while (cnt < 2) { for (int i = startnum; i < startnum + 5; i++) { ibingorowchk = 0; for (int j = i; j < lastnum; j = j + 5)// 5개씩 끊어서 합했을 경우, 1이 되면 { ibingorowchk += BingoChk[j]; if (ibingorowchk == 5) { iBingoCnt++; } } } for (int i = startnum; i < lastnum; i = i + 5) { ibingocolchk = 0; for (int j = i; j < i + 5; j++)// 5개씩 끊어서 합했을 경우, 1이 되면 { ibingocolchk += BingoChk[j]; if (ibingocolchk == 5) { iBingoCnt++; } } } for (int i = (startnum + 4); i < lastnum-1; i += 4) { ibingocrossleftchk += BingoChk[i]; if (ibingocrossleftchk == 5) iBingoCnt++; } for (int i = startnum; i < lastnum ; i += 6) { ibingocrossrightchk += BingoChk[i]; if (ibingocrossrightchk == 5) iBingoCnt++; } if (cnt == 0) {// 컴퓨터차례 iBingoCnt_Computer = iBingoCnt; if (iBingoCnt_Computer >= 1) { System.out.println("컴퓨터가 " + iBingoCnt_Computer + "빙고 하였습니다."); } if (iBingoCnt_Computer == BINGOFINISHLINE && iBingoCnt_My != BINGOFINISHLINE) { System.out.println("컴퓨터가 승리하였습니다."); bGameFinish = true; } else if (iBingoCnt_My == BINGOFINISHLINE && iBingoCnt_Computer == BINGOFINISHLINE) { System.out.println("동률입니다."); bGameFinish = true; } } if (cnt == 1) // 내 차례 { iBingoCnt_My = iBingoCnt; if (iBingoCnt_My >= 1) { System.out.println("내가 " + iBingoCnt_My + "빙고 하였습니다."); } if (iBingoCnt_My == BINGOFINISHLINE && iBingoCnt_Computer != BINGOFINISHLINE) { System.out.println("내가 승리하였습니다."); bGameFinish = true; } else if (iBingoCnt_My == BINGOFINISHLINE && iBingoCnt_Computer == BINGOFINISHLINE) { System.out.println("동률입니다."); bGameFinish = true; } } cnt++; iBingoCnt = 0; startnum = BORDERLINE25; lastnum = ARRSIZE50; } } // 출력부 static void OutputBingo() // 출력부 //빙고판 출력 // bturnChk == false; 내 차례 // bturnChk == true ; 컴퓨터 차례 { int itemp = 0; System.out.print("--------------------------------------------------------------------------"); System.out.println("\n\t 컴퓨터 빙고판\t\t\t\t컴퓨터 빙고 체크판"); System.out.println("--------------------------------------------------------------------------"); for (int i = 0; i < ARRSIZE50; i++) { if (i == BORDERLINE25) { System.out.println("--------------------------------------------------------------------------"); System.out.println("\t 내 빙고판\t\t\t\t내 빙고 체크판"); System.out.println("--------------------------------------------------------------------------"); } System.out.print(Bingo[i] + "\t"); if (i % 5 == 4) { itemp = i - 4; for (int j = itemp; j <= i; j++) { System.out.print(BingoChk[j] + "\t"); } System.out.println(""); } } } }