forked from woowacourse/java-baseball-precourse
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathNumberBaseballGame.java
More file actions
109 lines (97 loc) · 3.24 KB
/
NumberBaseballGame.java
File metadata and controls
109 lines (97 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package baseball;
import java.util.Vector;
import java.util.regex.Pattern;
import camp.nextstep.edu.missionutils.Console;
import camp.nextstep.edu.missionutils.Randoms;
public class NumberBaseballGame {
private int strikes;
private int balls;
private Vector<Integer> userNumber;
private Vector<Integer> computerNumber;
private void createRandomNumber() {
computerNumber = new Vector<>();
while(computerNumber.size() < Constants.Number.LENGTH) {
int newNumber = Randoms.pickNumberInRange(Constants.Number.MIN_VALUE, Constants.Number.MAX_VALUE);
if(computerNumber.contains(newNumber)) {
continue;
}
computerNumber.add(newNumber);
}
}
private void inputUserNumber() {
userNumber = new Vector<>();
System.out.println(Constants.GameMessage.INPUT_NUMBER);
String input = Console.readLine();
validTestInputUserNumber(input);
for(char c : input.toCharArray()) {
String letter = String.valueOf(c);
userNumber.add(Integer.parseInt(letter));
}
}
private void validTestInputUserNumber(String input) {
boolean isValid = Pattern.matches(Constants.REGEX_PATTERN, input);
if(!isValid) {
throw new IllegalArgumentException(Constants.ExceptionMessage.USER_INPUT);
}
}
private void checkAccuracy() {
strikes = 0;
balls = 0;
for(int i = 0; i < 3; i++) {
if(userNumber.get(i).equals(computerNumber.get(i))) {
strikes++;
continue;
}
if(computerNumber.contains(userNumber.get(i))) {
balls++;
}
}
}
private void printAccuracy() {
if(balls == 0 && strikes == 0) {
System.out.println(Constants.GameMessage.NOTHING_);
return;
}
if(strikes == 3) {
System.out.println(Constants.Number.LENGTH + Constants.GameMessage.END_GAME);
return;
}
if(balls != 0) {
System.out.print(balls + Constants.GameMessage.BALLS);
}
if(strikes != 0) {
System.out.print(strikes + Constants.GameMessage.STRIKES);
}
System.out.println();
}
private void playNumberBaseBallGame() {
createRandomNumber();
while(true) {
inputUserNumber();
checkAccuracy();
printAccuracy();
if(userNumber.equals(computerNumber)) {
break;
}
}
}
public void startNumberBaseBallGame() {
while(true) {
playNumberBaseBallGame();
if(isEndGame()) {
return;
}
}
}
private boolean isEndGame() {
System.out.println(Constants.GameMessage.RE_GAME);
String stateOfGame = Console.readLine();
validTestStateOfGame(stateOfGame);
return stateOfGame.equals(Constants.Symbol.END_GAME);
}
private void validTestStateOfGame(String state) {
if(!state.equals(Constants.Symbol.END_GAME) && !state.equals(Constants.Symbol.RESTART_GAME)) {
throw new IllegalArgumentException(Constants.ExceptionMessage.STATE_OF_GAME);
}
}
}