(231017.화) 항해 이틀차 랜덤숫자야구

ㄷr r요·2023년 10월 17일

이번 팀플은 랜덤숫자 3개를 맞추는 간단한 숫자야구 프로그램을 조건문, 반복문을 활용하여 해결하는 것

목요일까지지만 미리 함께 만들어 끝낼 수 있을 것 같다.
각자 찾아온 코드를 회의하여 조합해 만들기로 했다.

랜덤 숫자 3개 함수로 만들기

  • Math.random() 메서드는 0부터 1미만의 난수를 출력
  • Math.floor() 메서드는 괄호 안의 숫자를 내림해주는 역할
var comNum = function (maxNum) {
    let randomArray = []; //랜덤으로 나올 숫자 배열
    for (i = 0; i < 3; i++) {
        randomNum = Math.floor(Math.random() * (maxNum+1))
        if (randomArray.indexOf(randomNum) === -1) {
            randomArray.push(randomNum)
        } else { //***
            i--
        };
    };
    return randomArray
};
console.log(comNum(9));
  • str.indexOf(searchValue[, fromIndex]) : for문을 돌 때마다 지금 뽑은 숫자가
    이미 randomArray에 들어 있는지 확인하고, 없으면 넣어주는 코드

*** 중복숫자 제거: 이미 뽑은 숫자인지 확인했을 때
이미 들어있는 숫자와 겹치는 경우 숫자를 안 뽑고 그 턴을 그냥 지나가버리면
5개의 숫자를 뽑고 싶은데 4개만 출력되는 문제가 생긴다.
따라서 이미 뽑은 숫자일 경우, i를 1씩 감소시켜 다시 그 턴을 돌도록 코드를 추가해야한다!

참고 블로그- 특정 숫자 범위에서 중복을 제외한 랜덤 숫자 뽑는 방법

아차
여기까지 이해도 되고 새로 써보기도 했는데
생각해보니
조건문과 반복문을 활용하려면 다시 찾아봐야겠다

내가 찾은 코드

function setAnswer() {
  let answer = '';
  while (answer.length < 3) {
    const randomNum = Math.floor(Math.random() * 10);
    if(!answer.includes(randomNum)) answer += randomNum;
  }
  let count = 0;
  console.log(`컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!`);
  getValue(answer, count);
}
function checkValue() {
  let value = prompt(`정답을 입력하세요.`);
  if(value === null) {
    alert(`입력을 취소하셨습니다.\n새로고침을 눌러 다시 시도해주세요.`);
    return false;
  } else if(value.match(/\D/)) {
    alert(`3자리 수의 숫자만 입력해야 합니다.\n다시 입력해주세요.`);
    return checkValue();
  } else if(value.length > 3) {
    alert(`입력한 값의 길이는 3을 넘을 수 없습니다.\n다시 입력해주세요.`);
    return checkValue();
  }
  return value;
}
function getValue(answer, count) {
  let value = checkValue();
  if(!value) return;
  count++;
  console.log(`${count}번째 시도 : ${value}`);

  let s = 0, b = 0;
  let str = '';
  value.split('').forEach((e, idx) => {
    if(answer.indexOf(e) === idx) s++;
    else if(answer.split('').includes(e)) b++;
  })

  if(s === 3) str = `${s}S`;
  else if(b === 3) str = `${b}B`;
  else str = `${b}B${s}S`;
  console.log(str);
  answer !== value ? getValue(answer, count) : console.log(`${count}번만에 맞히셨습니다.\n게임을 종료합니다.`);
}

출처 : 자바스크립트로 숫자야구 프로그램 만들기

아직 완전히 혼자 생각해내기엔 힘들어
이것도 다시 해석하고 정리해서 내걸로 만들어봐야겠다ㅜㅜ

profile
개발 공부

0개의 댓글