프로그래밍 언어/javastudy

자바 공부 #5 up&down게임

fladi 2021. 7. 5. 17:57
728x90

교재: 명품 JAVA ESSENTIAL

페이지 121~ 연습문제

 

<Open Challenge 숨은 번호 맞추기 게임>

 

1~99 사이 랜덤한 숫자를 맞추는 게임입니다.

 

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

 

일단 임포트 할 것들 모두 선언해줍니다.

 

예외처리타입 InputMismatchException은 스캐너로 nextInt()를 받았을 때

문자를 입력하는 등 잘못된 입력값을 받을 경우를 처리해주기 위해 사용됩니다.

(문제에서는 예외처리 하라는 말 없었지만 배웠으면 써먹어야죠.)

 

랜덤은 랜덤함수를 사용하기 위해 임포트 해줍니다.

스캐너도 임포트 해주고요.

 

	static void startgame() {
		Random r = new Random();
		int k = r.nextInt(100);
		int input;
		int count = 1;

		while (true) {
			System.out.print(count + ">>");

			try {
				input = scanner.nextInt();
			} catch (InputMismatchException e) {
				System.out.println("잘못된 입력입니다. 다시 입력하세요.");
				continue;
			}

			if (input == k) {
				System.out.println("맞았습니다.");
				break;
			} else if (input > k) {
				System.out.println("더 낮게");
			} else
				System.out.println("더 높게");

			count++;
		}
	}

 

startgame 함수는 게임을 진행하는 함수입니다.

 

먼저 랜덤한 숫자 k를 결정합니다. 랜덤 객체의 메소드 nextInt 괄호 안에 원하는 범위를 넣어줍니다. 

만약 nextInt(100)이라고 하면 0~99까지의 수를 랜덤하게 결정할 수 있습니다. (1~100까지로 하고싶으면 저기다 1을 더하면 될 듯 합니다.)

 

그리고 input으로 사용자에게 입력을 받습니다.

만약 input이 k보다 작다면 "더 높게"가 출력되고, k보다 크다면 "더 낮게"가 출력됩니다.

input과 k가 같아질 때 함수는 종료됩니다. 

 

여기서 count는 그냥 몇 번째 입력인지 알려주는 애입니다.

 

	public static void main(String[] args) {

		while (true) {
			System.out.println("Up & Down게임입니다. 숨겨진 수를 맞추어 보세요.");

			startgame();

			System.out.println("다시하시겠습니까?(y/n)");
			if (scanner.next().equals("n"))
				break;
		}
	}

 

메인은 최대한 간결하게 만들어줬습니다. 

다시 시작 유무만 결정해주고 나머지는 startgame함수에게 일을 맡깁니다.

 

 

전체코드입니다.

 

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

public class updown {
	static Scanner scanner = new Scanner(System.in);

	static void startgame() {
		Random r = new Random();
		int k = r.nextInt(100);
		int input;
		int count = 1;

		while (true) {
			System.out.print(count + ">>");

			try {
				input = scanner.nextInt();
			} catch (InputMismatchException e) {
				System.out.println("잘못된 입력입니다. 다시 입력하세요.");
				continue;
			}

			if (input == k) {
				System.out.println("맞았습니다.");
				return;
			} else if (input > k) {
				System.out.println("더 낮게");
			} else
				System.out.println("더 높게");

			count++;
		}
	}

	public static void main(String[] args) {

		while (true) {
			System.out.println("Up & Down게임입니다. 숨겨진 수를 맞추어 보세요.");

			startgame();

			System.out.println("다시하시겠습니까?(y/n)");
			if (scanner.next().equals("n"))
				break;
		}
	}
}

 

랜덤함수가 뭔지 배웠으니 많이 써먹어봐야겠습니다.

 

 

갑자기 떠올라서 컴퓨터랑 가위바위보하는 게임을 만들어봤습니다.

 

<컴퓨터랑 가위바위보>

 

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

 

똑같이 임포트 해줍니다.

 

	static void printresult(int num, String who) {
		System.out.print(who + ": ");
		switch(num) {
		case 1:
			System.out.println("가위");
			break;
		case 2:
			System.out.println("바위");
			break;
		case 3:
			System.out.println("보");
			break;
		}
	}

 

저는 가위를 1, 바위를 2, 보를 3으로 설정해둬서 누가 뭘 냈는지 출력하기 위한 함수를 만들어줬습니다.

main은 간결해야하니까요.

 

	static void match(int k, int input) {
		if (input == k) {
			System.out.println("비겼습니다.");
		}
		else if ( (input != 1 && k<input) || input == 1 && k == 3) {
			System.out.println("이겼습니다.");
		}
		else
			System.out.println("졌습니다.");
	}

 

input기준으로 이겼는지 비겼는지 졌는지 알려주는 함수입니다.

 

	public static void main(String[] args) {
		Random r = new Random();
		int k = r.nextInt(3) + 1;
		int input;
		String restart;

		while (true) {
			System.out.println("==================================");
			System.out.print(">> 가위(1), 바위(2), 보(3) 입력: ");
			try {
				input = scanner.nextInt();
			} catch (InputMismatchException e) {
				System.out.println("잘못된 입력입니다. 다시 입력하세요");
				continue;
			}
			
			if (input >3 || input <1) {
				System.out.println("잘못된 입력입니다.다시 입력하세요.");
				continue;
			}
			
			printresult(k, "컴퓨터");
			printresult(input, "너");
			
			match(k, input);
			
			System.out.print("다시 시작하시겠습니까?(y/n): ");
			restart = scanner.next();
			if (restart.equals("n"))
				break;
		}
	}

 

main은 입력을 받아 잘못된 입력일 경우 처리해주고, 다시시작 유무를 물어보는 역할을 합니다.

 

뚝딱 만들어보니 재밌네요. 문제 더 풀어야겠습니다.

728x90