Skip to content

Commit e838e59

Browse files
committedMar 21, 2025
feat: 사용자 입력 숫자와 컴퓨터 생성 숫자가 모두 일치할 경우 게임 종료 후 게임 시작, 완전 종료 구현
1 parent b1c99fe commit e838e59

File tree

6 files changed

+35
-9
lines changed

6 files changed

+35
-9
lines changed
 

‎src/App.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,19 @@ import ComputerNumberGenerator from './model/ComputerNumberGenerator.mjs';
44
class App {
55
#gameController;
66

7-
constructor() {
8-
this.#gameController = new GameController(new ComputerNumberGenerator());
7+
constructor(gameController) {
8+
this.#gameController = gameController;
99
}
1010

1111
async play() {
1212
await this.#gameController.startGame();
1313
}
1414
}
1515

16+
const computerNumberGenerator = new ComputerNumberGenerator();
17+
const gameController = new GameController(computerNumberGenerator);
18+
const app = new App(gameController);
19+
20+
app.play();
21+
1622
export default App;

‎src/constant/conditions.mjs

+6-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,9 @@ const GAME_CONDITION = Object.freeze({
55
endNumber: 9,
66
});
77

8-
export default GAME_CONDITION;
8+
const USER_COMMAND = Object.freeze({
9+
replay: 1,
10+
end: 2,
11+
});
12+
13+
export { USER_COMMAND, GAME_CONDITION };

‎src/constant/messages.mjs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import GAME_CONDITION from './conditions.mjs';
1+
import { USER_COMMAND, GAME_CONDITION } from './conditions.mjs';
22

33
const MESSAGES = Object.freeze({
44
startGuide: `숫자 야구 게임을 시작합니다.`,
55
inputGuide: `숫자를 입력해주세요 : `,
66
endGuide: `${GAME_CONDITION.maxLength}개의 숫자를 모두 맞히셨습니다! 게임종료`,
7+
replayGuide: `게임을 새로 시작하려면 ${USER_COMMAND.replay}, 종료하려면 ${USER_COMMAND.end}를 입력하세요.\n`,
78
});
89

910
const PROGRESS = Object.freeze({

‎src/controller/GameController.mjs

+9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import OutPutView from '../view/OutputView.mjs';
22
import { MESSAGES } from '../constant/messages.mjs';
33
import InputView from '../view/InputView.mjs';
44
import GameAnalyzer from '../model/GameAnalyzer.mjs';
5+
import { USER_COMMAND } from '../constant/conditions.mjs';
56

67
class GameController {
78
#computer;
@@ -29,6 +30,14 @@ class GameController {
2930

3031
async finishGame() {
3132
OutPutView.printStaticMessage(MESSAGES.endGuide);
33+
34+
const userCommand = await InputView.getUserCommand(MESSAGES.replayGuide);
35+
36+
if (userCommand === USER_COMMAND.replay) {
37+
this.#computer.initComputerNumber();
38+
return this.startGame();
39+
}
40+
return null;
3241
}
3342
}
3443

‎src/model/ComputerNumberGenerator.mjs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import { Random } from '@woowacourse/mission-utils';
2-
import GAME_CONDITION from '../constant/conditions.mjs';
2+
import { GAME_CONDITION } from '../constant/conditions.mjs';
33

44
class ComputerNumberGenerator {
55
#computerNumber;
66

77
constructor() {
8-
this.#computerNumber = this.generateNumber();
8+
this.#computerNumber = this.generateRandomNumbers();
99
}
1010

1111
/**
1212
* 컴퓨터는 중복되지 않는 랜덤 세자리의 숫자를 생성한다.
1313
* @returns {number} 중복되지 않는 세자리의 숫자
1414
*/
15-
generateNumber() {
15+
generateRandomNumbers() {
1616
const digitalArray = new Set();
1717

1818
while (digitalArray.size < GAME_CONDITION.maxLength) {
@@ -31,7 +31,7 @@ class ComputerNumberGenerator {
3131
}
3232

3333
initComputerNumber() {
34-
this.#computerNumber = this.generateNumber();
34+
this.#computerNumber = this.generateRandomNumbers();
3535
}
3636
}
3737

‎src/view/InputView.mjs

+6-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ const InputView = {
66

77
return parseInt(userNumber, 10);
88
},
9+
10+
async getUserCommand(message) {
11+
const userCommand = await Console.readLineAsync(message);
12+
13+
return parseInt(userCommand, 10);
14+
},
915
};
1016

1117
export default InputView;
12-

0 commit comments

Comments
 (0)
Please sign in to comment.