본문 바로가기

Java/실습

[Java] 주사위 게임

이번 시간에는 주사위 게임을 만들어보도록 하겠습니다.

 

지금까지 한 실습 중 가장 복잡했는데요.

 

게임의 요구 사항을 먼저 살펴보겠습니다.

 

========================================================

주사위 게임 (main함수만 사용)

 

유저랑 컴퓨터 각각 주사위 3개를 굴려서 합이 높은 숫자가

 

나온 쪽이 이기는 게임

 

1번 메뉴 :

 

유저와 컴퓨터는 각각 주사위 3개씩 굴릴 !

 

유저는 굴린 주사위의 값을 확인한 후 (주사위의 합까지)

 

돈을 배팅할있게 해서

 

이기면 돈만큼 따고, 지면 잃게

 

소지금보다는 많이 배팅할 수 없고, 기본 소지금 10000원 시작

 

끝나면 재도전 의사를 물을 no -> 메뉴

 

소지금 다 잃으면 메뉴로 돌아가기

 

2번 메뉴 :

 

전적확인 (승 / 무 / 패 / 소지금)

 

3번 메뉴 : 대출

 

4번 메뉴 : 상환

 

5 메뉴: 종료

 

========================================================

 

 

저는 여기서 소지금을 확인하는 기능을 추가했습니다.

 

 

차근차근 시작해볼까요?

 

System.out.println(" ");

System.out.println("♠ WELCOME TO DICELAND ♧");

System.out.println(" ");

 

menu :while(true) {

System.out.println("==================================================");

System.out.println("= 1.게임 2.전적확인 3.소지금 확인 4. 대출 5. 상환 6. 종료 =");

System.out.println("==================================================");

int option = sc.nextInt();

 

먼저 게임 시작을 알리고

 

옵션을 입력 받습니다.

 

이 부분은 많이 했었기 때문에 넘어가겠습니다.

 

game : while(true) {

System.out.println(" ");

System.out.println("$ 얼마를 배팅하시겠습니까? $");

System.out.println(" ");

batting_money = sc.nextInt();

 

if(batting_money > user_money) {

System.out.println();

System.out.println("소지금보다 배팅 머니가 많습니다.");

System.out.println();

Thread.sleep(1000);

System.out.println();

System.out.println("다시 입력하세요.");

System.out.println();

Thread.sleep(1000);

continue game;

}

 

System.out.println(" ");

System.out.printf("배팅 금액 : %d원\n",batting_money );

System.out.println(" ");

for (int i = 0; i < 3; i++) {

ai_dice[i] = r.nextInt(6)+1;

user_dice[i] = r.nextInt(6)+1;

ai_sum += ai_dice[i];

user_sum += user_dice[i];

}

 

옵션 1번의 경우 게임을 시작하는데

 

얼마를 배팅할지 입력받고

 

소지금보다 배팅 머니가 많을경우

 

다시 게임을 시작하고 (continue 사용)

 

아니라면 

 

배열에 사용자의 주사위 숫자와

 

컴퓨터의 주사위 숫자들을 넣습니다.

 

 

Thread.sleep(1500);

System.out.println(" ");

System.out.println("게임을 시작합니다!");

System.out.println(" ");

Thread.sleep(1500);

System.out.println(" ");

System.out.println("유저의 주사위 굴리는 중..");

System.out.println(" ");

Thread.sleep(1500);

System.out.println(" ");

System.out.print("유저의 주사위 눈은 : ");

 

 

for (int n : user_dice) {

Thread.sleep(1000);

System.out.printf( n + " ");

}

System.out.println(" ");

Thread.sleep(1000);

System.out.println();

System.out.println(" ");

System.out.print("유저의 주사위 합은 : ");

Thread.sleep(1000);

 

System.out.printf( "%d" + " ", user_sum);

Thread.sleep(1500);

System.out.println(" ");

System.out.println(" ");

System.out.println(" ");

System.out.println("컴퓨터의 주사위 굴리는 중..");

System.out.println(" ");

Thread.sleep(1500);

System.out.println(" ");

System.out.print("컴퓨터의 주사위 눈은 : ");

for (int n : ai_dice) {

Thread.sleep(1000);

System.out.printf( n + " ");

}

System.out.println(" ");

System.out.println();

Thread.sleep(500);

System.out.println(" ");

System.out.print("컴퓨터의 주사위 합은 : ");

 

사용자의 주사위 합과 

 

컴퓨터의 주사위 합을

 

출력합니다.

 

 

 

Thread.sleep(1000);

System.out.printf( "%d" + " ", ai_sum);

System.out.println();

System.out.println(" ");

System.out.println(" ");

System.out.println(" ");

Thread.sleep(1000);

System.out.printf("☞ 유저의 주사위 합 : %d \t\n", user_sum );

System.out.println(" ");

Thread.sleep(1000);

System.out.printf("☞ 컴퓨터의 주사위 합 : %d \t\n", ai_sum );

System.out.println(" ");

if(user_sum > ai_sum) { //유저 승리

user_money += batting_money;

ai_money -= batting_money;

Thread.sleep(2000);

System.out.println(" ");

System.out.println("유저의 승리!");

System.out.println(" ");

System.out.println(" ");

Thread.sleep(2000);

System.out.printf("%d원을 획득하셨습니다.\n", batting_money);

System.out.println(" ");

System.out.println(" ");

win++;

 

}else if(user_sum < ai_sum) { //컴퓨터 승리

ai_money += batting_money;

user_money -= batting_money;

System.out.println(" ");

System.out.println(" ");

System.out.println("컴퓨터의 승리!");

System.out.println(" ");

System.out.println(" ");

System.out.printf("%d원을 잃었습니다..\n", batting_money);

System.out.println(" ");

System.out.println(" ");

 

 

lose++;

 

주사위의 합을 비교해서

 

많은쪽이 승리하고

 

승리 여부에 따라 승리카운트나

 

패배카운트를 증가시킵니다. 

 

 

if(user_money <= 0) {

System.out.println(" ");

System.out.println("소지금을 전부 잃었습니다.");

System.out.println(" ");

System.out.println("메뉴로 돌아갑니다.");

System.out.println(" ");

continue menu;

}

 

소지금을 전부 잃을 경우 메뉴로 돌아가고

 

}

else {

System.out.println(" ");

System.out.println("무승부네요!\t");

System.out.println(" ");

draw++;

}

 

이거나 질 경우가 아닐경우

 

draw카운트를 증가시킵니다.

 

 

Thread.sleep(1000);

System.out.println("재도전하시겠습니까? 1.Y 2. N");

int menu = sc.nextInt();

if (menu == 1) {

continue game;

}

else if(menu == 2) {

continue menu;

}

 

}

}

 

 

