3. 랜덤 값을 생성해 가위, 바위, 보 게임을 만들고 누가 이겼는지 출력하세요.

import java.util.Random;

public class homwork27thMarch {
	public static void main(String[] args) {
		
		// 방법 1) if문 사용

		// 가위, 바위, 보를 각각 0, 1, 2로 선언하면 경우의 수를 몇 가지로 축약할 수 있다.
		// 경우의 수 1) 안나 = 엘사 이면 안나와 엘사는 비긴다.
		// 경우의 수 2) 안나 - 엘사 = 1 이면 안나가 이긴다. (안나가 바위나 보를 내고 이기는 경우)
		// 경우의 수 3) 안나 - 엘사 = -2 면 안나가 이긴다. (안나가 가위를 내고 이기는 경우)
		// 경우의 수 4) 따라서 나머지는 모두 안나가 지는 경우가 된다.
		// 해당 로직을 아래 if문으로 구현.
		
		Random r = new Random();
		
		int anna = r.nextInt(3);
		int elsa = r.nextInt(3);
		
		String scissors = "가위";
		String rock = "바위";
		String paper = "보";
		
		String annaDecision = "none";
		String elsaDecision = "none";
		
		if (anna == 0) {
			annaDecision = scissors;
		} else if (anna == 1) {
			annaDecision = rock;
		} else {
			annaDecision = paper;
		}
		
		if (elsa == 0) {
			elsaDecision = scissors;
		} else if (elsa == 1) {
			elsaDecision = rock;
		} else {
			elsaDecision = paper;
		}
		
		System.out.print("안나는 " + annaDecision + "을(를) 냈고 ");
		System.out.print("엘사는 " + elsaDecision + "을(를) 내서 ");
				
		if (anna == elsa) {
			System.out.println("안나와 엘사는 비겼습니다.");
		} else if (anna - elsa == 1) {
			System.out.println("안나가 이겼습니다.");
		} else if (anna - elsa == -2) {
			System.out.println("안나가 이겼습니다.");
		} else {
			System.out.println("엘사가 이겼습니다.");
		}
		
		
		// 방법 2) boolean 사용
        
		// 사실 방법 1의 로직과 같은거다.
		// boolean case1은 방법 1)의 경우의 수 1)과 같고,
		// boolean case2는 방법 1)의 경우의 수 2)와 같고,
		// (안나가 엘사보다 큰데 안나 - 엘사는 2가 아니다 -> 안나 - 엘사는 1이다.)
		// boolean case3은 방법 1)의 경우의 수 3)과 같다.
		// 마찬가지로 나머지 경우의 수 4)는 모두 엘사가 이기는 것만 남는다.
		// 즉, 단지 말을 아 다르고 어 다르게 했을 뿐 굳이 boolean을 쓸 필요는 없다.
			
		System.out.print("안나는 " + annaDecision + "을(를) 냈고 ");
		System.out.print("엘사는 " + elsaDecision + "을(를) 내서 ");
		
		boolean case1 = (anna == elsa);
		boolean case2 = (anna > elsa && anna - elsa != 2);
		boolean case3 = (anna - elsa == -2);
		
		if (case1) {
			System.out.println("안나와 엘사는 비겼습니다.");
		} else if (case2) {
			System.out.println("안나가 이겼습니다.");
		} else if (case3) {
			System.out.println("안나가 이겼습니다.");
		} else {
			System.out.println("엘사가 이겼습니다.");
		}
		
        
		// 방법 3) switch문 사용
        
		// 안나와 엘사의 가위바위보 게임의 경우의 수는 총 9가지가 나온다.
		// 하지만 안나 - 엘사의 모든 값을 계산해보면 -2일 때는 안나가 이기고, -1일 때는 엘사가 이기고,
		// 0일 때는 비기고, +1일 때는 안나가 이기고, +2일 때는 엘사가 이기는 규칙이 있음을 발견할 수 있다.
		// 따라서 이 5가지 경우의 수 로직을 case문을 이용해 구현했다.
		
		System.out.print("안나는 " + annaDecision + "을(를) 냈고 ");
		System.out.print("엘사는 " + elsaDecision + "을(를) 내서 ");
		
		switch (anna - elsa) {
		case -2:
			System.out.println("안나가 이겼습니다.");
		break;
		case -1:
			System.out.println("엘사가 이겼습니다.");
		break;
		case 0:
			System.out.println("안나와 엘사는 비겼습니다.");
		break;
		case 1:
			System.out.println("안나가 이겼습니다.");
		break;
		case 2:
			System.out.println("엘사가 이겼습니다.");
		break;		
		}

        
		// 방법 4) 처음부터 끝까지 if문 else if... elseif... else 로 출력
        
		// 그냥 정말 단순무식한 방법으로 9가지 경우의 수를 차례대로 나열했다.
		
		if (anna == 2 && elsa == 2) {
			System.out.println("안나와 엘사는 보를 냈고 비겼습니다.");
		} else if (anna == 2 && elsa == 1) {
			System.out.println("안나는 보를 냈고, 엘사는 바위를 내서 안나가 이겼습니다.");
		} else if (anna == 2 && elsa == 0) {
			System.out.println("안나는 보를 냈고, 엘사는 가위를 내서 엘사가 이겼습니다.");
		} else if (anna == 1 && elsa == 2) {
			System.out.println("안나는 바위를 냈고, 엘사는 보를 내서 엘사가 이겼습니다.");
		} else if (anna == 1 && elsa == 1) {
			System.out.println("안나와 엘사는 위를 냈고 비겼습니다.");
		} else if (anna == 1 && elsa == 0) {
			System.out.println("안나는 바위를 냈고, 엘사는 가위를 내서 안나가 이겼습니다.");
		} else if (anna == 0 && elsa == 2) {
			System.out.println("안나는 가위를 냈고, 엘사는 보를 내서 안나가 이겼습니다.");
		} else if (anna == 0 && anna == 1) {
			System.out.println("안나는 가위를 냈고, 엘사는 바위를 내서 엘사가 이겼습니다.");
		} else {
			System.out.println("안나와 엘사는 가위를 냈고 비겼습니다.");
		}
		
	}
}

