diff --git a/docs/README.md b/docs/README.md index e69de29..cdd5615 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,65 @@ +## Player 클래스 (사용자로 부터 숫자를 입력받음) +### 기능 +- `guess()`: 사용자 입력을 받아 숫자 리스트로 반환 + +## AiPlayer 클래스 (상대방) +### 기능 +- `correct()` :랜덤한 3자리의 숫자를 반환 +- `checkBallsAndStrikes()` : 입력받은 사용자의 숫자에 대해 결과를 볼,스트라이크,낫싱으로 결과값 반환 + +### 상태값 +- `ballcounting : BallCounting` +- `strike : String` +- `ball : String` +- `nothing : String` + +## GameHost 클래스 +### 기능 +- `baseballGame()` : 게임 시작 문구를 출력합니다 +- `end()` : 3스트라이크 시 게임 종료 문구를 출력합니다 +- `askRestart()` : 1입력시 종료, 2 입력 시 재시작을 합니다 + +## BallCounting 클래스 +### 기능 +- `setCorrect` : aiPlayer가 출력한 값을 가져옵니다 +- `setGuess` : 사용자가 예측한 숫자를 가져옵니다 +- `getStrike()` : 같은 자리의 숫자가 일치할 시 해당 횟수에 따라 스트라이크를 출력합니다 +- `getBall()` : 다른 자리의 숫자가 일치할 시 해당 횟수에 따라 볼을 출력합니다 +- `getNothing()` : 같은 숫자가 전혀 없을 시 낫싱을 출력합니다 + +### 상태값 +- `guess : List ` +- `correct : List ` + +## BaseballGame 클래스 +### 기능 +- `runGame()` : 게임을 진행합니다 + +### 상태값 +- `gameHost : GameHost` +- `aiPlayer : AiPlayer` +- `ballCounting :BallCounting` +- `player : Player` + +## ExceptionMessage +### 기능 +- `checkInputLength` : player 입력 숫자가 3자리에 대한 예외사항 + +## 리팩토링에 대한 피드백 내용 +- 현재 마크다운 문서는 클래스 중심으로 되어 있음 -> 앞으로는 객체중심으로 작성 +- 클래스와 객체 대한 이해와 공부가 필요함 +- 연관 관계가 과함 +- 필드에 대해서 초기화를 할 때 생성자를 만들어서 초기화 해도 된다 +ex) ``` public AiPlayer(BallCounting ballCounting) { + this.ballCounting = ballCounting; + } ``` +-> ``` public AiPlayer() { + this.ballCounting = new BallCuonting(); + }``` +- 클래스 명은 동사X, 명사 (Play 클래스 = 동사임) +- 메서드명을 좀 더 명확하게! +ex) `GameHost`에서 메서드명 `start` -> `printStart`, `end` -> `printEnd`, +`AiPlayer`에서 `correct`-> `pickRandomNumber` +- `Setter`는 최대한 사용x +- static 메서드에 대해서 공부해보고 `BallCounting` 클래스에서 활용 + 필드 선언이 필요x +- 객체 다이어그램을 그리고 시작하는것도 좋음 diff --git a/src/main/java/baseball/AiPlayer.java b/src/main/java/baseball/AiPlayer.java new file mode 100644 index 0000000..46f6f1b --- /dev/null +++ b/src/main/java/baseball/AiPlayer.java @@ -0,0 +1,49 @@ +package baseball; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.List; + +public class AiPlayer { + + private final BallCounting ballCounting; + private String strike; + private String ball; + private String nothing; + + public AiPlayer(BallCounting ballCounting) { + this.ballCounting = ballCounting; + } + + public List correct() { + + List computer = new ArrayList<>(); + while (computer.size() < 3) { + int randomNumber = Randoms.pickNumberInRange(1, 9); + if (!computer.contains(randomNumber)) { + computer.add(randomNumber); + } + } + return computer; + } + + public String checkBallsAndStrikes(List correct,List guess){ + List numberOfStrike = ballCounting.getStrike(correct,guess); + List numberOfBall = ballCounting.getBall(correct,guess); + strike =""; + ball = ""; + nothing =""; + + if(numberOfStrike.size()>0){ + strike = numberOfStrike.size() + "스트라이크"; + } + if(numberOfBall.size() >0) { + ball = numberOfBall.size() + "볼"; + } + if(numberOfStrike.size() == 0 && numberOfBall.size() == 0){ + nothing = ballCounting.getNothing(); + } + return ball + " " + strike + nothing; + } +} diff --git a/src/main/java/baseball/Application.java b/src/main/java/baseball/Application.java index 8d761b8..73572c1 100644 --- a/src/main/java/baseball/Application.java +++ b/src/main/java/baseball/Application.java @@ -3,10 +3,7 @@ public class Application { public static void main(String[] args) { - Start start = new Start(); - start.button(); + start.runGame(); } - - } diff --git a/src/main/java/baseball/BallCount.java b/src/main/java/baseball/BallCount.java deleted file mode 100644 index bf66d7b..0000000 --- a/src/main/java/baseball/BallCount.java +++ /dev/null @@ -1,52 +0,0 @@ -package baseball; - -import java.util.ArrayList; -import java.util.List; - -public class BallCount { - - private List correct; - private List guess; - - public void setCorrect(List correct) { - this.correct = correct; - } - - public void setGuess(List guess) { - this.guess = guess; - } - - public List getCorrect() { - return correct; - } - - public List getGuess() { - return guess; - } - - public List strike() { - List sameNumber = new ArrayList<>(); - for(int i = 0; i <3; i++) { - if(getCorrect().get(i) == getGuess().get(i)){ - sameNumber.add(getCorrect().get(i)); - } - }return sameNumber; - } - - public List ball() { - List common = new ArrayList<>(equalsNumber()); - common.removeAll(strike()); - - return common; - } - - public List equalsNumber() { - List common = new ArrayList<>(getGuess()); - common .retainAll(getCorrect()); - - return common ; - } -} - - - diff --git a/src/main/java/baseball/BallCounting.java b/src/main/java/baseball/BallCounting.java new file mode 100644 index 0000000..2a1664d --- /dev/null +++ b/src/main/java/baseball/BallCounting.java @@ -0,0 +1,40 @@ +package baseball; + +import java.util.ArrayList; +import java.util.List; + +public class BallCounting { + + private List correct; + private List guess; + + public void setCorrect(List correct) { + this.correct = correct; + } + public void setGuess(List guess) { + this.guess = guess; + } + + public List getStrike(List correct,List guess) { + List sameNumber = new ArrayList<>(); + for(int i = 0; i <3; i++) { + if(correct.get(i).equals(guess.get(i)) ){ + sameNumber.add(guess.get(i)); + } + }return sameNumber; + } + + public List getBall(List correct,List guess) { + List common = new ArrayList<>(correct); + common.retainAll(guess); + common.removeAll(getStrike(correct,guess)); + return common; + } + + public String getNothing() { + return "낫싱"; + } +} + + + diff --git a/src/main/java/baseball/Computer.java b/src/main/java/baseball/Computer.java deleted file mode 100644 index e59e1a0..0000000 --- a/src/main/java/baseball/Computer.java +++ /dev/null @@ -1,37 +0,0 @@ -package baseball; - -import camp.nextstep.edu.missionutils.Console; -import camp.nextstep.edu.missionutils.Randoms; - -import java.util.ArrayList; -import java.util.List; - -public class Computer { - - public List correct() { - List computer = new ArrayList<>(); - while (computer.size() < 3) { - int randomNumber = Randoms.pickNumberInRange(1, 9); - if (!computer.contains(randomNumber)) { - computer.add(randomNumber); - } - } - return computer; - } - - public void start() { - System.out.println("숫자 야구 게임을 시작합니다"); - } - - public void end() { - System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); - } - - public int askRestart() { - System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요"); - return Integer.parseInt(Console.readLine()); - } - - - -} diff --git a/src/main/java/baseball/ExceptionMessage.java b/src/main/java/baseball/ExceptionMessage.java index a8bd2fd..b35b06d 100644 --- a/src/main/java/baseball/ExceptionMessage.java +++ b/src/main/java/baseball/ExceptionMessage.java @@ -4,7 +4,7 @@ public class ExceptionMessage { public void checkInputLength(String[] input) { if (input.length != 3) { - throw new InputException("3자리 숫자를 입력하셔야됩니다"); + throw new IllegalArgumentException("3자리 숫자를 입력하셔야됩니다"); } } } diff --git a/src/main/java/baseball/GameHost.java b/src/main/java/baseball/GameHost.java new file mode 100644 index 0000000..dbf814d --- /dev/null +++ b/src/main/java/baseball/GameHost.java @@ -0,0 +1,23 @@ +package baseball; + +import camp.nextstep.edu.missionutils.Console; + +public class GameHost { + + public void start() { + System.out.println("숫자 야구 게임을 시작합니다"); + } + + public void end() { + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + } + + public String askRestart() { + Start start = new Start(); + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요"); + int ask = Integer.parseInt(Console.readLine()); + if (ask == 1){ + start.runGame(); + } return ""; + } +} diff --git a/src/main/java/baseball/InputException.java b/src/main/java/baseball/InputException.java deleted file mode 100644 index 84931eb..0000000 --- a/src/main/java/baseball/InputException.java +++ /dev/null @@ -1,8 +0,0 @@ -package baseball; - -public class InputException extends IllegalArgumentException { - - public InputException(String message) { - super(message); - } -} diff --git a/src/main/java/baseball/Judgement.java b/src/main/java/baseball/Judgement.java deleted file mode 100644 index 9adc8f1..0000000 --- a/src/main/java/baseball/Judgement.java +++ /dev/null @@ -1,38 +0,0 @@ -package baseball; - -public class Judgement { - - private BallCount ballCount; - - public Judgement(BallCount ballCount) { - - this.ballCount = ballCount; - } - - public String result() { - int strike = ballCount.strike().size(); - int ball = ballCount.ball().size(); - int nothing = ballCount.equalsNumber().size(); - - return countBall(ball) + countStrike(strike)+ isNothing(nothing); - } - - public String countStrike(int strike) { - if(strike > 0){ - return " "+strike +"스트라이크"; - }return ""; - } - - public String countBall(int ball) { - if (ball > 0) { - return ball + "볼"; - }return ""; - } - - public String isNothing(int nothing) { - if( nothing == 0) { - return "낫싱"; - }return ""; - } - -} diff --git a/src/main/java/baseball/Player.java b/src/main/java/baseball/Player.java index 073edbc..4f1db05 100644 --- a/src/main/java/baseball/Player.java +++ b/src/main/java/baseball/Player.java @@ -20,5 +20,4 @@ public List guess() { } return user; } - } diff --git a/src/main/java/baseball/Start.java b/src/main/java/baseball/Start.java index 07ffe6d..c619dea 100644 --- a/src/main/java/baseball/Start.java +++ b/src/main/java/baseball/Start.java @@ -4,38 +4,33 @@ public class Start { - private final Computer computer; - private final BallCount ballCount; - private Player player; - private Judgement judgement; + private final GameHost gameHost; + private final AiPlayer aiPlayer; + private final BallCounting ballCounting; + private final Player player; public Start() { - this.computer = new Computer(); + this.gameHost = new GameHost(); + this.ballCounting = new BallCounting(); + this.aiPlayer = new AiPlayer(ballCounting); this.player = new Player(); - this.ballCount = new BallCount(); - this.judgement = new Judgement(ballCount); } - public void button() { - computer.start(); - List correct = computer.correct(); - ballCount.setCorrect(correct); + public void runGame() { + gameHost.start(); + List correct = aiPlayer.correct(); + ballCounting.setCorrect(correct); while (true) { List guess = player.guess(); - ballCount.setGuess(guess); + ballCounting.setGuess(guess); - System.out.println(judgement.result()); - if (guess.equals(correct)) break; + System.out.println(aiPlayer.checkBallsAndStrikes(correct,guess)); + if (guess.equals(correct)) { + System.out.println("3스트라이크"); + break; + } } - computer.end(); - int ask = computer.askRestart(); - if(ask == 1){ - restart(); - } - } - - public void restart() { - new Start().button(); + gameHost.end(); + gameHost.askRestart(); } - }