1 또는 2를 입력받고

 

게임을 재실행 하거나 메뉴로 돌아갑니다.

 

else if(option == 2) {

System.out.println("┌────────────────┐");

System.out.println("│ 전적 ");

System.out.printf("│%d 승 / %d 패 / %d무\n", win,lose,draw);

System.out.println("└────────────────┘");

 

 

메뉴에서 2번을 입력하면 전적을 보여줍니다. 

 

이떄는 증가시킨 카운트를 출력합니다.

 

else if(option == 3) {

System.out.println("┌────────────────┐");

System.out.println("│ 소지금 ");

System.out.printf("│ %d원 \n", user_money);

System.out.println("└────────────────┘");

}

 

 

3번의 경우 소지금을 보여줍니다.

 

else if(option == 4) {

System.out.println(" ");

System.out.println("대출 서비스입니다.");

System.out.println(" ");

System.out.println("대출 받으실 금액을 입력하세요.");

borrow = sc.nextInt();

user_money += borrow;

Thread.sleep(1000);

System.out.println(" ");

System.out.printf("%d원을 대출하셨습니다.\n", borrow);

System.out.println(" ");

System.out.println("메뉴로 돌아가는 중..");

Thread.sleep(1000);

continue menu;

}

 

4번은 대출해주는 기능인데

 

사용자에게 대출할 금액을 입력받고

 

얼마를 대출했는지 출력 후 

 

메뉴로 돌아갑니다.

 

else if(option == 5) {

pay : while(true) {

System.out.println(" ");

System.out.println("상환 서비스입니다.");

System.out.println(" ");

Thread.sleep(1500);

System.out.printf("현재 갚으실 돈은 %d원입니다.\n", borrow);

System.out.println(" ");

Thread.sleep(1500);

if(borrow == 0) {

System.out.println("상환하실 금액이 없습니다.");

System.out.println(" ");

Thread.sleep(1500);

System.out.println("메인 메뉴로 돌아갑니다.");

System.out.println(" ");

continue menu;

}

System.out.println("상환하실 금액을 입력하세요.");

pay = sc.nextInt();

 

다음은 5번의 상환기능인데

 

빌린 금액이 0 즉, 상환 금액이 없으면

 

메인 메뉴로 돌아가고

 

아니면 상환 금액을 입력받습니다.

 

 

if(pay > borrow) {

Thread.sleep(1500);

System.out.println(" ");

System.out.println("상환 조건이 충족되지 않습니다.\n\n돌려드리겠습니다.");

System.out.println(" ");

Thread.sleep(1500);

System.out.println("상환 메뉴로 돌아갑니다.");

System.out.println(" ");

Thread.sleep(1500);

continue pay;

}

 

상환한 금액이 빌린 돈보다 많으면

 

상환 메뉴로 continue를 써서 돌아갑니다.

 

 

borrow -= pay;

user_money -= pay;

Thread.sleep(1000);

System.out.println(" ");

System.out.printf("%d원을 상환하셨습니다.\n", pay);

System.out.println(" ");

Thread.sleep(3000);

if(borrow == 0) {

System.out.println(" ");

System.out.println("빛 청산 완료!");

System.out.println(" ");

}

System.out.println("메뉴로 돌아가는 중..");

Thread.sleep(1000);

continue menu;

}

 

아니라면 유저의 돈을 상환한만큼 감소시키고

 

모두 갚으면 빛 청산 완료 메세지를 출력합니다.

 

기능을 실행 후 메뉴로 돌아갑니다.

 

else if(option == 6) {

System.out.println("게임을 종료합니다..");

Thread.sleep(1500);

return;

}

 

6번을 입력하면 프로그램을 종료합니다.

 

 

else {

System.out.println("메뉴의 번호를 1~3까지 다시 입력해주세요");

}

}

}

 

