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("메뉴를 확인 후 다시 입력해주세요.");
			}
		}
	}

}