From 2dfa4bcb9628352e88c4146cecb49e928551713c Mon Sep 17 00:00:00 2001 From: sondonghun97 Date: Fri, 10 May 2024 12:58:04 +0900 Subject: [PATCH 1/8] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8b2833c..7838ac0 100644 --- a/README.md +++ b/README.md @@ -1 +1,12 @@ -# javascript-baseball-precourse \ No newline at end of file +# 1~9까지 서로 다른수로 이루어진 3자리 수를 맞추는 게임 + +### 1~9까지 무작위 숫자 선택 + +### 숫자 입력받기 + +### 입력받은 값이 유효한지 확인 + +### 스트라이크,볼,낫싱 계산 + +### 3자리 숫자를 맞출때까지 게임 반복, 모두 맞히면 게임 종료or재시작 + From a6e3e445ac4a68398c1ba10434ff7f7e2a144a32 Mon Sep 17 00:00:00 2001 From: sondonghun97 Date: Fri, 10 May 2024 15:51:34 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat:=201~9=EA=B9=8C=EC=A7=80=20=EB=9E=9C?= =?UTF-8?q?=EB=8D=A4=EC=88=AB=EC=9E=90=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 14 ++++++++++++-- src/main.js | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index b021b5c..7628e63 100644 --- a/index.html +++ b/index.html @@ -3,10 +3,20 @@ - + 숫자 야구 게임 + -
+
+

⚾숫자 야구 게임

+

+ 1~9까지의 수를 중복없이 3개 입력해주세요.
올바른 예) 139
틀린 예) 122 +

+ + +

📄결과

+
+g \ No newline at end of file diff --git a/src/main.js b/src/main.js index e69de29..5316ef7 100644 --- a/src/main.js +++ b/src/main.js @@ -0,0 +1,14 @@ +function generateNumber() { + let numbers = ''; + + while (numbers.length < 3) { + const randomNumber = Math.floor(Math.random() * 9) + 1; + if (!numbers.includes(randomNumber)) { + numbers += randomNumber; + } + } + + return numbers; + } + + From 2480125a5b2332c0c46eac563b2a28a6bf0ec270 Mon Sep 17 00:00:00 2001 From: sondonghun97 Date: Fri, 10 May 2024 16:32:00 +0900 Subject: [PATCH 3/8] =?UTF-8?q?feat:=20=EC=88=AB=EC=9E=90=EB=A5=BC=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EB=B0=9B=EA=B3=A0=20=EC=9C=A0=ED=9A=A8?= =?UTF-8?q?=EC=84=B1=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 4 ++-- src/main.js | 28 ++++++++++++++++++++++------ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/index.html b/index.html index 7628e63..4b50c3d 100644 --- a/index.html +++ b/index.html @@ -15,8 +15,8 @@

⚾숫자 야구 게임

📄결과

