Coding/JAVA

[JAVA] 가위바위보 게임

민톨이 2024. 3. 18. 12:13
728x90

📖 본 글은 학습한 가위바위보 게임 코드를 세세하게 해부하여 이해하려고 작성하였습니다.

 

📕 게임조건

<입력조건 2가지 구분해서 총 2가지 방식의 게임 개발> 
- user 숫자 0, 1, 2 중 하나 입력 하는 경우
- user 문자열 가위 , 바위, 보 중 하나 입력 하는 경우

<탈출조건>
- 9를 입력하면 탈출

 
 
 

📕 Tip ! 이 게임을 실행하기 위해서 가위, 바위, 보라는 문자열을 숫자에 대입하여 비교연산자를 사용해야함.

user - com 가위 0 바위 1 보 2
가위 0 0 -1 -2
바위 1  1 0 -1
보 2 2 1 0

0 = 비김 / 2 = com이 이김 / 1 = user가 이김 
 
ex)
user가 지는 경우: -1, 2
user가 이기는 경우: -2, 1
 

📕 초기설정 

( 인덱스 숫자와 순서는 무관)
 
📌 기본설정
- user의 값에서 com(컴퓨터) 값 빼기 (-)  => ( int cal = user - com)
- 가위=0 바위=1 보=2
 

1. user와 com이라는 정수 변수를 각각 선언

    - 컴퓨터는 랜덤값을 생성해야함
    - 사용자는 직접 입력 - Scanner 생성

Scanner sc = new Scanner(System.in);
		
		int com = (int)(Math.random()*3); // 컴퓨터 랜덤값 생성
		System.out.println("0,1,2 숫자 중 하나를 입력하시오>");
		int user = sc.nextInt(); // 스캐너에서 값 꺼내온다

 

2. user에서 com의 값을 뺀 값을 담을 변수 cal 생성

int cal = user - com;
if((cal == -1 || cal == 2)) {
	System.out.printf("user %s, com %s, com 승리\n", sUser, sCom);
} else if(cal == -2 || cal == 1) {
	System.out.printf("user %s, com %s, user 승리\n", sUser, sCom);
} else {
	System.out.println("비김");
}

 

3.  trans변수 임의 생성

 
3-1. (1번 게임) 정수 0, 1, 2 중 하나를 입력하는 경우의 trans 생성

static String trans(int n) {
		String str = "";
		if(n == 0) {
			str = "가위";
		}
		else if(n == 1) {
			str = "바위";
		} else {
			str = "보";
		}

		return str;
	}
String sUser = trans(user);
String sCom = trans(com);

 
3-2. (2번 게임) 문자열 가위, 바위, 보 중 하나를 입력하는 경우의 trans 생성

static int trans02(String s) {
		int rs = 0;
		if(s.equals("가위")) {
			rs = 0;
		}
		else if(s.equals("바위")) {
			rs = 1;
		} else {
			rs = 2;
		}
		
		return rs;
	}
String sCom = trans(com);		
int user = trans02(sUser);

 

 
4. 숫자, 문자열 2가지 게임 중 몇 번 실행할 지 선택하기 (switch문 사용함)

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("게임을 선택하세요.");
		System.out.println("숫자로 입력 => 1, 문자로 입력 => 2");
		int choice = sc.nextInt();
		switch(choice) {
		case 1:
			game01();
			break;
			
		case 2:
			game02();
			break;
		}

 

5. 가위바위보 결과 출력값 함수로 빼기

	//함수로 빼기(재사용 위해)
	static void process(int user, int com, String sUser, String sCom) {
		int cal = user - com;
		
		if(cal == -1 || cal == 2) {
			System.out.printf("user %s, com %s, com 승리\n",sUser, sCom);
		} else if(cal == -2 || cal == 1) {
			System.out.printf("user %s, com %s, user 승리\n",sUser, sCom);
		} else {
			System.out.printf("user %s, com %s, user 비김\n",sUser, sCom);
		}
	}

 
 

📕 완성된 전체 코드

package projectex;

import java.util.Scanner;

public class RockPaperScissorGame {

	static String trans(int n) {
		String str = "";
		if(n == 0) {
			str = "가위";
		}
		else if(n == 1) {
			str = "바위";
		} else {
			str = "보";
		}

		return str;
	}
	
	static int trans02(String s) {
		int rs = 0;
		if(s.equals("가위")) {
			rs = 0;
		}
		else if(s.equals("바위")) {
			rs = 1;
		} else {
			rs = 2;
		}
		
		return rs;
	}
	
	//함수로 빼기(재사용 위해)
	static void process(int user, int com, String sUser, String sCom) {
		int cal = user - com;
		
		if(cal == -1 || cal == 2) {
			System.out.printf("user %s, com %s, com 승리\n",sUser, sCom);
		} else if(cal == -2 || cal == 1) {
			System.out.printf("user %s, com %s, user 승리\n",sUser, sCom);
		} else {
			System.out.printf("user %s, com %s, user 비김\n",sUser, sCom);
		}
	}
	

	// 게임1: user 숫자 0, 1, 2 중 하나 입력하는 경우
	static void game01() {
		while(true) { //무한루프

			Scanner sc = new Scanner(System.in);
			int com = (int)(Math.random()*3); // 컴퓨터 랜덤값 생성
			System.out.println("0,1,2 (종료:9) 숫자 중 하나를 입력하시오>");
			int user = sc.nextInt(); // 스캐너에서 값 꺼내온다
			if(user == 9) {
				System.out.println("End!!");
				break;
			}
			if(user > 2 || user < 0) {
				System.out.println("0 ~ 2 사이의 숫자를 넣으세요");
				continue; // user 가 잘못된 값을 입력할 시 발생
			}
			String sUser = trans(user);
			String sCom = trans(com);
			
			process(user, com, sUser, sCom);
			

		}


	}

	// 게임2: user 문자열 가위, 바위, 보 중 하나 입력 하는 방식

	static void game02() {
		while(true) {
			Scanner sc = new Scanner(System.in);
			int com = (int)(Math.random() * 3);
			System.out.println("가위, 바위, 보 (종료: 9) 중 하나를 입력하시오>");
			String sUser = sc.next();
			
			if(sUser.equals("9")) {
				System.out.println("End!!");
				break;
			} 
			
			String sCom = trans(com);		
			int user = trans02(sUser);
			
			process(user, com, sUser, sCom);			
			
		}
	}

	
	//게임 1번, 2번 중 실행할 번호 고르기
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("게임을 선택하세요.");
		System.out.println("숫자로 입력 => 1, 문자로 입력 => 2");
		int choice = sc.nextInt();
		switch(choice) {
		case 1:
			game01();
			break;
			
		case 2:
			game02();
			break;
		}

	}

}

 
📍 전체 코드의 큰 틀

- game01 / game02의 세부 사항을 각각 적기 전에, 공통 값들은 위에 적어주며 재사용 용이하게 작성