3층 1구역 - 개발의 장/JAVA
JAVA - while(true) switch-break문을 이용한 다이스 롤! 게임 (2022-07-18)
상이태상
2022. 7. 19. 01:30
package loop_while;
import java.util.Random;
import java.util.Scanner;
public class Quiz08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cost = 10000; //초기 배팅금액 선언
int win = 0;
int drow = 0;
int lose = 0;
while(true) {
System.out.println("--- Dice Roll Game ---");
System.out.println("1. Game Start");
System.out.println("2. Game Score");
System.out.println("3. End Game");
System.out.print(">> ");
String select = sc.next();
switch(select) {
case "1" :
System.out.println("게임을 시작합니다.");
System.out.println("배팅가능한 금액 : " + cost);
while(true) {
if(cost <= 0) {System.out.println("배팅금액을 모두 잃었습니다. 프로그램을 종료합니다.");
break;
}
System.out.println("주사위를 굴리겠습니다.");
Random r = new Random();
int com1 = r.nextInt(6)+1;
int com2 = r.nextInt(6)+1;
int com3 = r.nextInt(6)+1; // 난수 지정으로 주사위의 각 눈의 숫자가 랜덤으로 설정.
int comSum = com1+com2+com3; //주사위의 숫자의 합 == 상대방
/*System.out.println("컴퓨터의 1번째 주사위 : " + com1);
System.out.println("컴퓨터의 2번째 주사위 : " + com2);
System.out.println("컴퓨터의 3번째 주사위 : " + com3);*/
System.out.println("com : " +comSum); // 상대방의 주사위 숫자의 합을 출력 본 게임이라면 이 출력값도 주석 처리(그래야 게임할 맛 나지)
int dice1 = r.nextInt(6) + 1;
int dice2 = r.nextInt(6) + 1;
int dice3 = r.nextInt(6) + 1; // 난수 지정으로 주사위의 각 눈의 숫자가 랜덤으로 설정.
int diceSum = dice1+dice2+dice3;
System.out.println("1번째 주사위 : " + dice1);
System.out.println("2번째 주사위 : " + dice2);
System.out.println("3번째 주사위 : " + dice3); //사용자의 각 주사위의 숫자
System.out.println("당신의 주사위의 총합 : " + diceSum); //사용자의 주사위 눈의 숫자의 합
System.out.print("베팅 금액을 정해주세요 : ");
int user = 0;
try {
user = sc.nextInt();
}catch (Exception e) { //사용자가 숫자 이외에 값을 선언할 때 예외발생 처리
System.out.println("숫자를 입력하세요.");
sc.nextLine();
continue; //배팅금액 입력으로 돌아감.
}
if(user < 1 || user > cost) { // 사용자는 최소 1원~ 자기가 소지하고 있는 배팅금액까지 배팅가능 그 외에 값을 입력시 출력
System.out.println("범위 내에서 베팅해주세요.");
continue; //배팅금액 입력으로 돌아감.
}
if(diceSum > comSum) { //사용자의 주사위 눈의 합이 상대방보다 클 때
cost = cost + user; //배팅금액은 현재 배팅금액 + 사용자가 선언한 배팅금액
win++; //승리 했으므로 1승 적립
System.out.println("당신이 이겼습니다! " + user + " 만큼 가져옵니다."); //사용자가 선언한 금액을 가져온다는 문자 출력
System.out.print("게임을 계속하시겠습니까(y/n)?");
String next = sc.next();
if(next.equals("y")||next.equals("Y")) { //소문자 y나 대문자 Y를 입력했을 때, 게임을 계속진행
continue;
}else if(next.equals("n")||next.equals("N"))
System.out.println("종료합니다."); //소문자 n이나 대문자 N을 입력했을 때, 게임을 계속진행
break;
}else if(diceSum < comSum) { //상대방의 주사위 눈의 합이 사용자보다 클 때
cost = cost - user; //배팅금액은 현재 배팅금액 - 사용자가 선언한 배팅금액
lose++; //패배 했으므로 1패 적립
System.out.println("당신이 졌습니다. " + user + " 만큼 잃습니다."); //사용자가 선언한 금액을 잃는다는 문자 출력
System.out.print("게임을 계속하시겠습니까(y/n)?");
String next = sc.next();
if(next.equals("y")||next.equals("Y")) {//소문자 y나 대문자 Y를 입력했을 때, 게임을 계속진행
continue;
}else if(next.equals("n")||next.equals("N"))
System.out.println("종료합니다.");//소문자 n이나 대문자 N을 입력했을 때, 게임을 계속진행
break;
}else //그 외 무승부의 출력
cost = cost; //배팅금액은 동일
drow++; //무승부 1 적립 무승부가 draw인건 아는데 귀찮아서 안 바꿈.
System.out.println("무승부 입니다.");
System.out.print("게임을 계속하시겠습니까(y/n)?");
String next = sc.next();
if(next.equals("y")||next.equals("Y")) {
continue;
}else if(next.equals("n")||next.equals("N"))
System.out.println("종료합니다.");
break;
}break;
case "2" : System.out.println("당신은 현재" + win + "승 " + drow + "무 " + lose + "패 입니다.");break; //현재 전적을 출력
case "3" : System.out.println("프로그램을 종료합니다."); return;
default : System.out.println("메뉴를 확인 후 다시 입력해주세요.");
}
}
}
}