From b9d1d8eddaf397dc4ac526d83d65395f1df9a445 Mon Sep 17 00:00:00 2001 From: InSooBeen <163115401+InSooBeen@users.noreply.github.com> Date: Sun, 7 Jul 2024 16:44:44 +0900 Subject: [PATCH 1/4] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 야구게임 java 코드 기능 구현에 대한 설 --- docs/README.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29bb2..6a3dc964cc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,50 @@ +기능 구현 목록 + +1. public static void startGame() +야구 게임을 실행하는 함수. + +do-while문을 통해 게임을 1번은 무조건 실행하며, 이후에는 restartGame의 결과에 따라 새로운 게임을 진행할지, 게임을 종료할지를 결정 +do-while문 내부에서는 while문을 이용하여 사용자가 정답을 맞출때까지 게임을 진행함. + +게임 처리 방식은 다음과 같음. + +1) 사용자가 입력한 숫자가 형식에 맞으면 check3Strike를 통해 정답인지 확인. +2) 정답이라면 현재 게임을 종료하고 restartGame을 통해 게임을 다시 시작할지, 종료할지를 결정. +3) 정답이 아니라면 checkState를 이용하여 strike에 해당하는 숫자가 있다면 boolean 배열인 check에 해당 위치를 true로 변경하고 checkStrike를 이용하여 strike 개수를 구함. +4) checkBall을 이용하여 스트라이크에 해당하는 숫자의 위치를 제외한 나머지 숫자를 비교하여 ball을 구함. +5) nothing의 개수는 3-(stike+ball)로 계산 +6) printResult를 이용하여 사용자가 입력한 숫자에 대한 결과를 출력 +7) 맞출때까지 게임 진행 + +5. public static boolean restartGame() +사용자가 정답을 맞추면 게임 재시작 안내 문구를 출력하고 응답 결과를 boolean으로 반환하는 함수. + +6. public staic String setComputer() +컴퓨터가 3자리의 숫자를 랜덤으로 생성하게 하는 함수. +1부터 9까지의 숫자를 Random으로 3번 생성해서 빈 문자열에 차례대로 더하는 방식. +3자리 숫자는 String 타입으로 나타냄. + +7. public static String setUser() +'숫자를 입력해주세요'라는 메세지를 출력하고 사용자로부터 3자리 숫자를 입력받는 함수. +사용자가 입력한 문자의 길이가 3자리를 만족하지 않거나, 숫자 외의 값을 입력한 경우 IllegalArgumentException을 발생시킨다. + +8. public static boolean check3Strike(String computer, String user) +computer의 숫자와 user가 입력한 숫자가 동일한지를 확인하는 함수. +정답을 맞춘 경우 '3스트라이크', '3개의 숫자를 모두 맞히셨습니다! 게임 종료'라는 메세지를 출력하고 true를 반환한다. +정답을 맞추지 못한 경우 false를 반환한다. + +9. public static boolean[] checkState(String computer, String user) +사용자가 입력한 3자리 중 스트라이크에 해당하는 숫자의 위치를 true로 변경하는 함수. +ball을 계산할 때 strike처리가 된 숫자는 계산에 포함되지 않도록 하기 위한 기능. + +10. public static int checkStrike(String computer, String user) +사용자가 입력한 3자리 중 스트라이크에 해당하는 숫자의 개수를 세고 반환하는 함수. + +11. public static int checkBall(String computer, string user, boolean[] check) +사용자가 입력한 3자리 중 스트라이크에 포함되지 않은 숫자를 컴퓨터 숫자와 비교하며 ball의 개수를 세고 반환하는 함수. + +12. public static void printResult(int strike, int ball, int nothing) +사용자가 입력한 3자리 숫자의 결과를 알려주는 함수. +nothing이 3개이면 '낫싱'을 출력함. +ball과 strike가 둘다 존재하면 볼, 스트라이크로 출력함. +ball만 존재하거나 strike만 존재하면 볼 또는 스트라이크만 출력함. From 6386ccd912a6c002de02c4149483760ffec795b7 Mon Sep 17 00:00:00 2001 From: InSooBeen <163115401+InSooBeen@users.noreply.github.com> Date: Sun, 7 Jul 2024 17:53:03 +0900 Subject: [PATCH 2/4] upload --- src/main/java/baseball/Application.java | 104 +++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index dd95a34214..47ccdd88e4 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -1,7 +1,109 @@ package baseball; +import camp.nextstep.edu.missionutils.Randoms; +import camp.nextstep.edu.missionutils.Console; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + //TODO: 숫자 야구 게임 구현 + System.out.println("숫자 야구 게임을 시작합니다."); + startGame(); + } + public static void printResult(int strike, int ball, int nothing){ + if (nothing == 3) { + System.out.println("낫싱"); + } else if (ball != 0 && strike != 0) { + System.out.println(ball + "볼 " + strike + "스트라이크"); + } else if (ball == 0) { + System.out.println(strike + "스트라이크"); + } else { + System.out.println(ball + "볼"); + } + } + public static boolean[] checkState(String computer, String user){ + boolean[] check = new boolean[]{false, false, false}; + for (int i = 0; i < 3; i++) { + if (computer.charAt(i) == user.charAt(i)) { + check[i] = true; + } + } + return check; + } + public static int checkStrike(String computer, String user){ + int strike = 0; + for (int i = 0; i < 3; i++) { + if (computer.charAt(i) == user.charAt(i)) { + strike++; + } + } + return strike; + } + public static int checkBall(String computer, String user, boolean[] check){ + int ball = 0; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if (check[i]) { + break; //스트라이크 처리가 된 숫자이면 넘기기 + } + if (computer.charAt(j) == user.charAt(i) && i != j) { + ball++; + continue; + } + } + } + return ball; + } + public static void startGame(){ + String computer, user; + int strike, ball, nothing; + boolean[] check = new boolean[3]; + do{ + computer = setComputer(); + strike=0; ball=0; nothing=0; + while(true){ + user = setUser(); + if(check3Strike(computer, user)){ //정답을 맞힌 경우 + break; + } + else{ //정답이 아닌 경우 + check = checkState(computer, user); + strike = checkStrike(computer, user); + ball = checkBall(computer, user, check); + nothing = 3-(strike+ball); + printResult(strike, ball, nothing); + } + } + + }while(restartGame()); + } + public static boolean restartGame(){ + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + String game = Console.readLine(); + if(game.equals("2")) return false; + return true; + } + public static boolean check3Strike(String computer, String user){ + if (computer.equals(user)) { + System.out.println("3 스트라이크"); + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + return true; + } + return false; + } + public static String setComputer(){ + String computer=""; + for(int i=0;i<3;i++) { + int num = Randoms.pickNumberInRange(1, 9); + computer += num; + } + return computer; + } + public static String setUser(){ + System.out.print("숫자를 입력해주세요 : "); + String user = Console.readLine(); + if(user.length()!=3 || !(user.chars().allMatch(Character::isDigit))){ //사용자 입력 답변의 길이가 다르거나 숫자가 아니면 + throw new IllegalArgumentException(); + } + return user; } } From 5912ffcce6fb9efd0fc68c2a386ec53b221cf721 Mon Sep 17 00:00:00 2001 From: InSooBeen <163115401+InSooBeen@users.noreply.github.com> Date: Sun, 7 Jul 2024 18:31:16 +0900 Subject: [PATCH 3/4] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 야구게임 기능 구현 설명 수정 --- docs/README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/README.md b/docs/README.md index 6a3dc964cc..3f5db6cf01 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,42 +8,42 @@ do-while문 내부에서는 while문을 이용하여 사용자가 정답을 맞 게임 처리 방식은 다음과 같음. -1) 사용자가 입력한 숫자가 형식에 맞으면 check3Strike를 통해 정답인지 확인. -2) 정답이라면 현재 게임을 종료하고 restartGame을 통해 게임을 다시 시작할지, 종료할지를 결정. -3) 정답이 아니라면 checkState를 이용하여 strike에 해당하는 숫자가 있다면 boolean 배열인 check에 해당 위치를 true로 변경하고 checkStrike를 이용하여 strike 개수를 구함. -4) checkBall을 이용하여 스트라이크에 해당하는 숫자의 위치를 제외한 나머지 숫자를 비교하여 ball을 구함. -5) nothing의 개수는 3-(stike+ball)로 계산 -6) printResult를 이용하여 사용자가 입력한 숫자에 대한 결과를 출력 -7) 맞출때까지 게임 진행 - -5. public static boolean restartGame() +-사용자가 입력한 숫자가 형식에 맞으면 check3Strike를 통해 정답인지 확인. +-정답이라면 현재 게임을 종료하고 restartGame을 통해 게임을 다시 시작할지, 종료할지를 결정. +-정답이 아니라면 checkState를 이용하여 strike에 해당하는 숫자가 있다면 boolean 배열인 check에 해당 위치를 true로 변경하고 checkStrike를 이용하여 strike 개수를 구함. +-checkBall을 이용하여 스트라이크에 해당하는 숫자의 위치를 제외한 나머지 숫자를 비교하여 ball을 구함. +-nothing의 개수는 3-(strike+ball)로 계산 +-printResult를 이용하여 사용자가 입력한 숫자에 대한 결과를 출력 +-맞출때까지 게임 진행 + +2. public static boolean restartGame() 사용자가 정답을 맞추면 게임 재시작 안내 문구를 출력하고 응답 결과를 boolean으로 반환하는 함수. -6. public staic String setComputer() +3. public staic String setComputer() 컴퓨터가 3자리의 숫자를 랜덤으로 생성하게 하는 함수. 1부터 9까지의 숫자를 Random으로 3번 생성해서 빈 문자열에 차례대로 더하는 방식. 3자리 숫자는 String 타입으로 나타냄. -7. public static String setUser() +4. public static String setUser() '숫자를 입력해주세요'라는 메세지를 출력하고 사용자로부터 3자리 숫자를 입력받는 함수. 사용자가 입력한 문자의 길이가 3자리를 만족하지 않거나, 숫자 외의 값을 입력한 경우 IllegalArgumentException을 발생시킨다. -8. public static boolean check3Strike(String computer, String user) +5. public static boolean check3Strike(String computer, String user) computer의 숫자와 user가 입력한 숫자가 동일한지를 확인하는 함수. 정답을 맞춘 경우 '3스트라이크', '3개의 숫자를 모두 맞히셨습니다! 게임 종료'라는 메세지를 출력하고 true를 반환한다. 정답을 맞추지 못한 경우 false를 반환한다. -9. public static boolean[] checkState(String computer, String user) +6. public static boolean[] checkState(String computer, String user) 사용자가 입력한 3자리 중 스트라이크에 해당하는 숫자의 위치를 true로 변경하는 함수. ball을 계산할 때 strike처리가 된 숫자는 계산에 포함되지 않도록 하기 위한 기능. -10. public static int checkStrike(String computer, String user) +7. public static int checkStrike(String computer, String user) 사용자가 입력한 3자리 중 스트라이크에 해당하는 숫자의 개수를 세고 반환하는 함수. -11. public static int checkBall(String computer, string user, boolean[] check) +8. public static int checkBall(String computer, string user, boolean[] check) 사용자가 입력한 3자리 중 스트라이크에 포함되지 않은 숫자를 컴퓨터 숫자와 비교하며 ball의 개수를 세고 반환하는 함수. -12. public static void printResult(int strike, int ball, int nothing) +9. public static void printResult(int strike, int ball, int nothing) 사용자가 입력한 3자리 숫자의 결과를 알려주는 함수. nothing이 3개이면 '낫싱'을 출력함. ball과 strike가 둘다 존재하면 볼, 스트라이크로 출력함. From 28dc0b8103ea42880b0fc443a11bd69973329f66 Mon Sep 17 00:00:00 2001 From: InSooBeen <163115401+InSooBeen@users.noreply.github.com> Date: Sun, 7 Jul 2024 18:36:59 +0900 Subject: [PATCH 4/4] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 야구게임 구현 기능 설명 --- docs/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 3f5db6cf01..479e70f3ad 100644 --- a/docs/README.md +++ b/docs/README.md @@ -26,12 +26,12 @@ do-while문 내부에서는 while문을 이용하여 사용자가 정답을 맞 4. public static String setUser() '숫자를 입력해주세요'라는 메세지를 출력하고 사용자로부터 3자리 숫자를 입력받는 함수. -사용자가 입력한 문자의 길이가 3자리를 만족하지 않거나, 숫자 외의 값을 입력한 경우 IllegalArgumentException을 발생시킨다. +사용자가 입력한 문자의 길이가 3자리를 만족하지 않거나, 숫자 외의 값을 입력한 경우 IllegalArgumentException을 발생시킴. 5. public static boolean check3Strike(String computer, String user) computer의 숫자와 user가 입력한 숫자가 동일한지를 확인하는 함수. -정답을 맞춘 경우 '3스트라이크', '3개의 숫자를 모두 맞히셨습니다! 게임 종료'라는 메세지를 출력하고 true를 반환한다. -정답을 맞추지 못한 경우 false를 반환한다. +정답을 맞춘 경우 '3스트라이크', '3개의 숫자를 모두 맞히셨습니다! 게임 종료'라는 메세지를 출력하고 true를 반환함. +정답을 맞추지 못한 경우 false를 반환함. 6. public static boolean[] checkState(String computer, String user) 사용자가 입력한 3자리 중 스트라이크에 해당하는 숫자의 위치를 true로 변경하는 함수.