본문 바로가기
프로그래밍/② JAVA(자바) 프로젝트

② JAVA(자바) 프로젝트-13 숫자빙고 구현하기(console 버젼) == Implementing NumberBingo(console version)

by ronul 2017. 5. 6.
300x250

 

1~25까지의 수를 사용자한테 입력받아 컴퓨터와 대결하는 방식인 빙고게임입니다.

코드입니다.

 NumberBingo.java

import java.util.Random;
import java.util.Scanner;

public class NumberBingo {
 private static int bCnt;
 protected static int[] randomArr;
 protected static int[] userInArr;
 protected final int START = 1;
 protected final int EXIT = 2;

 public NumberBingo() {// 생성자
  System.out.println("----사용설명서\n숫자 빙고 게임 입니다. 게임 방식은 1~25사이의 숫자를 입력하여 4X4 빙고판을 생성하신 후 컴퓨터와 1vs1 대결을 하게됩니다.\n"
    + "유저가 입력한 숫자를 자동으로 빙고판에서 0으로 지워주며, 컴퓨터가 입력한 숫자또한 0으로 지워줍니다.\n" + "이제 컴퓨터와 빙고게임을 시작하겠습니다!!\n");
  System.out.println("┌-------------------------┐");
  System.out.println("|******* 숫자  빙고          *******|");
  System.out.println("| (1) 게임 시작 하기                           |");
  System.out.println("| (2) 게임 종료                                  |");
  System.out.println("└------------------------┘");
  System.out.println("원하시는 기능을 선택해 주세요.");
  Scanner selectMenu = new Scanner(System.in);
  try {
   int select = Integer.parseInt(selectMenu.next());
   if (select == 1) {
    userInputNumber(16); // 유저에게 빙고 16개 숫자 입력받기
    randomCom(16, 25); // (index,rcount) 컴퓨터의 빙고 16개 1~25 사이의 랜덤 숫자
         // 입력받기
    printNum(userInArr, "유저빙고판"); // 유저가 입력한 16개 숫자로 4X4 빙고 테이블 출력
    game();
   } else if (select == 2) {
    System.out.println("게임을 종료합니다.");
    System.exit(0);
   } else {
    System.out.println("메뉴에 맞는 번호를 입력해주세요.... main화면으로 다시 이동합니다.");
    NumberBingo f = new NumberBingo();
   }
  } catch (NumberFormatException e) {
   System.err.println("숫자만 입력하세요....... main화면으로 다시 이동합니다");
   NumberBingo f = new NumberBingo();
  }

 }

 private void printNum(int n[], String s) {
  System.out.println(s);
  for (int i = 1; i < n.length + 1; i++) {
   System.out.print(n[i - 1]);
   if (i % 4 == 0) {
    System.out.println();
   } else {
    System.out.print("  ");
   }
  }
 }