+
- -g \ No newline at end of file + \ No newline at end of file diff --git a/src/main.js b/src/main.js index 5316ef7..93f30e5 100644 --- a/src/main.js +++ b/src/main.js @@ -1,14 +1,30 @@ +const playerInput = document.getElementById('userInput'); +const submitBtn = document.getElementById('submit'); +const resultEl = document.getElementById('result'); + +submitBtn.addEventListener('click', displayResult); + +let answer = generateNumber(); + + + function generateNumber() { let numbers = ''; - while (numbers.length < 3) { - const randomNumber = Math.floor(Math.random() * 9) + 1; - if (!numbers.includes(randomNumber)) { - numbers += randomNumber; - } + const randomNumber = Math.floor(Math.random() * 9) + 1; + if (!numbers.includes(randomNumber)) { + numbers += randomNumber; + } } - return numbers; +} + + +function validateInput(inputValue) { + if (inputValue.length !== 3 || !/^[1-9]{3}$/.test(inputValue) || new Set(inputValue).size !== 3) { + alert('중복되지 않은 1~9까지의 숫자 3개를 입력하세요.'); + return false; } +} From 35ef54efc23eae3c706ca4d06079e63fa8ee4722 Mon Sep 17 00:00:00 2001 From: sondonghun97 Date: Fri, 10 May 2024 16:37:17 +0900 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20=EC=8A=A4=ED=8A=B8=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=ED=81=AC,=EB=B3=BC,=EB=82=AB=EC=8B=B1=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main.js b/src/main.js index 93f30e5..243df0c 100644 --- a/src/main.js +++ b/src/main.js @@ -5,6 +5,8 @@ const resultEl = document.getElementById('result'); submitBtn.addEventListener('click', displayResult); let answer = generateNumber(); +let strikes = 0; +let balls = 0; @@ -27,4 +29,30 @@ function validateInput(inputValue) { } } + strikes = 0; + balls = 0; + for (let i = 0; i < 3; i++) { + const input = parseInt(inputValue[i]); + if (input === parseInt(answer[i])) { + strikes++; + } else if (answer.includes(input.toString())) { + balls++; + } + } + + return true; + + + function displayResult() { + const inputValue = playerInput.value; + if (validateInput(inputValue)) { + if (strikes === 3) { + resultEl.innerText = '🎉정답을 맞추셨습니다🎉'; + } else if (strikes === 0 && balls === 0) { + resultEl.innerText = '낫싱'; + } else { + resultEl.innerText = `${balls}볼 ${strikes}스트라이크`; + } + } +} From f8db65cbefcd907463317e99b290db0ac73727e9 Mon Sep 17 00:00:00 2001 From: sondonghun97 Date: Fri, 10 May 2024 16:54:57 +0900 Subject: [PATCH 5/8] =?UTF-8?q?feat:=20=EC=A0=95=EB=8B=B5=EB=A7=9E?= =?UTF-8?q?=EC=B6=94=EA=B8=B0=EC=A0=84=EA=B9=8C=EC=A7=80=20=EC=A0=84?= =?UTF-8?q?=EC=97=90=20=EC=83=9D=EC=84=B1=EB=90=9C=20=EC=A0=95=EB=8B=B5?= =?UTF-8?q?=EC=9D=B4=20=EC=9C=A0=EC=A7=80=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 52 +++++++++++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/src/main.js b/src/main.js index 243df0c..aed1f12 100644 --- a/src/main.js +++ b/src/main.js @@ -5,10 +5,6 @@ const resultEl = document.getElementById('result'); submitBtn.addEventListener('click', displayResult); let answer = generateNumber(); -let strikes = 0; -let balls = 0; - - function generateNumber() { let numbers = ''; @@ -21,38 +17,36 @@ function generateNumber() { return numbers; } - function validateInput(inputValue) { - if (inputValue.length !== 3 || !/^[1-9]{3}$/.test(inputValue) || new Set(inputValue).size !== 3) { - alert('중복되지 않은 1~9까지의 숫자 3개를 입력하세요.'); - return false; - } + if (inputValue.length !== 3 || !/^[1-9]{3}$/.test(inputValue) || new Set(inputValue).size !== 3) { + alert('중복되지 않은 1~9까지의 숫자 3개를 입력하세요.'); + return false; + } + return true; } - strikes = 0; - balls = 0; - for (let i = 0; i < 3; i++) { - const input = parseInt(inputValue[i]); - if (input === parseInt(answer[i])) { - strikes++; - } else if (answer.includes(input.toString())) { - balls++; +function displayResult() { + const inputValue = playerInput.value; + if (!validateInput(inputValue)) { + return; } - } - - return true; + let strikes = 0; + let balls = 0; + for (let i = 0; i < 3; i++) { + const input = parseInt(inputValue[i]); + if (input === parseInt(answer[i])) { + strikes++; + } else if (answer.includes(input.toString())) { + balls++; + } + } - function displayResult() { - const inputValue = playerInput.value; - if (validateInput(inputValue)) { if (strikes === 3) { - resultEl.innerText = '🎉정답을 맞추셨습니다🎉'; + resultEl.innerText = '🎉정답을 맞추셨습니다🎉'; } else if (strikes === 0 && balls === 0) { - resultEl.innerText = '낫싱'; + resultEl.innerText = '낫싱'; } else { - resultEl.innerText = `${balls}볼 ${strikes}스트라이크`; + resultEl.innerText = `${balls}볼 ${strikes}스트라이크`; } - } -} - +} \ No newline at end of file From 9b1848c65b45b8501e712ec3cb0ad3cd54ff5803 Mon Sep 17 00:00:00 2001 From: sondonghun97 Date: Fri, 10 May 2024 17:18:03 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat:=EC=A0=95=EB=8B=B5=EC=9D=84=20?= =?UTF-8?q?=EB=A7=9E=EC=B6=94=EB=A9=B4=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 42 ++++++++++++++++++++++++------------------ src/main.js | 17 +++++++++++++++++ 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/index.html b/index.html index 4b50c3d..8440365 100644 --- a/index.html +++ b/index.html @@ -1,22 +1,28 @@ - - - - 숫자 야구 게임 - - -
-

⚾숫자 야구 게임

-

- 1~9까지의 수를 중복없이 3개 입력해주세요.
올바른 예) 139
틀린 예) 122 -

