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();
}
}
자세한 코드설명은 주석을 달아 놨습니다.
범위에 맞지않는 숫자를 입력하면 재입력을 요구하고, 숫자이외의 문자를 입력하게 되면 예외처리를 사용하여 이 또한 다시 입력하게 만들었습니다.
댓글