본문 바로가기
프로그래밍 기초/Java Festival

[Java Festival] 29. 두 정수의 합 맞추기 게임

by 제이투더문 2024. 7. 5.

 

 안녕하세요, 작가 J입니다. 이번에는 두 개의 랜덤 정수를 더한 값을 맞추는 게임을 만들어 보겠습니다. 사용자는 두 정수의 합을 입력하며, 맞추지 못하면 최대 5번의 기회가 주어집니다. 5번 틀리면 게임이 종료됩니다.

 

[Java Festival 29] 두 정수의 합 맞추기 게임

랜덤으로 정수 2개를 뽑아 아래와 같이 출력

사용자는 두 수의 합을 입력

두 수의 합과 입력한 수가 일치하면 "Success"

두 수의 합과 입력한 수가 일치하지 않으면 "Fail"을 출력

* 기회는 5번! 5번 틀리면 GAME OVER

 

 

 

코드 풀이 1: 기본 방식

package Ex;

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

public class Ex29 {

    public static void main(String[] args) {
        Random rd = new Random();
        Scanner sc = new Scanner(System.in);
        
        int num1 = 0, num2 = 0, failCount = 0;
        
        while (failCount < 5) { // 실패 횟수가 5보다 작을 때 반복
            num1 = rd.nextInt(9) + 1; // 1부터 9까지의 랜덤 정수 생성
            num2 = rd.nextInt(9) + 1; // 1부터 9까지의 랜덤 정수 생성
            
            System.out.print(num1 + " + " + num2 + " = "); // 문제 출력
            int answer = sc.nextInt(); // 사용자 입력 받기
            
            if (answer == num1 + num2) { // 정답 확인
                System.out.println("SUCCESS!"); // 정답이면 SUCCESS 출력
            } else {
                System.out.println("Fail..."); // 오답이면 Fail 출력
                failCount++; // 실패 횟수 증가
            }
        }
        
        System.out.println("GAME OVER!"); // 실패 횟수가 5번이 되면 게임 종료
        sc.close(); // Scanner 객체 닫기
    }
}

 

1. 랜덤 및 스캐너 객체 생성

  • Random rd = new Random();
  • Scanner sc = new Scanner(System.in);

2. 변수 초기화

  • int num1 = 0, num2 = 0, failCount = 0;

3. 게임 루프

  • while (failCount < 5) { ... }
  • 실패 횟수가 5번 미만일 때 반복합니다.

4. 랜덤 정수 생성 및 문제 출력

  • num1 = rd.nextInt(9) + 1;
  • num2 = rd.nextInt(9) + 1;
  • System.out.print(num1 + " + " + num2 + " = ");

5. 사용자 입력 및 정답 확인

  • int answer = sc.nextInt();
  • if (answer == num1 + num2) { ... }
    • 정답이면 "SUCCESS!" 출력
  • else { ... }
    • 오답이면 "Fail..." 출력 및 실패 횟수 증가

6. 게임 종료

  • System.out.println("GAME OVER!");

 

코드 풀이 2: Math.random()을 사용한 방식

package Ex;

import java.util.Scanner;

public class Ex29Alternative {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int failCount = 0;
        final int MAX_TRIES = 5;
        
        while (failCount < MAX_TRIES) { // 실패 횟수가 최대 시도 횟수보다 작을 때 반복
            int num1 = (int)(Math.random() * 9) + 1; // 1부터 9까지의 랜덤 정수 생성
            int num2 = (int)(Math.random() * 9) + 1; // 1부터 9까지의 랜덤 정수 생성
            
            System.out.print(num1 + " + " + num2 + " = "); // 문제 출력
            int userAnswer = sc.nextInt(); // 사용자 입력 받기
            
            if (userAnswer == num1 + num2) { // 정답 확인
                System.out.println("SUCCESS!"); // 정답이면 SUCCESS 출력
            } else {
                System.out.println("Fail..."); // 오답이면 Fail 출력
                failCount++; // 실패 횟수 증가
            }
        }
        
        System.out.println("GAME OVER!"); // 실패 횟수가 최대 시도 횟수에 도달하면 게임 종료
        sc.close(); // Scanner 객체 닫기
    }
}

 

1. 랜덤 정수 생성 및 문제 출력

  • int num1 = (int)(Math.random() * 9) + 1;
  • int num2 = (int)(Math.random() * 9) + 1;
  • System.out.print(num1 + " + " + num2 + " = ");

 

마무리

 이번 예제에서는 두 개의 랜덤 정수를 더한 값을 맞추는 게임을 두 가지 방식으로 구현해 보았습니다. 첫 번째 방식은 Random 클래스를 사용한 방식이며, 두 번째 방식은 Math.random() 함수를 사용한 방식입니다. 두 가지 방법 모두 이해하시는데 도움이 되길 바랍니다.

 

 프로그래밍을 시작하는 모든 분께 이 예제가 도움이 되길 바랍니다. 앞으로도 다양한 유형의 문제를 통해 여러분의 학습을 도울 수 있도록 노력하겠습니다. 감사합니다!