본문 바로가기

TIL

2023.04.05_js_야구게임

 

Goal : 숫자야구 프로그램 만들기

 

  • 컴퓨터는 0과 9 사이의 서로 다른 숫자 3개를 무작위로 뽑습니다. (ex) 123, 759
  • 사용자는 컴퓨터가 뽑은 숫자를 맞추기 위해 시도합니다.
  • 컴퓨터는 사용자가 입력한 세자리 숫자에 대해서, 아래의 규칙대로 스트라이크(S)와 볼(B)를 알려줍니다.
    • 숫자의 값과 위치가 모두 일치하면 S
    • 숫자의 값은 일치하지만 위치가 틀렸으면 B
  • 기회는 무제한이며, 몇번의 시도 후에 맞췄는지 기록됩니다.
  • 숫자 3개를 모두 맞춘 경우, 게임을 종료합니다.

 

 

진행 방식

컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!
1번째 시도 : 134
0B0S
2번째 시도 : 238
1B1S
3번째 시도 : 820
2B1S
4번째 시도 : 028
3B
5번째 시도 : 280
3S
4번만에 맞히셨습니다.
게임을 종료합니다.

 

 

 

전체 코드

const readline = require("readline"); //내장 모듈인 readline 모듈

const computerNumbers = generateComputerNumbers();

let tries = 0;
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
rl.setPrompt("숫자 3개를 입력하세요 (중복 없이) ");
rl.prompt();
rl.on("line", (userNumbers) => {
  const result = checkNumbers(computerNumbers, userNumbers);

  tries++;
  console.log(`${tries}번째 시도 : ${userNumbers}`);
  console.log(result);

  if (result === "3S") {
    console.log(`축하합니다! ${tries}번만에 맞추셨습니다.`);
    rl.close();
  } else if (result === "0B3S") {
    console.log("3 스트라이크! 게임을 종료합니다.");
    rl.close();
  } else {
    rl.prompt();
  }
});

//무작위로 서로 다른 숫자 3개를 뽑는 함수
function generateComputerNumbers() { 
  const numbers = [];
  while (numbers.length < 3) {
    const randomNumber = Math.floor(Math.random() * 10); //0~9까지 숫자 10개
    if (!numbers.includes(randomNumber)) {
      numbers.push(randomNumber);
    }
  }
  return numbers;
}

//사용자가 입력한 숫자와 무작위로 뽑은 숫자를 비교하여 스트라이크와 볼의 개수를 반환하는 함수
function checkNumbers(computerNumbers, userNumbers) {
  const sNumbers = [];
  const bNumbers = [];
  for (let i = 0; i < 3; i++) {
    const userNumber = Number(userNumbers[i]);
    if (computerNumbers[i] === userNumber) {
      sNumbers.push(userNumber);
    } else if (computerNumbers.includes(userNumber)) {
      bNumbers.push(userNumber);
    }
  }

  const s = sNumbers.length;
  const b = bNumbers.length;
  if (s === 0 && b === 0) {
    return "0B0S";
  }
  if (s === 3 && b === 0) {
    return "3S";
  }
  return `${b}B${s}S`;
}

 

 

readline이란?
  • Readable Stream에서 한 번에 한 줄 씩 데이터를 읽기 위한 인터페이스를 제공하는 모듈
  • 입출력을 한 줄씩 처리하는 모듈

 

  • readline 사용법

1. readline 모듈 불러오기

const readline = require("redaline");

2. 인터페이스 생성하기

const rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout,
});

3. 입출력을 처리하는 코드 작성하기

rl.on("line", (line) => {
	/*입력받는 값을 처리하는 코드*/
	rl.close();
});

rl.on("close", () => {
	/*입력이 끝나고 실행할 코드*/
	process.exit();
});

 

 

 

작성 중

'TIL' 카테고리의 다른 글

javascript 소수점 오류  (0) 2023.04.14
2023.04.05_코딩테스트 연습  (0) 2023.04.05
2023.04.04_js_일급 객체로서의 함수  (0) 2023.04.05
2023.03.23_웹 퍼블리싱  (0) 2023.03.23
2023.03.22_position absolute  (0) 2023.03.21