-
Notifications
You must be signed in to change notification settings - Fork 212
[자동차 경주] 권오웅 미션 제출합니다. #194
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
- 기능 개발 전 구현 목록 작성
- 안내 메시지와 추후 에러 메시지를 작성하기 위해 상수 파일을 별도로 생성
- 새로운 에러 메시지를 추가
향후 확장성을 위해 게임 로직을 GameLogic.js로 분리했습니다.
새로운 기능 추가로 인해 수정했습니다.
배열만으로는 상태 관리에 대한 한계가 존재해 객체를 활용할 수 있도록 했습니다.
함수가 한 가지 일만 할 수 있도록 분리했습니다.
자동차별 레이스 진행 기능 체크박스를 완료 하지 않아서 수정했습니다.
getWinners 함수는 함수가 가능한 작은 기능을 가질 수 있도록 최종 우승자만 추출하는 함수입니다.
printWinners 함수 내부에서 getWinners 함수를 호출하여 최종 우승자 명단만 갖고온 후 출력만 담당합니다. 우승자가 여러 명일 경우에는 join 메서드를 사용하여 쉼표(,)를 사용하여 구분했습니다.
가독성을 위해 유효성 검사 함수만 모아놓을 수 있도록 Validation.js로 생성했습니다.
자동차 입력 예외 처리 중 오타가 있어 수정했습니다.
테스트 코드 목록 작성했습니다.
- [랜덤 숫자가 4 이상일 때 score에 "-"가 추가되어야 한다] - [랜덤 숫자가 3 이하일 때 score가 변하지 않아야 한다] - [전진과 정지가 섞여있을 때 올바르게 동작해야 한다]
- [자동차 객체 배열을 받아 올바른 포맷으로 출력해야 한다] - [빈 배열이 들어와도 에러 없이 아무것도 출력하지 않아야 한다] - [점수가 없는 경우 "이름 : " 포맷으로 출력해야 한다]
- [자동차 이름 입력 값 테스트] - [횟수 입력이 숫자가 아니면 에러 발생]
우테코 과제 설명 페이지 첨부와 테스트 코드 작성 체크박스 미체크로 인한 수정 완료입니다.
프로그래밍 요구 사항 1~2를 추가했습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어떤 방식이 더 좋은지는 모르겠으나
유효성 검사 함수 하나에 if- elseif 문 사용하면 하나의 input값을 검사할 때 함수 하나만 사용할 수 있습니다!
| INVALID_CAR_NAME_TYPE: '[ERROR] 자동차 이름이 제대로 입력되지 않았습니다.', | ||
| INVALID_CAR_NAME_EMPTY: '[ERROR] 자동차 이름이 공백일 수 없습니다.', | ||
| INVALID_TRY_NUMBER_RANGE: '[ERROR] 시도할 횟수는 양수만 입력 가능합니다.', | ||
| }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
지금은 4개만 있지만 에러메세지가 많을 경우
가독성을 위해 종류별로 나누는 방식도 있습니다!
CAR : { 에러메세지들.....}, COUNT : { 에러메세지들...}
hi2242
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생 많으셨습니다~
| function CircuitScore(obj) { | ||
| const slash = '-'; | ||
| obj.forEach((ele) => { | ||
| const num = Random.pickNumberInRange(0, 9); | ||
| if (num >= 4) ele.score += slash; | ||
| }); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- repeat을 쓰지 않고 연산자로 문자열 반복을 하신 이유가 있을까요?
- 로직에 들어가는 특수한 숫자도 상수 처리하면 좋을 것 같습니다!
| - [x] 자동차 이름 입력 기능 | ||
| - [x] 입력받은 이름을 쉼표(`,`) 기준으로 분리하여 배열로 저장 | ||
|
|
||
| - [x] 시도할 횟수 입력 기능 | ||
| - [x] 시도할 횟수 입력받은 후 Number 자료형으로 변환하여 저장 | ||
|
|
||
| - [x] 진행 상황을 저장할 수 있는 배열 객체 생성 | ||
| - [x] 이름과 점수를 key와 value의 형태로 저장할 수 있도록 생성 | ||
|
|
||
| - [x] 자동차별 레이스 진행 기능 | ||
| - [x] 각 자동차는 `0~9` 사이의 무작위 값을 기준으로 전진 또는 멈춤을 결정 | ||
| - [x] 난수의 범위: `0~9` | ||
| - [x] 점수 증가 조건: `4 이상일 경우` | ||
| - [x] 시도할 횟수만큼 레이스 라운드를 반복 | ||
| - [x] 각 라운드의 실행 결과를 출력 | ||
|
|
||
| - [x] 레이스 결과를 바탕으로 최종 우승자 결정 후 출력 | ||
| - [x] 가장 많이 전진한 자동차를 최종 우승자로 선정 | ||
| - [x] 최종 우승자를 형식에 맞게 출력 | ||
| - [x] 최종 우승자가 여러 명일 경우 쉼표(,)로 구분하여 출력 | ||
|
|
||
| --- | ||
|
|
||
| 입력 공통 : `[ERROR]`로 시작하는 메시지와 함께 `Error`로 시작하는 에러 메시지를 출력하고 애플리케이션을 종료한다. | ||
|
|
||
| - [x] 자동차 입력 예외 처리 | ||
| - [x] 자동차 이름이 5자를 초과하는 경우 | ||
| - [x] 자동차 이름이 문자열이 아닌 경우 | ||
| - [x] 자동차 이름이 공백이거나, 쉼표만 입력된 경우(예: `a,,b` , `a,b,`, `,`) | ||
|
|
||
| - [x] 시도할 횟수 예외 처리 | ||
| - [x] 1 이상의 숫자가 아닌 경우 (예: 문자, 공백) | ||
| - [x] 0 또는 음수를 입력한 경우 | ||
|
|
||
| --- | ||
|
|
||
| - [x] 테스트 코드 작성 | ||
| - [x] GameLogic.js 테스트 | ||
| - [x] CircuitScore.js 테스트 | ||
| - [x] PrintExeResult.js 테스트 | ||
| - [x] 유효성 함수 테스트 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
체크박스 방법을 몰랐는데 덕분에 다음 주에 저도 적용해보려고 합니다!
| ); | ||
|
|
||
| Validation.validateTryNumberType(tryNumberInput); | ||
| const tryNumber = Number(tryNumberInput); // 검증 후 숫자로 변환 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
자바스크립트라 타입관리가 잘 안됐는데 오웅님이 하신 input으로 받자마자 원하는 타입으로 바꾸는 방식이 괜찮아 보입니다.
| const slash = '-'; | ||
| obj.forEach((ele) => { | ||
| const num = Random.pickNumberInRange(0, 9); | ||
| if (num >= 4) ele.score += slash; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
나는 car의 score를 숫자로 저장한 뒤에 '-' 를 socre만큼 반복하는 방식으로 했는데 아예 score을 '-'로 저장하는 게 단계를 하나 줄일수 있네요!!
No description provided.