이번 팀플은 랜덤숫자 3개를 맞추는 간단한 숫자야구 프로그램을 조건문, 반복문을 활용하여 해결하는 것
목요일까지지만 미리 함께 만들어 끝낼 수 있을 것 같다.
각자 찾아온 코드를 회의하여 조합해 만들기로 했다.
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));
*** 중복숫자 제거: 이미 뽑은 숫자인지 확인했을 때
이미 들어있는 숫자와 겹치는 경우 숫자를 안 뽑고 그 턴을 그냥 지나가버리면
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게임을 종료합니다.`);
}
아직 완전히 혼자 생각해내기엔 힘들어
이것도 다시 해석하고 정리해서 내걸로 만들어봐야겠다ㅜㅜ