Skip to content

Conversation

@zziglet
Copy link

@zziglet zziglet commented Oct 27, 2025

1. Car.js

자동차 객체를 나타내는 클래스

속성

  • name: 자동차의 이름
  • position: 자동차의 현재 위치 (전진한 횟수)

메소드

  • move()

    • MissionUtils.Random.pickNumberInRange()를 사용하여 0에서 9 사이의 무작위 숫자를 생성합니다.
    • 무작위 숫자가 MOVE_THRESHOLD (4) 이상일 경우 position을 1 증가시킵니다.
  • getStateString()

    • 현재 자동차의 상태를 문자열로 반환합니다. (예: car1 : ---)

2. Constants.js

애플리케이션 전반에서 사용되는 상수 값을 정의

상수

  • MOVE_THRESHOLD: 자동차가 전진하기 위한 최소 무작위 값 (4)
  • RANDOM_MIN: 무작위 숫자의 최소값 (0)
  • RANDOM_MAX: 무작위 숫자의 최대값 (9)

3. InputView.js

사용자 입력을 처리하는 static 메소드를 제공

Static 메소드

  • readCarNames()

    • MissionUtils.Console.readLineAsync()를 사용하여 "경주할 자동차 이름을 입력하세요."라는 메시지를 출력하고 사용자로부터 자동차 이름을 입력받습니다.
  • readGameRounds()

    • MissionUtils.Console.readLineAsync()를 사용하여 "시도할 횟수는 몇 회인가요?"라는 메시지를 출력하고 사용자로부터 게임 라운드 수를 입력받습니다.

4. OutputView.js

게임 결과를 콘솔에 출력하는 static 메소드를 제공

Static 메소드

  • printWinner(winner)

    • 최종 우승자 목록을 받아 "최종 우승자 : [우승자 목록]" 형식으로 출력합니다.
  • printGameResult(result)

    • "실행 결과"라는 헤더와 함께 각 라운드의 결과를 출력합니다.
  • printError(message)

    • 에러 메시지를 콘솔에 출력합니다.

5. RacingGame.js

자동차 경주 게임의 핵심 로직을 관리하는 클래스

속성

  • cars: Car 객체의 배열

생성자

  • constructor(carNames)
    • 자동차 이름 배열을 인자로 받아 각 이름을 가진 Car 인스턴스를 생성하고 cars 배열에 저장합니다.

메소드

  • runRound()

    • cars 배열의 모든 자동차에 대해 move() 메소드를 호출하여 한 라운드를 진행합니다.
  • getRoundResult()

    • 현재 라운드의 모든 자동차 상태를 문자열로 조합하여 반환합니다.
  • getWinners()

    • 가장 많이 전진한 자동차(들)의 이름을 찾아 배열로 반환합니다.

6. Validator.js

사용자 입력의 유효성을 검사하는 static 메소드를 제공

Static 메소드

  • validateCarNames(names)

    • 자동차 이름 입력이 null 또는 undefined인지 확인합니다.
    • 정규식을 사용하여 허용되지 않은 특수 문자가 있는지 확인합니다.
    • 각 자동차 이름의 길이가 5자를 초과하는지 확인합니다.
    • 유효하지 않은 경우 에러를 발생시킵니다.
  • validateRounds(rounds)

    • 게임 라운드 수 입력이 null, undefined, 비어 있는지, 또는 숫자가 아닌지 확인합니다.
    • 음수인지 확인합니다.
    • 정규식을 사용하여 숫자 이외의 문자가 있는지 확인합니다.
    • 유효하지 않은 경우 에러를 발생시키고, 유효하면 라운드 수를 반환합니다.

- Test constructor and use method of `InputView.js`
- Test constructor and use method of `OutputView.js`
- implement InputHandling logic
- Test constructor and use method of `Car.js`
- implement Car logic
- Test constructor and use method of `Validator.js`
- implement Input Validation logic
- implement `getStateString` function to keep SRP principle
- Test constructor and use method of `RacingGame.js`
- implement RacingGame logic
- implement Output logic
- from `validateAttempts` to `validateRounds`
from `readGameTurns` to `readGameRounds`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant