forked from woowacourse-precourse/java-baseball-6
-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[숫자 야구 게임] 인수빈 과제 제출합니다. #6
Open
InSooBeen
wants to merge
4
commits into
LandvibeDev:main
Choose a base branch
from
InSooBeen:InSooBeen
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
기능 구현 목록 | ||
|
||
1. public static void startGame() | ||
야구 게임을 실행하는 함수. | ||
|
||
do-while문을 통해 게임을 1번은 무조건 실행하며, 이후에는 restartGame의 결과에 따라 새로운 게임을 진행할지, 게임을 종료할지를 결정 | ||
do-while문 내부에서는 while문을 이용하여 사용자가 정답을 맞출때까지 게임을 진행함. | ||
|
||
게임 처리 방식은 다음과 같음. | ||
|
||
-사용자가 입력한 숫자가 형식에 맞으면 check3Strike를 통해 정답인지 확인. | ||
-정답이라면 현재 게임을 종료하고 restartGame을 통해 게임을 다시 시작할지, 종료할지를 결정. | ||
-정답이 아니라면 checkState를 이용하여 strike에 해당하는 숫자가 있다면 boolean 배열인 check에 해당 위치를 true로 변경하고 checkStrike를 이용하여 strike 개수를 구함. | ||
-checkBall을 이용하여 스트라이크에 해당하는 숫자의 위치를 제외한 나머지 숫자를 비교하여 ball을 구함. | ||
-nothing의 개수는 3-(strike+ball)로 계산 | ||
-printResult를 이용하여 사용자가 입력한 숫자에 대한 결과를 출력 | ||
-맞출때까지 게임 진행 | ||
|
||
2. public static boolean restartGame() | ||
사용자가 정답을 맞추면 게임 재시작 안내 문구를 출력하고 응답 결과를 boolean으로 반환하는 함수. | ||
|
||
3. public staic String setComputer() | ||
컴퓨터가 3자리의 숫자를 랜덤으로 생성하게 하는 함수. | ||
1부터 9까지의 숫자를 Random으로 3번 생성해서 빈 문자열에 차례대로 더하는 방식. | ||
3자리 숫자는 String 타입으로 나타냄. | ||
|
||
4. public static String setUser() | ||
'숫자를 입력해주세요'라는 메세지를 출력하고 사용자로부터 3자리 숫자를 입력받는 함수. | ||
사용자가 입력한 문자의 길이가 3자리를 만족하지 않거나, 숫자 외의 값을 입력한 경우 IllegalArgumentException을 발생시킴. | ||
|
||
5. public static boolean check3Strike(String computer, String user) | ||
computer의 숫자와 user가 입력한 숫자가 동일한지를 확인하는 함수. | ||
정답을 맞춘 경우 '3스트라이크', '3개의 숫자를 모두 맞히셨습니다! 게임 종료'라는 메세지를 출력하고 true를 반환함. | ||
정답을 맞추지 못한 경우 false를 반환함. | ||
|
||
6. public static boolean[] checkState(String computer, String user) | ||
사용자가 입력한 3자리 중 스트라이크에 해당하는 숫자의 위치를 true로 변경하는 함수. | ||
ball을 계산할 때 strike처리가 된 숫자는 계산에 포함되지 않도록 하기 위한 기능. | ||
|
||
7. public static int checkStrike(String computer, String user) | ||
사용자가 입력한 3자리 중 스트라이크에 해당하는 숫자의 개수를 세고 반환하는 함수. | ||
|
||
8. public static int checkBall(String computer, string user, boolean[] check) | ||
사용자가 입력한 3자리 중 스트라이크에 포함되지 않은 숫자를 컴퓨터 숫자와 비교하며 ball의 개수를 세고 반환하는 함수. | ||
|
||
9. public static void printResult(int strike, int ball, int nothing) | ||
사용자가 입력한 3자리 숫자의 결과를 알려주는 함수. | ||
nothing이 3개이면 '낫싱'을 출력함. | ||
ball과 strike가 둘다 존재하면 볼, 스트라이크로 출력함. | ||
ball만 존재하거나 strike만 존재하면 볼 또는 스트라이크만 출력함. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} | ||
} |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
자바 컬렉션 List<> 에 contains라는 함수를 이용해보세요~~