From 081d9b8435540b6cb457e2d40aac9c5b04911829 Mon Sep 17 00:00:00 2001 From: 2021048695 Date: Mon, 6 May 2024 05:44:45 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EC=9E=85=EB=A0=A5=EA=B0=92=20=EB=B0=B0?= =?UTF-8?q?=EC=97=B4=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 +++++++++- index.html | 31 +++++++++++++++++++++---------- src/main.js | 5 +++++ 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 8b2833c..9ea8d0d 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -# javascript-baseball-precourse \ No newline at end of file +# javascript-baseball-precourse + +입력값 배열 처리 +입력값 유효성 체크 +랜덤 숫자 생성 +스트라이크와 볼을 계산 +결과 출력 +재시작을 물어봄 +게임 재시작 \ No newline at end of file diff --git a/index.html b/index.html index b021b5c..c984529 100644 --- a/index.html +++ b/index.html @@ -1,12 +1,23 @@ - + - - - - - - -
- - + + + + ⚾ 숫자 야구 게임 + + +
+

⚾ 숫자 야구 게임

+

1~9까지의 수를 중복없이 3개 입력해주세요.

+

올바른 예) 139

+

틀린 예) 122

+ + +

📄 결과

+
+
+ +
+ + diff --git a/src/main.js b/src/main.js index e69de29..3d700bc 100644 --- a/src/main.js +++ b/src/main.js @@ -0,0 +1,5 @@ +// 입력값 배열 처리 +function processInput(input) { + return input.split('').map(Number); +} + From 078f3165b984a1aa87278a666f82b66291fc610c Mon Sep 17 00:00:00 2001 From: 2021048695 Date: Mon, 6 May 2024 05:45:09 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=EC=9E=85=EB=A0=A5=EA=B0=92=20=EC=9C=A0?= =?UTF-8?q?=ED=9A=A8=EC=84=B1=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main.js b/src/main.js index 3d700bc..e53287c 100644 --- a/src/main.js +++ b/src/main.js @@ -3,3 +3,12 @@ function processInput(input) { return input.split('').map(Number); } +// 입력값 유효성 체크 +function checkInput(input) { + if (input.length !== 3) { + return false; + } + const unums = new Set(input); + return unums.size === 3; +} + From decb8fa74054bb386c26a26afc07ff33dd5ceaa1 Mon Sep 17 00:00:00 2001 From: 2021048695 Date: Mon, 6 May 2024 05:45:26 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=EB=9E=9C=EB=8D=A4=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main.js b/src/main.js index e53287c..b33010a 100644 --- a/src/main.js +++ b/src/main.js @@ -12,3 +12,15 @@ function checkInput(input) { return unums.size === 3; } +// 랜덤 숫자 생성 +function generateNumber() { + const numbers = []; + while (numbers.length < 3) { + const randomNumber = Math.floor(Math.random() * 9) + 1; + if (!numbers.includes(randomNumber)) { + numbers.push(randomNumber); + } + } + return numbers; +} + From 096966305e2eb38f301df9dfc3d71b067f33f84f Mon Sep 17 00:00:00 2001 From: 2021048695 Date: Mon, 6 May 2024 05:45:48 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=ED=81=AC=EC=99=80=20=EB=B3=BC=EC=9D=84=20=EA=B3=84=EC=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main.js b/src/main.js index b33010a..9144ff2 100644 --- a/src/main.js +++ b/src/main.js @@ -24,3 +24,17 @@ function generateNumber() { return numbers; } +// 스트라이크와 볼을 계산 +function strikeBall(answerNumber, userInput) { + let strikes = 0; + let balls = 0; + for (let i = 0; i < 3; i++) { + if (answerNumber[i] === userInput[i]) { + strikes++; + } else if (answerNumber.includes(userInput[i])) { + balls++; + } + } + return { strikes, balls }; +} + From 24f6f56d29c2ffc331ed7d307a2d864c4c9776fb Mon Sep 17 00:00:00 2001 From: 2021048695 Date: Mon, 6 May 2024 05:46:07 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main.js b/src/main.js index 9144ff2..9653469 100644 --- a/src/main.js +++ b/src/main.js @@ -38,3 +38,9 @@ function strikeBall(answerNumber, userInput) { return { strikes, balls }; } +// 결과 출력 +function displayResult(result) { + const resultDiv = document.getElementById('result'); + resultDiv.textContent = result; +} + From f6c036ef83fec712664e4f2c3ed596cb6986a414 Mon Sep 17 00:00:00 2001 From: 2021048695 Date: Mon, 6 May 2024 05:46:24 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=EC=9E=AC=EC=8B=9C=EC=9E=91=EC=9D=84=20?= =?UTF-8?q?=EB=AC=BB=EB=8A=94=20=ED=95=A8=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main.js b/src/main.js index 9653469..ccf7ed7 100644 --- a/src/main.js +++ b/src/main.js @@ -44,3 +44,9 @@ function displayResult(result) { resultDiv.textContent = result; } +// 재시작을 묻는 함수 +function displayRetry(comment) { + const retryDiv = document.getElementById('retry'); + retryDiv.textContent = comment; +} + From aba2ae9a924bf7a19af8c3687b3245206995aac7 Mon Sep 17 00:00:00 2001 From: 2021048695 Date: Mon, 6 May 2024 05:46:41 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=20=ED=95=A8=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main.js b/src/main.js index ccf7ed7..e767aa1 100644 --- a/src/main.js +++ b/src/main.js @@ -50,3 +50,12 @@ function displayRetry(comment) { retryDiv.textContent = comment; } +// 게임 재시작 함수 +function restartGame() { + document.getElementById('userInput').value = ''; + document.getElementById('result').textContent = ''; + document.getElementById('retry').textContent = ''; + document.getElementById('retryBtn').style.display = 'none'; + document.getElementById('checkBtn').disabled = false; // 확인 버튼 활성화 추가 +} + From 2af2d254f772207bf026ff4ba8b91a93cab9179f Mon Sep 17 00:00:00 2001 From: 2021048695 Date: Mon, 6 May 2024 05:46:56 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=ED=95=A8=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/main.js b/src/main.js index e767aa1..d536661 100644 --- a/src/main.js +++ b/src/main.js @@ -59,3 +59,41 @@ function restartGame() { document.getElementById('checkBtn').disabled = false; // 확인 버튼 활성화 추가 } +// 게임 초기화 함수 +function newGame() { + const answerNumber = generateNumber(); + const checkBtn = document.getElementById('checkBtn'); + const retryBtn = document.getElementById('retryBtn'); + + function checkTheClick() { + const userInput = document.getElementById('userInput').value; + const processedInput = processInput(userInput); + if (!checkInput(processedInput)) { + alert('올바른 숫자를 입력하세요.'); + return; + } + const score = strikeBall(answerNumber, processedInput); + if (score.strikes === 3) { + displayResult('🎉정답을 맞추셨습니다!🎉'); + displayRetry('게임을 새로 시작하시겠습니까?'); + retryBtn.style.display = 'block'; + checkBtn.disabled = true; + } else if (score.strikes === 0 && score.balls ===0) { + displayResult(`낫싱`); + } + else { + displayResult(`${score.balls}볼 ${score.strikes}스트라이크`); + } + } + + function checkRetryClick() { + restartGame(); + newGame(); + } + + checkBtn.addEventListener('click', checkTheClick); + retryBtn.addEventListener('click', checkRetryClick); +} + +// 게임 초기화 +newGame();