From a8456fe260ee01b62a3f2dedc6dbab2a9d23d794 Mon Sep 17 00:00:00 2001 From: mbeankong Date: Wed, 25 Oct 2023 23:35:06 +0900 Subject: [PATCH 1/2] Error --- README.md | 31 ++++++++++++++++++++++++++++ src/App.js | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 89 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e8cc43b2c..9c5850512 100644 --- a/README.md +++ b/README.md @@ -154,3 +154,34 @@ while (computer.length < 3) { - 미션은 [javascript-baseball](https://github.com/woowacourse-precourse/javascript-baseball-6/) 저장소를 Fork & Clone해 시작한다. - **기능을 구현하기 전 `docs/README.md`에 구현할 기능 목록을 정리**해 추가한다. - 과제 진행 및 제출 방법은 [프리코스 과제 제출](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) 문서를 참고한다. + +** 구현 기능 목록 ** + +# 랜덤 숫자 생성 (컴퓨터 역할) + - 오직 3자리 숫자 + - 1~9 사이 + - 서로 다름, 중복 X + +# 입력 (사용자 역할) + - 오직 3자리 숫자 + - 1~9 사이 + - 서로 다름, 중복 X + +# 결과 확인 + - 컴퓨터와 사용자의 수 비교 후 힌트 출력 + - 같은 수가 같은 자리 -> 스트라이크 + - 같은 수가 다른 자리 -> 볼 + - 같은 수 전혀 없음 -> 낫싱 + + - 볼, 스트라이크 동시 발생 -> 볼, 스트라이크 순서로 출력 + - 낫싱 발생 -> 입력 (사용자 역할) 반복 + + +# 진행 + - 3개의 숫자 모두 맞히면 게임 종료 + - 게임 종료 후 다시 시작 or 완전 종료 선택 + +# 예외 + - 사용자가 잘못된 값 입력 시 예외 발생시켜 앱 종료 + - 중복된 숫자가 있음 + - 3자리 이상 숫자임 \ No newline at end of file diff --git a/src/App.js b/src/App.js index c38b30d5b..6093e02ce 100644 --- a/src/App.js +++ b/src/App.js @@ -1,5 +1,61 @@ +import { MissionUtils } from "@woowacourse/mission-utils"; + class App { - async play() {} + async play() { + let choice = '1'; + MissionUtils.Console.print('숫자 야구 게임을 시작합니다.'); + + const com = []; + while (com.length < 3) { + const num = MissionUtils.Random.pickNumberInRange(1, 9); + if (!com.includes(num)) { + com.push(num); + } + } + + while (choice === '1') { + let player; + try { + player = await MissionUtils.Console.readLineAsync('숫자를 입력해 주세요 : '); + + if (!/^[0-9]{3}$/.test(player)) { + throw new Error('[ERROR] 숫자가 아닙니다.'); + } + + player = player.split('').map(Number); + if (player.length !== 3 || new Set(player).size !== 3) { + throw new Error('[ERROR] 입력한 숫자가 올바르지 않습니다.'); + } + + let sCnt = 0, + bCnt = 0; + for (let i = 0; i < 3; i++) { + if (com[i] == player[i]) { + sCnt++; + } else if (com.includes(player[i])) { + bCnt++; + } + } + + let result = ''; + if (bCnt > 0) result += bCnt + '볼 '; + if (sCnt > 0) result += sCnt + '스트라이크'; + if (bCnt === 0 && sCnt === 0) result += '낫싱'; + + MissionUtils.Console.print(result); + + if (sCnt === 3) { + MissionUtils.Console.print(sCnt + '개의 숫자를 모두 맞히셨습니다! 게임 종료'); + MissionUtils.Console.print('게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.'); + choice = await MissionUtils.Console.readLineAsync(); + } else if (choice === '2') { + break; + } + } catch (error) { + throw error; + } + } + } } -export default App; +export default App; \ No newline at end of file From 1160e5415465b0a63309673fa30cc9a575d0ed4c Mon Sep 17 00:00:00 2001 From: mbeankong <128389329+mbeankong@users.noreply.github.com> Date: Tue, 31 Oct 2023 18:12:10 +0900 Subject: [PATCH 2/2] README.md --- README.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 9c5850512..4ddb61594 100644 --- a/README.md +++ b/README.md @@ -155,19 +155,18 @@ while (computer.length < 3) { - **기능을 구현하기 전 `docs/README.md`에 구현할 기능 목록을 정리**해 추가한다. - 과제 진행 및 제출 방법은 [프리코스 과제 제출](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) 문서를 참고한다. -** 구현 기능 목록 ** - -# 랜덤 숫자 생성 (컴퓨터 역할) +# 구현 기능 목록 +<랜덤 숫자 생성 (컴퓨터 역할)> - 오직 3자리 숫자 - 1~9 사이 - 서로 다름, 중복 X -# 입력 (사용자 역할) +<입력 (사용자 역할)> - 오직 3자리 숫자 - 1~9 사이 - 서로 다름, 중복 X -# 결과 확인 +<결과 확인> - 컴퓨터와 사용자의 수 비교 후 힌트 출력 - 같은 수가 같은 자리 -> 스트라이크 - 같은 수가 다른 자리 -> 볼 @@ -176,12 +175,12 @@ while (computer.length < 3) { - 볼, 스트라이크 동시 발생 -> 볼, 스트라이크 순서로 출력 - 낫싱 발생 -> 입력 (사용자 역할) 반복 - -# 진행 +<진행> - 3개의 숫자 모두 맞히면 게임 종료 - 게임 종료 후 다시 시작 or 완전 종료 선택 -# 예외 +<예외> - 사용자가 잘못된 값 입력 시 예외 발생시켜 앱 종료 + - 숫자가 아님 - 중복된 숫자가 있음 - - 3자리 이상 숫자임 \ No newline at end of file + - 3자리 이상 숫자임