 private void game() {
  int userBingo = 0;
  int ranBingo = 0;
  while (userBingo < 5 && ranBingo < 5) { // 파이브 빙고가 나올때까지
   Scanner s = new Scanner(System.in);
   int userNum = s.nextInt(); // 유저 입력
   System.out.println("유저가 외친 빙고번호를 지우겠습니다.");
   for (int i = 0; i < userInArr.length; i++) {// 유저넘버
    if (userInArr[i] == userNum) {// 유저가 입력한 숫자와 유저 빙고의 배열원소가 같으면
            // 0으로 변환
     userInArr[i] = 0;
    }
    if (randomArr[i] == userNum) {// 유저가 입력한 숫자와 컴퓨터 빙고의 배열원소가 같으면
            // 0으로 변환
     randomArr[i] = 0;
    }
   }
   printNum(userInArr, "유저빙고판");
   System.out.println("컴퓨터가 외친 빙고번호를 지우겠습니다.");
   int comNum = randomCom(25);
   System.out.println("컴퓨터 : " + comNum);
   for (int i = 0; i < randomArr.length; i++) {// 컴퓨터넘버
    if (userInArr[i] == comNum) {// 컴퓨터가 입력한 숫자와 유저 빙고의 배열원소가 같으면
            // 0으로 변환
     userInArr[i] = 0;
    }
    if (randomArr[i] == comNum) {// 컴퓨터가 입력한 숫자와 컴퓨터 빙고의 배열원소가 같으면
            // 0으로 변환
     randomArr[i] = 0;
    }
   }
   printNum(userInArr, "유저빙고판(컴퓨터 빙고번호 삭제)");
   userBingo = bingo(userInArr);// 빙고가 되면 빙고카운트 증가
   ranBingo = bingo(randomArr);
  }
  if (userBingo >= ranBingo) {// 유저 빙고 카운트가 컴퓨터 빙고 카운트보다 많거나 같으면
   bCnt++;
   System.out.println("짝짝짝 축하드립니다. 퐈이브 빙고~!!! " + bCnt + "연승 중입니다.");
   printNum(randomArr, "컴퓨터"); // 컴퓨터 빙고 확인하고 싶을때, 컨닝하기

   System.out.println("메인 메뉴로 돌아가시겠습니까? 메인메뉴 : 1 || 종료 : 2");
   Scanner save = new Scanner(System.in);
   if (save.nextInt() == 1) {
    NumberBingo bingo = new NumberBingo();
   } else {
    System.exit(0);
   }
  } else {// 유저 빙고 카운트가 컴퓨터 빙고 카운트보다 적으면
   System.out.println("졌습니다");
   bCnt = 0;
   printNum(randomArr, "컴퓨터"); // 컴퓨터 빙고 확인하고 싶을때, 컨닝하기
   System.out.println("메인 메뉴로 돌아가시겠습니까? 메인메뉴 : 1 || 종료 : 2");
   Scanner save = new Scanner(System.in);
   if (save.nextInt() == 1) {
    NumberBingo bingo = new NumberBingo();
   } else {
    System.exit(0);
   }

 

 

 

 

 

 private int bingo(int x[]) {
  int NumBingo = 0;

  if (x[0] == 0 && x[1] == 0 && x[2] == 0 && x[3] == 0) {
   NumBingo++;
  }
  if (x[4] == 0 && x[5] == 0 && x[6] == 0 && x[7] == 0) {
   NumBingo++;
  }
  if (x[8] == 0 && x[9] == 0 && x[10] == 0 && x[11] == 0) {
   NumBingo++;
  }
  if (x[12] == 0 && x[13] == 0 && x[14] == 0 && x[15] == 0) {
   NumBingo++;
  }
  if (x[0] == 0 && x[4] == 0 && x[8] == 0 && x[12] == 0) {
   NumBingo++;
  }
  if (x[1] == 0 && x[5] == 0 && x[9] == 0 && x[13] == 0) {
   NumBingo++;
  }
  if (x[2] == 0 && x[6] == 0 && x[10] == 0 && x[14] == 0) {
   NumBingo++;
  }
  if (x[3] == 0 && x[7] == 0 && x[11] == 0 && x[15] == 0) {
   NumBingo++;
  }
  if (x[0] == 0 && x[5] == 0 && x[10] == 0 && x[15] == 0) {
   NumBingo++;
  }
  if (x[3] == 0 && x[6] == 0 && x[9] == 0 && x[12] == 0) {
   NumBingo++;
  }
  return NumBingo;
 }

 // 컴퓨터 4X4 빙고생성
 public void randomCom(int index, int rCount) {

  Random r = new Random();

  randomArr = new int[index];
  for (int i = 0; i < randomArr.length; i++) {
   int ball = r.nextInt(rCount) + 1;
   randomArr[i] = ball;
   for (int j = 0; j < i; j++) {
    if (randomArr[j] != randomArr[i]) {
     continue;
    } else {
     i--;
     break;
    }
   }
  }
 }

 public int randomCom(int rCount) {// 컴퓨터 빙고숫자 생성
  Random r = new Random();
  int comNum;
  while (true) {
   comNum = r.nextInt(rCount) + 1;
   for (int i = 0; i < randomArr.length; i++) {
    if (comNum == randomArr[i]) {
     return comNum;
    }
   }
  }
 }

 public void userInputNumber(int inCount) { // 유저에게 값 입력받기
  userInArr = new int[inCount];
  System.out.println("16 개의 숫자를 1~25 사이의 정수값으로 입력하세요.");
  for (int i = userInArr.length; i > 0; i--) {
   System.out.println(i + "번 남았습니다.");
   Scanner s = new Scanner(System.in);
   int n = Integer.parseInt(s.next());
   if (0 < n && n <= 25) {
    userInArr[(-i + 16)] = n;
   } else {
    System.out.println("범위에 맞는값을 다시입력해주세요.");
    i++;
   }
  }

 }

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  NumberBingo bingo = new NumberBingo();

 }

}


 

자세한 코드설명은 주석을 달아 놨습니다.

범위에 맞지않는 숫자를 입력하면 재입력을 요구하고, 숫자이외의 문자를 입력하게 되면 예외처리를 사용하여 이 또한 다시 입력하게 만들었습니다.

 

300x250

댓글