Skip to content
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

숫자 야구게임 #866

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# 숫자 야구 미션에 필요한 기능목록
### 게임 시작 문구 출력
### 사용자로부터 숫자 입력받기
### 유요한 값인지 체크하기
### 잘못된 값인경우 예외처리 후 앱종료
### 스트라이크 볼 낫싱 출력하기
### 3스트라이크면 게임 종료
### 새로 시작하려면 1, 종료하려면 2 입력받기
### 사용자가 종료2 선택 처리
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"description": "우아한테크코스 프리코스 숫자 야구 게임 미션",
"type": "module",
"dependencies": {
"@woowacourse/mission-utils": "2.1.1"
"@woowacourse/mission-utils": "^2.1.1"
},
"devDependencies": {
"@babel/core": "^7.23.0",
Expand Down
84 changes: 83 additions & 1 deletion src/App.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,87 @@
import { Console, Random } from "@woowacourse/mission-utils";

class App {
async play() {}
calculateResult(computer, userGuess) {
let strikes = 0;
let balls = 0;

for (let i = 0; i < 3; i++) {
if (userGuess[i] === computer[i]) {
strikes++;
} else if (computer.includes(userGuess[i])) {
balls++;
}
}

if (strikes === 0 && balls === 0) {
return '낫싱';
} else {
return `${balls ? `${balls}볼 ` : ''}${strikes ? `${strikes}스트라이크` : ''}`;
}
}

async play() {
Console.print('숫자 야구 게임을 시작합니다.');

const computer = this.generateComputerNumber();
const userGuess = await this.getUserGuess();
console.log(computer)
const result = this.calculateResult(computer, userGuess);

Console.print(`숫자를 입력해주세요 : ${userGuess}`)

Console.print(result);
}

/* 컴퓨터 숫자고르기 */
generateComputerNumber() {
const computer = [];
while (computer.length < 3) {
const number = Random.pickNumberInRange(1, 9);
if (!computer.includes(number)) {
computer.push(number);
}
}
return computer.join('');
}

/* 사용자 값 받기 */
async getUserGuess() {
while (true) {
const userGuess = await Console.readLineAsync('숫자를 입력해주세요 : ');
if (this.isValidGuess(userGuess)) {
return userGuess;
} else {
throw new Error('[ERROR]서로 다른 수로 이루어진 3자리의 수를 입력해주세요.');
}
}
}

isValidGuess(guess) {
return /^[1-9]{3}$/.test(guess) && new Set(guess).size === 3;
}

calculateResult(computer, userGuess) {
let strikes = 0;
let balls = 0;

for (let i = 0; i < 3; i++) {
if (userGuess[i] === computer[i]) {
strikes++;
} else if (computer.includes(userGuess[i])) {
balls++;
}
}

if (strikes === 0 && balls === 0) {
return '낫싱';
} else {
return `${balls ? `${balls}볼 ` : ''}${strikes ? `${strikes}스트라이크` : ''}`;
}
}
}

const app = new App();
app.play();

export default App;