자바강사 낙자쌤

JAVA로 가위바위보 게임 구현하기 본문

JAVA

JAVA로 가위바위보 게임 구현하기

낙자쌤™ 2021. 8. 31. 18:46
728x90
반응형

Java에서 변수와 자료형, 조건문, 반복문을 강의한 후 과제로 내는 가위바위보 게임이다.

해당 게임의 조건은 다음과 같다.

  • 이클립스에서 작성하고, quiz 패키지에 RockPaperScissors 클래스를 생성한다.
  • 프로그램을 실행하면 컴퓨터는 1~3사이의 난수를 생성한다. 가위(1) 바위(2) 보(3)
  • 사용자도 1~3사이의 정수 중 하나를 입력한다.
  • 승부를 판단하여 출력한다.
  • 만약 1~3을 벗어난 입력값이면 잘못 입력되었다고 출력한다. (이 경우 게임횟수에 포함되지 않는다.)
  • 5번 게임을 진행한 후 계속할지 물어본다.

전체 코드는 다음과 같다. 라인별로 주석을 달아두었으니 참조하길 바란다.

package quiz;

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

public class RockPaperScissors {

	public static void rpsGameStart() {
		
		Scanner scanner = new Scanner(System.in);
		Random random = new Random();
		int gameCount = 0; // 게임 카운트용 변수
				
		while(true) {
			//1. 난수생성 - 컴퓨터입장에서 가위/바위/보
			int com = random.nextInt(10000) % 3 + 1;//1~3사이의 난수
			System.out.println("컴퓨터:"+ com);
			
			//2. 사용자입력 
			int user = 0;
			System.out.println("가위바위보를 입력하세요.");
			System.out.print("가위(1), 바위(2), 보(3)=>");
			
			try {
				user = scanner.nextInt();
			}
			catch (Exception e) {
				scanner.nextLine();
				e.printStackTrace();
			}
			
			//3.승부판단		
			//사용자가 정상적으로 입력한 경우
			if(!(user<1 || user>3)) {
				
				//가위바위보 출력용 함수를 이용해서 정보출력
				System.out.printf("사용자:%s, 컴퓨터:%s ", displayRPS(user), displayRPS(com));				
					
				switch(user - com) {
				case 0:
					System.out.println("비겼습니다.");break;
				case 1: case -2:
					System.out.println("이겼습니다.");break;
				case 2: case -1:
					System.out.println("졌습니다.");break;
				}
				
				gameCount++;//게임카운트 증가			
			}
			else {
				System.out.println("가위바위보 할줄 몰라요?? 제대로 내세요 ㅋ");
			}
			
			//게임재시작 여부 확인			 
			if(gameCount>=5) {				
				int restart;
				while(true) {
					System.out.print("게임재시작(1), 종료(0):");
					restart = scanner.nextInt();
					if(restart==0 || restart==1) {
						//정상입력이면 루프탈출
						break;
					}
					else {
						System.out.println("잘못입력해씸ㅜㅜ\n");
					}
				}								
				if(restart==0) {
					//게임종료를 위해 while루프 탈출
					break;
				}
				else {
					System.out.println("게임 재시작^^");
					gameCount=0;
				}
			}
		}//// end of while		
	}////end of rpsGameStart()
	
	public static String displayRPS(int n) {
		String str = "";
		switch(n) {
		case 1: str="가위";break;
		case 2: str="바위";break;
		case 3: str="보";break;
		}
		return str;
	}
	
	public static void main(String[] args) {
		rpsGameStart();		
	}
}

소스코드 중 승부판단에 대한 부분만 간단히 설명하겠다.

가위, 바위, 보는 각각 1, 2, 3으로 설정하였다.

사용자와 컴퓨터가 제시한 숫자의 차를 구하면 다음과 같은 케이스가 나온다.

  • 0 : 차가 0이라면 둘다 같은걸 냈을때이므로 비긴 경우
  • 1 혹은 -2 : 사용자가 이긴 경우.
  • 2 혹은 -1 : 사용자가 패배한 경우.
  사용자 컴퓨터
승리 가위(1) 보(3) -2
바위(2) 가위(1) 1
보(3) 바위(2) 1
패배 가위(1) 바위(2) -1
바위(2) 보(3) -1
보(3) 가위(1) 2

만약 해당 로직이 없다면 승부판단을 위해 9번의 조건을 사용해야 한다.

끄읏~

 

728x90
반응형