[JAVA]Random클래스를 활용한 UP&DOWN 게임

이정원·2025년 2월 17일
0

기능 명세

  1. 사용자가 게임메뉴를 선택
    • 메뉴목록
      1. 게임시작
      2. 게임점수
      3. 게임종료
  2. Random 클래스를 사용하여 난수 생성
  3. 생성된 난수가 1~99사이의 난수가 아니라면 잘못 생성된 난수로 프로그램 종료
  4. 게임시작 메뉴 선택시 숫자 입력
  5. 범위를 벗어나는 숫자 입력 시 재입력 요청
  6. 각 회차 별로 입력된 숫자가 난수보다 작거나 클 때 up&down 출력
  7. 사용자가 정답을 맞췄을 시 게임메뉴 목록 노출
  8. 몇 회차 만에 맞췄는지 회차정보를 통해 게임점수 기록
  9. 시작된 게임이 없이 게임점수 메뉴 선택시 기록이 없다는 문구 출력
  10. 최고 기록 경신 시 게임점수에 있는 최고 기록 갱신
  11. 게임종료 메뉴 선택시 게임 종료

코드

package kr.or.iei.quiz;

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

public class UpDown {
	public void upDownQuiz() {
		Random r = new Random();
		Scanner sc = new Scanner(System.in);
		int highScore = 0;
		boolean power = true;

		while(power) {
			System.out.println("=====1~99 랜덤숫자게임=====");
			System.out.println("1. Game Start");
			System.out.println("2. Game Score");
			System.out.println("3. End Game");
			System.out.print("입력> ");
			int menu = sc.nextInt();
			int gameNum = 1;
			int ranNum = r.nextInt(99)+1;
			if(ranNum < 1 || ranNum >99) {
				System.out.println("잘못된 랜덤 숫자입니다.");
				System.out.println("프로그램이 종료됩니다.");
				break;
				}
			switch(menu) {
			case 1:
				while(true) {
					System.out.print(gameNum+"회차 번호 입력: ");
					int num = sc.nextInt();
					if(num < 1 || num > 99) {
						System.out.println("잘못된 입력입니다. 다시 입력하세요");
						continue;
					}
					if(ranNum == num) {
						System.out.println("<< 정답 >>");
						if(highScore == 0 || gameNum < highScore) {
							highScore = gameNum;
						}
						break;
					}else if(ranNum > num){
						System.out.println("<< UP >>");
						gameNum += 1;
					}else if(ranNum < num) {
						System.out.println("<< DOWN >>");
						gameNum += 1;

					}
				}
				break;
			case 2:
				if(highScore==0) {
					System.out.println("아직 기록이 없습니다.");
				}else{
					System.out.println("현재 최고 기록은 "+highScore+"회 입니다.");
				}
				break;
			case 3:
				power = false;
				System.out.println("게임을 종료합니다.");
			}
		}
	}
   
   
}

후기

반복문, 조건문, 분기문과 Random 클래스를 활용해 만들어봤다. 처음에는 엄청난 노가다 작업이라고 생각을 했는데 하다 보니 재미있었다. switch문에 case 1에 break; 를 case 1 안에 상단 부분에 작성하여 코드가 제대로 돌지 않고 게임이 종료되었다. 게임점수를 최고기록이 경신될 때 마다 최고기록을 갱신해주는 부분에서 조금 헤멨다. up과 down이 출력될 때만 입력한회차(gameNum)가 늘어나게 하여 정답이 되기까지 재입력을 받게 하고 정답을 맞췄을 때, 최고기록(highScore)의 값이 0이었거나, 입력한회차(gameNum)가 최고기록(highScore)보다 낮은 경우 최고기록(highScore)에 입력한회차(gameNum)를 대입해줬다. highScore를 최고기록으로 출력해주니 문제가 해결되었다.

앞으로의 계획

생각보다 공부가 되는 부분이 많아 좋았다. 배운 것을 활용하여 간단한 예제 코드라도 작성해봐야겠다. 지금까지 배운 것을 토대로 DB를 활용하지 않고 만드는 간단한 일회성 노가다 게시판을 만들어 볼 예정이다.

profile
Study.log

0개의 댓글