결과 : 

안나는 보을(를) 냈고 엘사는 바위을(를) 내서 안나가 이겼습니다.
안나는 보을(를) 냈고 엘사는 바위을(를) 내서 안나가 이겼습니다.
안나는 보을(를) 냈고 엘사는 바위을(를) 내서 안나가 이겼습니다.
안나는 보를 냈고, 엘사는 바위를 내서 안나가 이겼습니다.

안나는 보을(를) 냈고 엘사는 보을(를) 내서 안나와 엘사는 비겼습니다.
안나는 보을(를) 냈고 엘사는 보을(를) 내서 안나와 엘사는 비겼습니다.
안나는 보을(를) 냈고 엘사는 보을(를) 내서 안나와 엘사는 비겼습니다.
안나와 엘사는 보를 냈고 비겼습니다.

안나는 가위을(를) 냈고 엘사는 바위을(를) 내서 엘사가 이겼습니다.
안나는 가위을(를) 냈고 엘사는 바위을(를) 내서 엘사가 이겼습니다.
안나는 가위을(를) 냈고 엘사는 바위을(를) 내서 엘사가 이겼습니다.
안나와 엘사는 가위를 냈고 비겼습니다.

무작정 코딩부터 시작하지 말고 가위 바위 보를 연필로 종이에 그려놓고 규칙을 먼저 파악하자

사용자가 가위, 바위, 보를 선택하게 하려면 다음과 같이 바꿔줄 수 있다.

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

public class HW_ScissorsRockPaperGame {
	public static void main(String[] args) {
				
		System.out.println("'가위', '바위', '보'를 입력해주세요.");
		
		Random r = new Random();
		Scanner s = new Scanner(System.in);
		
		String you = s.nextLine();		// 문자로 입력을 받는다.
		int yourNum = 0;				// 계산을 위해 문자를 특정 숫자값으로 변환해 담을 공간.
		int computer = r.nextInt(3);	// 컴퓨터의 값을 입력 받는다.
		
		
		if (you.equals("가위")) {			// 문자열은 다른 언어와 달리 == 비교 연산자를 사용할 수 없다. equlas(Object)를 사용한다.
			yourNum = 0;				// 계산을 위해 문자를 숫자로 변환.
		} else if (you.equals("바위")) {
			yourNum = 1;
		} else {
			yourNum = 2;
		} 
		
		// print에 한글로 출력을 하기 위한 변수 선언.
		String scissors = "가위";
		String rock = "바위";
		String paper = "보";
		
		String yourDecision = "none";
		String computerDecision = "none";
		
		// 0:가위, 1:바위, 2:보  어떤것을 냈는 매칭시켜주기 위한 변수 선언.
		if (yourNum == 0) {
			yourDecision = scissors;
		} else if (yourNum == 1) {
			yourDecision = rock;
		} else {
			yourDecision = paper;
		}
		
		if (computer == 0) {
			computerDecision = scissors;
		} else if (computer == 1) {
			computerDecision = rock;
		} else {
			computerDecision = paper;
		}
		
		// 어떤 것을 냈는지 출력.
		System.out.print("사용자는 " + yourDecision + "을(를) 냈고 ");
		System.out.print("컴퓨터는 " + computerDecision + "을(를) 내서 ");
		
		// 승패 여부를 가려서 결과를 출력해주는 로직.
		if (yourNum == computer) {
			System.out.println("사용자와 컴퓨터는 비겼습니다.");
		} else if (yourNum - computer == 1) {
			System.out.println("사용자가 이겼습니다.");
		} else if (yourNum - computer == -2) {
			System.out.println("사용자가 이겼습니다.");
		} else {
			System.out.println("컴퓨터가 이겼습니다.");
		}
			
		
	}
	

}

+ Recent posts