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
15 changes: 15 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# 필요한 클래스
1. Computer

- Randoms.pickNumberInRange 매서드로 숫자 선택
- Player의 입력에 따른 결과 출력


2. Player

- 숫자 입력(유효/유효하지 않은 입력 구분)


3. Application

- 게임의 진행과정을 담은 클래스
Empty file modified gradlew.bat
100644 → 100755
Empty file.
46 changes: 44 additions & 2 deletions src/main/java/baseball/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,49 @@
package baseball;


public class Application {

static Computer computer;
static Player player;
public static void main(String[] args) {
// TODO: 프로그램 구현
initGame();
progressGame();
}

private static void initGame(){
computer = new Computer();
player = new Player();
System.out.println("숫자 야구 게임을 시작합니다.");
}
}

public static void progressGame(){

String answer = computer.pickNumber();
while (true){
System.out.print("숫자를 입력해주세요 : ");
String query = player.getInput();

if (query.length() != 3){
throw new IllegalArgumentException("Invalid Argument: " + query);
}
System.out.println(query);
String result = computer.check(query, answer);
System.out.println(result);

if (result.equals("3스트라이크")) {
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
String gameStatus = player.restartOrEndGame();

if (gameStatus.equals("restart")) {
answer = computer.pickNumber();
continue;
}
else if (gameStatus.equals("end")) break;
}
}

}


}
77 changes: 77 additions & 0 deletions src/main/java/baseball/Computer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package baseball;

import camp.nextstep.edu.missionutils.Randoms;
import java.util.ArrayList;
import java.util.List;

public class Computer{
public String pickNumber(){
String computer = "";
while (computer.length() < 3) {
String randomNumber = "" + Randoms.pickNumberInRange(1, 9);
if (!computer.contains(randomNumber)) {
computer += randomNumber;
}
}
return computer;
}


public static String check(String query, String answer){

List<Character> answerList = convertStringToList(answer);
List<Character> queryList = convertStringToList(query);

int strikes = 0;
int balls = 0;

for(int i = 0; i < answer.length(); i++){
char answerValue = answerList.get(i);
char queryValue = queryList.get(i);


// Strike인 경우
if(strikeCheck(answerValue, queryValue)) strikes += 1;

// ball 인 경우
else if (ballCheck(answer, queryValue)) balls += 1;
}

if(strikes == 0 && balls == 0){
return "낫싱";
}
else if (strikes == 0){
return Integer.toString(balls) + "볼";
}

else if (balls == 0){
return Integer.toString(strikes) + "스트라이크";
}

else{
return Integer.toString(balls) + "볼 " + Integer.toString(strikes)+"스트라이크";
}
}

public static boolean strikeCheck(char answerValue, char queryValue){
if(answerValue == queryValue) return true;
else return false;
}

public static boolean ballCheck(String answer, char queryValue){
String queryString = String.valueOf(queryValue);
if(answer.contains(queryString)) return true;
else return false;
}
public static List<Character> convertStringToList(String query){
List<Character> resultList = new ArrayList<>();

for (int i = 0; i < query.length(); i++){
char digitChar = query.charAt(i);
resultList.add(digitChar);
}

return resultList;
}

}
30 changes: 30 additions & 0 deletions src/main/java/baseball/Player.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package baseball;

import camp.nextstep.edu.missionutils.Console;
public class Player{

public String getInput() {
int TARGET_INPUT_LENGTH = 3;

String input = Console.readLine();

// 입력 수가 0~9으로 구성된 길이 3인 문자열만이 유효한 입력
if (isNumeric(input) && input.length() == TARGET_INPUT_LENGTH) return input;

// 유효하지 않은 입력은 IllegalArgumentException 발생
else throw new IllegalArgumentException();
}

public String restartOrEndGame(){
String gameStatus = Console.readLine();

if (gameStatus.equals("1")) return "restart";
else if (gameStatus.equals("2")) return "end";
else return "error";
}

// 문자열이 0~9로만 구성되었는 지 확인하는 매서드
private boolean isNumeric(String str){
return str.matches("\\d+");
}
}