다른 숫자를 입력하면 메세지를 출력하고

 

처음 반복문으로 돌아갑니다.

 

==================================================

= 1.게임 2.전적확인 3.소지금 확인 4. 대출 5. 상환 6. 종료 =

==================================================

 

1

 

$ 얼마를 배팅하시겠습니까? $

 

5000

 

배팅 금액 : 5000원

 

 

게임을 시작합니다!

 

 

유저의 주사위 굴리는 중..

 

 

유저의 주사위 눈은 : 4 6 2

 

 

유저의 주사위 합은 : 12

 

 

컴퓨터의 주사위 굴리는 중..

 

 

컴퓨터의 주사위 눈은 : 2 6 2

 

 

컴퓨터의 주사위 합은 : 10

 

 

 

☞ 유저의 주사위 합 : 12

 

☞ 컴퓨터의 주사위 합 : 10

 

 

유저의 승리!

 

 

5000원을 획득하셨습니다.

 

 

재도전하시겠습니까? 1.Y 2. N

 

 

 

 

코드가 긴만큼 출력도 길게되네요.

 

잘 출력되는 모습입니다.

 

 

 

 

 

 

지금까지 썼던 반복문과

 

많은 수의 변수 컨트롤,

 

continue기능이 핵심인 실습이었습니다.

 

간단한 주사위 게임인데도 상환할 금액이 없거나

 

배팅할 금액이 없을 경우, 

 

빌린 돈보다 상환을 많이 할 경우

 

다양한 변수들이 생길 수 있다는 점이 신기했고

 

신경써야 한다는 것을 알게 된 것 같습니다.

 

감사합니다!

 

 

'Java > 실습' 카테고리의 다른 글

[Java] N의 배수 고르기  (1) 2024.12.05
[Java] 제곱수 판별하기  (0) 2024.12.05
[Java] 로또  (0) 2024.12.05
[Java] 가위 바위 보  (1) 2024.12.04
[Java] 배스킨라빈스 31게임  (0) 2024.12.04