- - -

📄결과

-
-
- - + + + + 숫자 야구 게임 + + + +
+

⚾숫자 야구 게임

+

+ 1~9까지의 수를 중복없이 3개 입력해주세요.
올바른 예) 139
틀린 예) 122 +

+ + +

📄결과

+
+ +
+ + + \ No newline at end of file diff --git a/src/main.js b/src/main.js index aed1f12..9d5570f 100644 --- a/src/main.js +++ b/src/main.js @@ -1,8 +1,11 @@ const playerInput = document.getElementById('userInput'); const submitBtn = document.getElementById('submit'); const resultEl = document.getElementById('result'); +const gameOverSection = document.getElementById('game-over-section'); +const restartBtn = document.getElementById('restart-btn'); submitBtn.addEventListener('click', displayResult); +restartBtn.addEventListener('click', restartGame); let answer = generateNumber(); @@ -44,9 +47,23 @@ function displayResult() { if (strikes === 3) { resultEl.innerText = '🎉정답을 맞추셨습니다🎉'; + gameOverSection.style.display = 'block'; + restartBtn.style.display = 'inline'; + submitBtn.disabled = true; + playerInput.disabled = true; } else if (strikes === 0 && balls === 0) { resultEl.innerText = '낫싱'; } else { resultEl.innerText = `${balls}볼 ${strikes}스트라이크`; } +} + +function restartGame() { + answer = generateNumber(); + gameOverSection.style.display = 'none'; + restartBtn.style.display = 'none'; + resultEl.innerText = ''; + playerInput.value = ''; + playerInput.disabled = false; + submitBtn.disabled = false; } \ No newline at end of file From aadad9089085cab02d8e37504c02cdcafba0f520 Mon Sep 17 00:00:00 2001 From: sondonghun97 Date: Fri, 10 May 2024 17:22:47 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main.js b/src/main.js index 9d5570f..e47efce 100644 --- a/src/main.js +++ b/src/main.js @@ -3,9 +3,11 @@ const submitBtn = document.getElementById('submit'); const resultEl = document.getElementById('result'); const gameOverSection = document.getElementById('game-over-section'); const restartBtn = document.getElementById('restart-btn'); +const quitBtn = document.getElementById('quit-btn'); submitBtn.addEventListener('click', displayResult); restartBtn.addEventListener('click', restartGame); +quitBtn.addEventListener('click', quitGame); let answer = generateNumber(); @@ -49,6 +51,7 @@ function displayResult() { resultEl.innerText = '🎉정답을 맞추셨습니다🎉'; gameOverSection.style.display = 'block'; restartBtn.style.display = 'inline'; + quitBtn.style.display = 'inline'; submitBtn.disabled = true; playerInput.disabled = true; } else if (strikes === 0 && balls === 0) { @@ -61,9 +64,17 @@ function displayResult() { function restartGame() { answer = generateNumber(); gameOverSection.style.display = 'none'; - restartBtn.style.display = 'none'; resultEl.innerText = ''; playerInput.value = ''; playerInput.disabled = false; submitBtn.disabled = false; +} + +function quitGame() { + gameOverSection.style.display = 'none'; + resultEl.innerText = '게임이 종료되었습니다.'; + playerInput.disabled = true; + submitBtn.disabled = true; + restartBtn.style.display = 'none'; + quitBtn.style.display = 'none'; } \ No newline at end of file From e765866aff15d25b7fac4aaddb9f5531fc999eac Mon Sep 17 00:00:00 2001 From: sondonghun97 Date: Fri, 10 May 2024 19:16:47 +0900 Subject: [PATCH 8/8] =?UTF-8?q?refactor:=20=EB=AA=A8=EB=93=88=ED=99=94=20?= =?UTF-8?q?=EB=B0=8F=20=EC=98=A4=EB=A5=98=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 2 +- src/main.js | 24 ++++-------------------- src/modules/generateNumber.js | 10 ++++++++++ src/modules/validateInput.js | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 21 deletions(-) create mode 100644 src/modules/generateNumber.js create mode 100644 src/modules/validateInput.js diff --git a/index.html b/index.html index 8440365..0c52027 100644 --- a/index.html +++ b/index.html @@ -22,7 +22,7 @@

📄결과

- + \ No newline at end of file diff --git a/src/main.js b/src/main.js index e47efce..a9a9a1e 100644 --- a/src/main.js +++ b/src/main.js @@ -1,3 +1,6 @@ +import { generateNumber } from './modules/generateNumber.js'; +import { validateInput } from './modules/validateInput.js'; + const playerInput = document.getElementById('userInput'); const submitBtn = document.getElementById('submit'); const resultEl = document.getElementById('result'); @@ -11,25 +14,6 @@ quitBtn.addEventListener('click', quitGame); let answer = generateNumber(); -function generateNumber() { - let numbers = ''; - while (numbers.length < 3) { - const randomNumber = Math.floor(Math.random() * 9) + 1; - if (!numbers.includes(randomNumber)) { - numbers += randomNumber; - } - } - return numbers; -} - -function validateInput(inputValue) { - if (inputValue.length !== 3 || !/^[1-9]{3}$/.test(inputValue) || new Set(inputValue).size !== 3) { - alert('중복되지 않은 1~9까지의 숫자 3개를 입력하세요.'); - return false; - } - return true; -} - function displayResult() { const inputValue = playerInput.value; if (!validateInput(inputValue)) { @@ -53,7 +37,7 @@ function displayResult() { restartBtn.style.display = 'inline'; quitBtn.style.display = 'inline'; submitBtn.disabled = true; - playerInput.disabled = true; + playerInput.disabled = false; } else if (strikes === 0 && balls === 0) { resultEl.innerText = '낫싱'; } else { diff --git a/src/modules/generateNumber.js b/src/modules/generateNumber.js new file mode 100644 index 0000000..613144d --- /dev/null +++ b/src/modules/generateNumber.js @@ -0,0 +1,10 @@ +export function generateNumber() { + let numbers = ''; + while (numbers.length < 3) { + const randomNumber = Math.floor(Math.random() * 9) + 1; + if (!numbers.includes(randomNumber)) { + numbers += randomNumber; + } + } + return numbers; +} \ No newline at end of file diff --git a/src/modules/validateInput.js b/src/modules/validateInput.js new file mode 100644 index 0000000..74e4da3 --- /dev/null +++ b/src/modules/validateInput.js @@ -0,0 +1,15 @@ +export function validateInput(inputValue) { + if (inputValue.length !== 3) { + alert("숫자 3개를 입력하세요.."); + return false; + } + if (!/^[1-9]{3}$/.test(inputValue)) { + alert("1~9까지의 숫자를 입력하세요."); + return false; + } + if (new Set(inputValue).size !== 3) { + alert("중복되지 않은 숫자를 입력하세요."); + return false; + } + return true; +}