자바로 숫자야구게임 만들기

사막의배·2021년 1월 13일
0

2021.1.13

첫 번째 시도

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

public class Baseball {
    public static void main(String[] args) throws Exception {

        // 랜덤으로 정답 만들기
        Random rand = new Random();

        int[] ans = {0, 0, 0};
        for (int i = 0; i < 3; i++){
            boolean isoverlap = true;
            while (isoverlap) {
                isoverlap = false;
                int num = rand.nextInt(10);
                for (int j = 0; j < i; j++){
                    if (num == ans[j] || num == 0){
                        isoverlap = true;
                    }
                }
                if (!isoverlap) {
                    ans[i] = num;
                }
            }
        }

        // 개발의 편의성을 위해 정답 출력
        int ans_num = ans[0] * 100 + ans[1] * 10 + ans[2];
        System.out.println(ans[0] + "" + ans[1] + "" + ans[2]);

        // 정답일 때 게임을 중단하기 위한 변수와 시도 횟
        boolean iscorrect = false;
        int cnt = 0;

        System.out.println("숫자야구게임을 시작합니다.");
        while(!iscorrect) {
            cnt++;
            System.out.println(cnt + " 번째 기회입니다.");

            Scanner sc = new Scanner(System.in);

            // 시도해볼 중복없는 수 만들기
            boolean isoverlap = true;
            int strike = 0;
            int ball = 0;
            int[] try_arr = new int[3];
            int try_ans = 0;

            while (isoverlap) {
                try_ans = sc.nextInt();
                try_arr[0] = (try_ans - try_ans % 100) / 100;
                try_arr[1] = (try_ans % 100 - try_ans % 100 % 10) / 10;
                try_arr[2] = try_ans % 10;
                if (try_arr[0] == try_arr[1] || try_arr[0] == try_arr[2] || try_arr[1] == try_arr[2]) {
                    isoverlap = true;
                } else {
                    isoverlap = false;
                }

                if (isoverlap) {
                    System.out.println("중복된 숫자가 존재합니다. 다시 입력해주세요.");
                }
            }

            if (try_ans == ans_num) {
                iscorrect = true;
            } else {
                System.out.println(try_ans + "를 입력하셨습니다.");

                for (int i = 0; i < 3; i++){
                    for (int j = 0; j < 3; j++){
                        if (try_arr[i] == ans[j]){
                            if (i == j) {
                                strike++;
                            } else {
                                ball++;
                            }
                        }
                    }
                }
                System.out.println(strike + "S" + ball + "B 입니다.");
                System.out.println("");
            }
        }
        System.out.println("정답은 " + ans_num + " 이었습니다!");
        System.out.println(cnt + "번 만에 정답을 맞추셨습니다!");
    }
}

첨삭1

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

public class Baseball {
    public static void main(String[] args) throws Exception {

        // 랜덤으로 정답 만들기
        Random rand = new Random();

        int[] ans = {0, 0, 0};
        for (int i = 0; i < 3; i++){
            boolean isoverlap = true;
            while (isoverlap) {
                boolean fail = false;
                int num = rand.nextInt(10);
                for (int j = 0; j < i; j++){
                    if (num == ans[j] || num == 0){
                        fail = true;
                        break;
                    }
                }
                if (!fail) {
                    ans[i] = num;
                    isoverlap = false;
                }
            }
        }

        // 개발의 편의성을 위해 정답 출력
        int ans_num = ans[0] * 100 + ans[1] * 10 + ans[2];
        System.out.println(ans[0] + "" + ans[1] + "" + ans[2]);

        // 정답일 때 게임을 중단하기 위한 변수와 시도 횟
        boolean iscorrect = false;
        int cnt = 0;

        System.out.println("숫자야구게임을 시작합니다.");
        while(!iscorrect) {
            cnt++;
            System.out.println(cnt + " 번째 기회입니다.");

            Scanner sc = new Scanner(System.in);

            // 시도해볼 중복없는 수 만들기
            boolean isoverlap = true;
            int strike = 0;
            int ball = 0;
            int[] try_arr = new int[3];
            int try_ans = 0;

            while (isoverlap) {
                try_ans = sc.nextInt();
                try_arr[0] = (try_ans - try_ans % 100) / 100;
                try_arr[1] = (try_ans % 100 - try_ans % 100 % 10) / 10;
                try_arr[2] = try_ans % 10;

                if (try_arr[0] == 0 || try_arr[1] == 0 || try_arr[2] == 0) {
                    System.out.println("0이 포함된 수 입니다. 다시 입력해주세요.");
                } else if (!(try_arr[0] == try_arr[1] || try_arr[0] == try_arr[2] || try_arr[1] == try_arr[2])) {
                    isoverlap = false;
                } else {
                    System.out.println("중복된 숫자가 존재합니다. 다시 입력해주세요.");
                }
            }

            if (try_ans == ans_num) {
                iscorrect = true;
            } else {
                System.out.println(try_ans + "를 입력하셨습니다.");

                for (int i = 0; i < 3; i++){
                    for (int j = 0; j < 3; j++){
                        if (try_arr[i] == ans[j]){
                            if (i == j) {
                                strike++;
                            } else {
                                ball++;
                            }
                        }
                    }
                }
                System.out.println(strike + "S" + ball + "B 입니다.");
                System.out.println("");
            }
        }
        System.out.println("정답은 " + ans_num + " 이었습니다!");
        System.out.println(cnt + "번 만에 정답을 맞추셨습니다!");
    }
}

첨삭2

profile
하루하루 성장하는 개발자

0개의 댓글