Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
1. 기능을 구현하기 전 docs/README.md에 구현할 기능 목록을 정리해 추가한다.
2. while문을 작성하여 3자리의 컴퓨터 랜덤숫자를 저장
3. 유저에게 3자리 숫자 값를 전달 받는다(전달받은 값이 Integer 유효성 검사)
4. 컴퓨터의 랜덤 값 과 사용자가 입력한 값 비교
5.
6. 자릿수의 숫자와 입렵한 숫자가 같으면 스트라이크
6. 자릿수의 숫자와 같지는 않치만 입력한 숫자가 있으면 볼
6. 같은 숫자가 하나도 없을 경우 낫싱
6. 3스트라이크 = 3자리 숫자가 모두 일치 할경우 첫번째 게임 종료
7. 게임을 재시작 또는 종료를 구분 하여 입력 값 받기
8. 숫자 야구 게임을 시작합니다.
숫자를 입력해주세요 : 123
1볼 1스트라이크
숫자를 입력해주세요 : 145
1볼
숫자를 입력해주세요 : 671
2볼
숫자를 입력해주세요 : 216
1스트라이크
숫자를 입력해주세요 : 713
3스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.
1
숫자를 입력해주세요 : 123
1볼
...
8 changes: 8 additions & 0 deletions src/main/java/baseball/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package baseball;

import viewer.BaseballViewer;



public class Application {

public static void main(String[] args) {
// TODO: 프로그램 구현
BaseballViewer baseballViewer = new BaseballViewer();

baseballViewer.start();
}
}
141 changes: 141 additions & 0 deletions src/main/java/viewer/BaseballViewer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
package viewer;

import camp.nextstep.edu.missionutils.Console;
import camp.nextstep.edu.missionutils.Randoms;

import java.util.*;

public class BaseballViewer {
private String message;
//자릿수
private static int digit = 3;
//제어
boolean game = true;
//유저번호
static List<Integer>user = new ArrayList<>();
//야구번호
static List<Integer> baseball = new ArrayList<>();
//스트라이크
private static int strike;
// 볼
private static int ball ;


public void start(){
while (game){
System.out.println("숫자 야구 게임을 시작합니다.");
gamestart();
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
int try_again = Integer.parseInt(Console.readLine());
if(try_again==1){
baseball = new ArrayList<>();
game = true;
}else if (try_again==2){
game = false;
break;
}
}
}

public static void gamestart(){
baseball = baseballNum();
System.out.println(baseball);
while (true){
System.out.print("숫자를 입력해주세요.");
String input = Console.readLine();

// 검증 완료한 값을 user 리스트에 넣어준다
user = userNum(input);

//값 비교
compare();

//출력
if(print()){
break;
}
}
}

// 야구 랜덤 숫자 받기
public static List<Integer> baseballNum(){
while (baseball.size() < digit) {
// 1~9자리 랜덤숫자
int randomNumber = Randoms.pickNumberInRange(1, 9);
//똑같은 수가 아닌 대상만 baseball 더해준다
if (!baseball.contains(randomNumber)) {
baseball.add(randomNumber);
}
}
return baseball;
}

// 유저번호
public static List<Integer> userNum(String input){
// 1~9에 숫자이며 3자릿수 입력 제한
if (!isValid(input)) {
throw new IllegalArgumentException();
}
String[] user = input.split("");
List<Integer>userNum = new ArrayList<>();
//String[] user = new String[]{input};
for(String u : user){
userNum.add(Integer.parseInt(u));
}
// for(int i =0; i< user.length; i++){
// userNum.add(Integer.parseInt(user[i]));
// }
return userNum;
}

// 유저 입력 검증
public static boolean isValid(String input){
Set<Character> seen = new HashSet<>();
for(int i =0; i < input.length(); i++){
char num = input.charAt(i);
if(Character.isDigit(num)){
int digit = Character.getNumericValue(num);
if (digit <1 || digit > 9 || seen.contains(num)){
return false;
}
seen.add(num);
} else {
return false;
}
}
return seen.size() == digit;
}

public static void compare(){
strike = 0;
ball = 0;
for(int i = 0; i < user.size(); i++){
if(baseball.get(i).equals(user.get(i))){
strike ++;
}
else if(baseball.contains(user.get(i))){
ball++;
}
}
}

public static boolean print(){

if(strike == 0 && ball == 0){
System.out.print("낫싱");
}
if (ball > 0) {
System.out.print(ball + "볼 ");
}
if (strike > 0 ) {
System.out.print(strike + "스트라이크");
}
System.out.println();
if (strike == 3) {
return true;
}
return false;
}

}