From c8e5c98127ffc7ad04c0f10d618a5a86e987681f Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Thu, 27 Jul 2023 18:49:11 +0900 Subject: [PATCH 01/14] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5,=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..5de920a51 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,16 @@ +## 기능 목록 + +- [ ] 랜덤 숫자 생성 기능 +- [ ] 사용자 입력값 받는 기능 +- [ ] 입력값 유효성 검증 기능 +- [ ] 결과 계산 기능 +- [ ] 결과 출력 기능 +- [ ] 재시작 기능 + +## 예외 목록 + +- 정답값 입력시 + - [ ] 중복되는 숫자가 있을 경우 + - [ ] 3자리가 아닐 경우 +- 재시작 여부 입력시 + - [ ] 1, 2가 아닌 다른 값일 경우 From d7afa2ce050ce858c266b129e79ee2b0f794e39f Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Thu, 27 Jul 2023 19:38:12 +0900 Subject: [PATCH 02/14] =?UTF-8?q?feat:=20=EC=83=81=EC=88=98=EA=B0=92=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/Constants.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/constants/Constants.js diff --git a/src/constants/Constants.js b/src/constants/Constants.js new file mode 100644 index 000000000..b26464ee9 --- /dev/null +++ b/src/constants/Constants.js @@ -0,0 +1,13 @@ +const MESSAGE_MC = Object.freeze({ + START: "숫자 야구 게임을 시작합니다.", + INPUT: "숫자를 입력해주세요 : ", + END: "3개의 숫자를 모두 맞히셨습니다! 게임 종료", + RESTART: "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.", +}); + +const MESSAGE_ERROR = Object.freeze({ + INPUT: "입력값이 유효하지 않습니다. 서로 다른 숫자 3자리를 입력해주세요.", + RESTART: "입력값이 유효하지 않습니다. 1, 2 중에 한 개만 입력주세요.", +}); + +module.exports = { MESSAGE_MC, MESSAGE_ERROR }; From 6d4d12d87aec8f9f28eaa9d4ddb58066662e77e1 Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Thu, 27 Jul 2023 19:54:41 +0900 Subject: [PATCH 03/14] =?UTF-8?q?feat:=20baseball=20model=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/model/BaseballGame.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/model/BaseballGame.js diff --git a/src/model/BaseballGame.js b/src/model/BaseballGame.js new file mode 100644 index 000000000..bf3808b02 --- /dev/null +++ b/src/model/BaseballGame.js @@ -0,0 +1,24 @@ +class BaseballGame { + #answer; + + constructor(answer) { + this.#answer = answer; + } + + getStrikesAndBalls(userGuess) { + let strikes = 0; + let balls = 0; + + for (let i = 0; i < this.#answer.length; i++) { + if (this.#answer[i] === userGuess[i]) { + strikes++; + } else if (this.#answer.includes(userGuess[i])) { + balls++; + } + } + + return { strikes, balls }; + } +} + +module.exports = BaseballGame; From 8d7192f636d52bb296ce414c97e977d85d824fd1 Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Thu, 27 Jul 2023 21:02:27 +0900 Subject: [PATCH 04/14] =?UTF-8?q?feat:=20=EB=9E=9C=EB=8D=A4=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=20=EC=83=9D=EC=84=B1=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/controller/BaseballGameController.js | 12 ++++++++++++ src/utils/RandomNumberGenerator.js | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/controller/BaseballGameController.js create mode 100644 src/utils/RandomNumberGenerator.js diff --git a/docs/README.md b/docs/README.md index 5de920a51..9a222d781 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ ## 기능 목록 -- [ ] 랜덤 숫자 생성 기능 +- [x] 랜덤 숫자 생성 기능 - [ ] 사용자 입력값 받는 기능 - [ ] 입력값 유효성 검증 기능 - [ ] 결과 계산 기능 diff --git a/src/controller/BaseballGameController.js b/src/controller/BaseballGameController.js new file mode 100644 index 000000000..e8b52b625 --- /dev/null +++ b/src/controller/BaseballGameController.js @@ -0,0 +1,12 @@ +const BaseballGame = require("../model/BaseballGame"); +const generateRandomNumber = require("../utils/RandomNumberGenerator"); + +class BaseballGameController { + #baseballGame; + + constructor() { + this.#baseballGame = new BaseballGame(generateRandomNumber()); + } +} + +module.exports = BaseballGameController; diff --git a/src/utils/RandomNumberGenerator.js b/src/utils/RandomNumberGenerator.js new file mode 100644 index 000000000..9fd2f42e0 --- /dev/null +++ b/src/utils/RandomNumberGenerator.js @@ -0,0 +1,14 @@ +const { Random } = require("@woowacourse/mission-utils"); + +const generateRandomNumber = () => { + const uniqueNumbers = new Set(); + + while (uniqueNumbers.size < 3) { + const number = Random.pickNumberInRange(1, 9); + uniqueNumbers.add(number); + } + + return Array.from(uniqueNumbers); +}; + +module.exports = generateRandomNumber; From bbc2be71ece9548d533d32d5df40e0c0f10747ca Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Sat, 29 Jul 2023 18:08:51 +0900 Subject: [PATCH 05/14] =?UTF-8?q?feat:=20Game=20View=20=EC=A0=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/view/BaseballGameView.js | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/view/BaseballGameView.js diff --git a/docs/README.md b/docs/README.md index 9a222d781..7e1b52da3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,7 +4,7 @@ - [ ] 사용자 입력값 받는 기능 - [ ] 입력값 유효성 검증 기능 - [ ] 결과 계산 기능 -- [ ] 결과 출력 기능 +- [x] 출력 기능 - [ ] 재시작 기능 ## 예외 목록 diff --git a/src/view/BaseballGameView.js b/src/view/BaseballGameView.js new file mode 100644 index 000000000..764677ca1 --- /dev/null +++ b/src/view/BaseballGameView.js @@ -0,0 +1,29 @@ +const { Console } = require("@woowacourse/mission-utils"); +const { MESSAGE_MC } = require("../constants/Constants"); + +class BaseballGameView { + displayWelcomeMessage() { + Console.print(MESSAGE_MC.START); + } + + displayResult(result) { + const { strikes, balls } = result; + + const message = `${balls}볼 ${strikes} 스트라이크`; + Console.print(message.trim()); + if (strikes === 3) { + Console.print(MESSAGE_MC.END); + Console.print(MESSAGE_MC.RESTART); + } + } + + displayGameStart() { + Console.print(MESSAGE_MC.START); + } + + displayErrorMessage(type) { + Console.print(type); + } +} + +module.exports = BaseballGameView; From 09cd8404329f3bb77e7d00ed1a8550776c0787bd Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Sat, 29 Jul 2023 19:06:07 +0900 Subject: [PATCH 06/14] =?UTF-8?q?feat:=20App=EC=97=90=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=20=EC=8B=9C=EC=9E=91=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/BaseballGameController.js | 7 +++++++ yeonju/src/App.js | 12 +++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/controller/BaseballGameController.js b/src/controller/BaseballGameController.js index e8b52b625..f5a15d642 100644 --- a/src/controller/BaseballGameController.js +++ b/src/controller/BaseballGameController.js @@ -1,11 +1,18 @@ const BaseballGame = require("../model/BaseballGame"); +const BaseballGameView = require("../view/BaseballGameView"); const generateRandomNumber = require("../utils/RandomNumberGenerator"); class BaseballGameController { #baseballGame; + #baseballGameView; constructor() { this.#baseballGame = new BaseballGame(generateRandomNumber()); + this.#baseballGameView = new BaseballGameView(); + } + + startGame() { + this.#baseballGameView.displayWelcomeMessage(); } } diff --git a/yeonju/src/App.js b/yeonju/src/App.js index f53916abe..0e3ffb1bd 100644 --- a/yeonju/src/App.js +++ b/yeonju/src/App.js @@ -1,5 +1,15 @@ +const BaseballGameController = require("./controller/BaseballGameController"); + class App { - play() {} + #baseballGame; + + play() { + this.#baseballGame = new BaseballGameController(); + this.#baseballGame.startGame(); + } } module.exports = App; + +const app = new App(); +app.play(); From 751a00b21d44fce69cd9f9272b1aed5066c59933 Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Sat, 29 Jul 2023 19:27:03 +0900 Subject: [PATCH 07/14] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EA=B0=92=20val?= =?UTF-8?q?idator=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/constants/Constants.js | 5 ++++- src/utils/Validator.js | 30 ++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/utils/Validator.js diff --git a/docs/README.md b/docs/README.md index 7e1b52da3..7fc367d55 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,7 +2,7 @@ - [x] 랜덤 숫자 생성 기능 - [ ] 사용자 입력값 받는 기능 -- [ ] 입력값 유효성 검증 기능 +- [x] 입력값 유효성 검증 기능 - [ ] 결과 계산 기능 - [x] 출력 기능 - [ ] 재시작 기능 diff --git a/src/constants/Constants.js b/src/constants/Constants.js index b26464ee9..8d9ccdab0 100644 --- a/src/constants/Constants.js +++ b/src/constants/Constants.js @@ -6,7 +6,10 @@ const MESSAGE_MC = Object.freeze({ }); const MESSAGE_ERROR = Object.freeze({ - INPUT: "입력값이 유효하지 않습니다. 서로 다른 숫자 3자리를 입력해주세요.", + NO_THREE_DIGIT_NUMBER: + "입력값이 유효하지 않습니다. 3자리 숫자를 입력해주세요.", + HAS_REPEATED_DIGITS: + "입력값이 유효하지 않습니다. 서로 다른 숫자를 입력해주세요.", RESTART: "입력값이 유효하지 않습니다. 1, 2 중에 한 개만 입력주세요.", }); diff --git a/src/utils/Validator.js b/src/utils/Validator.js new file mode 100644 index 000000000..973b644e3 --- /dev/null +++ b/src/utils/Validator.js @@ -0,0 +1,30 @@ +const { MESSAGE_ERROR } = require("../constants/Constants"); + +class Validator { + static validateBaseballInput(input) { + if (!Validator.isValidThreeDigitNumber(input)) { + throw new Error(MESSAGE_ERROR.NO_THREE_DIGIT_NUMBER); + } + + if (!Validator.hasNoRepeatedDigits(input)) { + throw new Error(MESSAGE_ERROR.HAS_REPEATED_DIGITS); + } + } + + static isValidThreeDigitNumber(input) { + return Number.isInteger(input) && input >= 100 && input <= 999; + } + + static hasNoRepeatedDigits(input) { + const digits = new Set([...input.toString()]); + return digits.size === 3; + } + + static validateRestartInput(input) { + if (input !== 1 && input !== 2) { + throw new Error(MESSAGE_ERROR.RESTART); + } + } +} + +module.exports = { Validator }; From c7b0e4ffd1c2905288f2ef1579fbf46ed718e746 Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Sat, 29 Jul 2023 19:36:52 +0900 Subject: [PATCH 08/14] =?UTF-8?q?fix:=20=EC=84=B8=EC=9E=90=EB=A6=AC=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20validator=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/Validator.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/Validator.js b/src/utils/Validator.js index 973b644e3..c84e42be2 100644 --- a/src/utils/Validator.js +++ b/src/utils/Validator.js @@ -12,7 +12,8 @@ class Validator { } static isValidThreeDigitNumber(input) { - return Number.isInteger(input) && input >= 100 && input <= 999; + const REGEX = /^[1-9]{3}$/; + return REGEX.test(input); } static hasNoRepeatedDigits(input) { From c4a26ee9239e37e087b25af5cf63aee3692bd0bd Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Sat, 29 Jul 2023 19:52:42 +0900 Subject: [PATCH 09/14] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EA=B0=92=20?= =?UTF-8?q?=EB=B0=9B=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 6 +++--- src/controller/BaseballGameController.js | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 7fc367d55..8fbb22bd0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,7 +1,7 @@ ## 기능 목록 - [x] 랜덤 숫자 생성 기능 -- [ ] 사용자 입력값 받는 기능 +- [x] 사용자 입력값 받는 기능 - [x] 입력값 유효성 검증 기능 - [ ] 결과 계산 기능 - [x] 출력 기능 @@ -10,7 +10,7 @@ ## 예외 목록 - 정답값 입력시 - - [ ] 중복되는 숫자가 있을 경우 - - [ ] 3자리가 아닐 경우 + - [x] 중복되는 숫자가 있을 경우 + - [x] 3자리가 아닐 경우 - 재시작 여부 입력시 - [ ] 1, 2가 아닌 다른 값일 경우 diff --git a/src/controller/BaseballGameController.js b/src/controller/BaseballGameController.js index f5a15d642..02814af16 100644 --- a/src/controller/BaseballGameController.js +++ b/src/controller/BaseballGameController.js @@ -1,6 +1,9 @@ +const { Console } = require("@woowacourse/mission-utils"); +const { MESSAGE_MC } = require("../constants/Constants"); const BaseballGame = require("../model/BaseballGame"); const BaseballGameView = require("../view/BaseballGameView"); const generateRandomNumber = require("../utils/RandomNumberGenerator"); +const { Validator } = require("../utils/Validator"); class BaseballGameController { #baseballGame; @@ -13,6 +16,13 @@ class BaseballGameController { startGame() { this.#baseballGameView.displayWelcomeMessage(); + this.inputNumber(); + } + + inputNumber() { + Console.readLine(MESSAGE_MC.INPUT, (playerInput) => { + Validator.validateBaseballInput(playerInput); + }); } } From 70b3452c63fccf77578a871209b2a2f13d79b9dc Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Sat, 29 Jul 2023 20:05:20 +0900 Subject: [PATCH 10/14] =?UTF-8?q?refactor:=20view=EA=B0=80=20=EB=B9=84?= =?UTF-8?q?=EC=A6=88=EB=8B=88=EC=8A=A4=20=EB=A1=9C=EC=A7=81=EC=9D=84=20?= =?UTF-8?q?=EB=8B=B4=EB=8B=B9=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/view/BaseballGameView.js | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/view/BaseballGameView.js b/src/view/BaseballGameView.js index 764677ca1..341dabc2b 100644 --- a/src/view/BaseballGameView.js +++ b/src/view/BaseballGameView.js @@ -6,23 +6,18 @@ class BaseballGameView { Console.print(MESSAGE_MC.START); } - displayResult(result) { - const { strikes, balls } = result; - + displayResult(strikes, balls) { const message = `${balls}볼 ${strikes} 스트라이크`; Console.print(message.trim()); - if (strikes === 3) { - Console.print(MESSAGE_MC.END); - Console.print(MESSAGE_MC.RESTART); - } } displayGameStart() { Console.print(MESSAGE_MC.START); } - displayErrorMessage(type) { - Console.print(type); + displayGameRestart() { + Console.print(MESSAGE_MC.END); + Console.print(MESSAGE_MC.RESTART); } } From 23fb95efd30bb028b36a1e2d1961559188814a1f Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Sat, 29 Jul 2023 20:08:44 +0900 Subject: [PATCH 11/14] =?UTF-8?q?fix:=20=EC=A3=BC=EC=96=B4=EC=A7=84=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=EA=B0=92=EC=9D=B4=20=EC=B6=9C=EB=A0=A5=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/view/BaseballGameView.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/view/BaseballGameView.js b/src/view/BaseballGameView.js index 341dabc2b..cc960693e 100644 --- a/src/view/BaseballGameView.js +++ b/src/view/BaseballGameView.js @@ -7,7 +7,20 @@ class BaseballGameView { } displayResult(strikes, balls) { - const message = `${balls}볼 ${strikes} 스트라이크`; + let message = ""; + + if (strikes === 0 && balls === 0) { + message = "낫싱"; + } + + if (balls > 0) { + message += `${balls}볼 `; + } + + if (strikes > 0) { + message += `${strikes}스트라이크`; + } + Console.print(message.trim()); } From 51e0f91f95fa313456ec1ba0e1821819fdc2380e Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Sat, 29 Jul 2023 20:17:05 +0900 Subject: [PATCH 12/14] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EA=B0=92=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/controller/BaseballGameController.js | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 8fbb22bd0..b190b3c2d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,7 +3,7 @@ - [x] 랜덤 숫자 생성 기능 - [x] 사용자 입력값 받는 기능 - [x] 입력값 유효성 검증 기능 -- [ ] 결과 계산 기능 +- [x] 결과 계산 기능 - [x] 출력 기능 - [ ] 재시작 기능 diff --git a/src/controller/BaseballGameController.js b/src/controller/BaseballGameController.js index 02814af16..45ad8a3e6 100644 --- a/src/controller/BaseballGameController.js +++ b/src/controller/BaseballGameController.js @@ -22,8 +22,28 @@ class BaseballGameController { inputNumber() { Console.readLine(MESSAGE_MC.INPUT, (playerInput) => { Validator.validateBaseballInput(playerInput); + + const playerInputArray = [...playerInput].map((input) => Number(input)); + this.handlePlayerInputResult(playerInputArray); }); } + + handlePlayerInputResult(playerInputArray) { + const { strikes, balls } = + this.#baseballGame.getStrikesAndBalls(playerInputArray); + + this.#baseballGameView.displayResult(strikes, balls); + + if (strikes === 3) { + this.endGame(); + } else { + this.inputNumber(); + } + } + + endGame() { + this.#baseballGameView.displayGameRestart(); + } } module.exports = BaseballGameController; From 91162a7048172b22c993f0b0db95d35f39cbca41 Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Sat, 29 Jul 2023 20:35:55 +0900 Subject: [PATCH 13/14] =?UTF-8?q?feat:=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 ++-- src/controller/BaseballGameController.js | 22 ++++++++++++++++++---- src/model/BaseballGame.js | 6 ++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index b190b3c2d..a7ff1ccec 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,7 +5,7 @@ - [x] 입력값 유효성 검증 기능 - [x] 결과 계산 기능 - [x] 출력 기능 -- [ ] 재시작 기능 +- [x] 재시작 기능 ## 예외 목록 @@ -13,4 +13,4 @@ - [x] 중복되는 숫자가 있을 경우 - [x] 3자리가 아닐 경우 - 재시작 여부 입력시 - - [ ] 1, 2가 아닌 다른 값일 경우 + - [x] 1, 2가 아닌 다른 값일 경우 diff --git a/src/controller/BaseballGameController.js b/src/controller/BaseballGameController.js index 45ad8a3e6..a95de9d82 100644 --- a/src/controller/BaseballGameController.js +++ b/src/controller/BaseballGameController.js @@ -19,6 +19,11 @@ class BaseballGameController { this.inputNumber(); } + endGame() { + this.#baseballGameView.displayGameRestart(); + this.inputRestartNumber(); + } + inputNumber() { Console.readLine(MESSAGE_MC.INPUT, (playerInput) => { Validator.validateBaseballInput(playerInput); @@ -28,6 +33,19 @@ class BaseballGameController { }); } + inputRestartNumber() { + Console.readLine("", (playerInput) => { + const numericInput = Number(playerInput); + + Validator.validateRestartInput(numericInput); + + if (numericInput === 1) { + this.#baseballGame.reset(); + this.startGame(); + } + }); + } + handlePlayerInputResult(playerInputArray) { const { strikes, balls } = this.#baseballGame.getStrikesAndBalls(playerInputArray); @@ -40,10 +58,6 @@ class BaseballGameController { this.inputNumber(); } } - - endGame() { - this.#baseballGameView.displayGameRestart(); - } } module.exports = BaseballGameController; diff --git a/src/model/BaseballGame.js b/src/model/BaseballGame.js index bf3808b02..8f7c3c725 100644 --- a/src/model/BaseballGame.js +++ b/src/model/BaseballGame.js @@ -1,3 +1,5 @@ +const generateRandomNumber = require("../utils/RandomNumberGenerator"); + class BaseballGame { #answer; @@ -19,6 +21,10 @@ class BaseballGame { return { strikes, balls }; } + + reset() { + this.#answer = generateRandomNumber(); + } } module.exports = BaseballGame; From 5bfa41d2da1f753a9e47d99e65e2aa46458cfb6a Mon Sep 17 00:00:00 2001 From: Yeonju Jo Date: Sat, 29 Jul 2023 20:45:11 +0900 Subject: [PATCH 14/14] =?UTF-8?q?rename:=20=ED=8F=B4=EB=8D=94=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 16 ---------------- yeonju/docs/README.md | 16 ++++++++++++++++ {src => yeonju/src}/constants/Constants.js | 0 .../src}/controller/BaseballGameController.js | 0 {src => yeonju/src}/model/BaseballGame.js | 0 .../src}/utils/RandomNumberGenerator.js | 0 {src => yeonju/src}/utils/Validator.js | 0 {src => yeonju/src}/view/BaseballGameView.js | 0 8 files changed, 16 insertions(+), 16 deletions(-) delete mode 100644 docs/README.md rename {src => yeonju/src}/constants/Constants.js (100%) rename {src => yeonju/src}/controller/BaseballGameController.js (100%) rename {src => yeonju/src}/model/BaseballGame.js (100%) rename {src => yeonju/src}/utils/RandomNumberGenerator.js (100%) rename {src => yeonju/src}/utils/Validator.js (100%) rename {src => yeonju/src}/view/BaseballGameView.js (100%) diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index a7ff1ccec..000000000 --- a/docs/README.md +++ /dev/null @@ -1,16 +0,0 @@ -## 기능 목록 - -- [x] 랜덤 숫자 생성 기능 -- [x] 사용자 입력값 받는 기능 -- [x] 입력값 유효성 검증 기능 -- [x] 결과 계산 기능 -- [x] 출력 기능 -- [x] 재시작 기능 - -## 예외 목록 - -- 정답값 입력시 - - [x] 중복되는 숫자가 있을 경우 - - [x] 3자리가 아닐 경우 -- 재시작 여부 입력시 - - [x] 1, 2가 아닌 다른 값일 경우 diff --git a/yeonju/docs/README.md b/yeonju/docs/README.md index e69de29bb..a7ff1ccec 100644 --- a/yeonju/docs/README.md +++ b/yeonju/docs/README.md @@ -0,0 +1,16 @@ +## 기능 목록 + +- [x] 랜덤 숫자 생성 기능 +- [x] 사용자 입력값 받는 기능 +- [x] 입력값 유효성 검증 기능 +- [x] 결과 계산 기능 +- [x] 출력 기능 +- [x] 재시작 기능 + +## 예외 목록 + +- 정답값 입력시 + - [x] 중복되는 숫자가 있을 경우 + - [x] 3자리가 아닐 경우 +- 재시작 여부 입력시 + - [x] 1, 2가 아닌 다른 값일 경우 diff --git a/src/constants/Constants.js b/yeonju/src/constants/Constants.js similarity index 100% rename from src/constants/Constants.js rename to yeonju/src/constants/Constants.js diff --git a/src/controller/BaseballGameController.js b/yeonju/src/controller/BaseballGameController.js similarity index 100% rename from src/controller/BaseballGameController.js rename to yeonju/src/controller/BaseballGameController.js diff --git a/src/model/BaseballGame.js b/yeonju/src/model/BaseballGame.js similarity index 100% rename from src/model/BaseballGame.js rename to yeonju/src/model/BaseballGame.js diff --git a/src/utils/RandomNumberGenerator.js b/yeonju/src/utils/RandomNumberGenerator.js similarity index 100% rename from src/utils/RandomNumberGenerator.js rename to yeonju/src/utils/RandomNumberGenerator.js diff --git a/src/utils/Validator.js b/yeonju/src/utils/Validator.js similarity index 100% rename from src/utils/Validator.js rename to yeonju/src/utils/Validator.js diff --git a/src/view/BaseballGameView.js b/yeonju/src/view/BaseballGameView.js similarity index 100% rename from src/view/BaseballGameView.js rename to yeonju/src/view/BaseballGameView.js