//야구게임은 중복된 숫자가 들어갈 수 없다. 따라서, 랜덤으로 숫자를 가져오되 중복되지 않게 가져온다.
var list = [0,1,2,3,4,5,6,7,8,9];
//실제 문제가 들어갈 number변수
var number = [];
for (var i = 0; i < 4; i++){
var select = Math.floor(Math.random() * list.length) // 랜덤한 값을 찾는것.
//Math.floor는 "버림" ex)Math.floor(45.44) 결과 : 45
//Math.random은 랜덤된숫자결과를 가져온다. ex)0.156123...
number[i] = list.splice(select, 1)[0]
console.log(number)
// list.splice로 현재 list배열에 있는 숫자를 꺼내 number변수에 저장시킨다.
// 여기서 [0]을 사용한 이유는 해당 배열에 값만 뽑기 위해서 이다.
// [0]을 해주지 않을 경우 ex) console.log(number[i]) 결과 : [1],[5],[6],[3]
// [0]을 해줄 경우 console.log(number[i]) 결과 : 1,5,6,3
//console.log('list', list, 'number', number, 'length', list.length)
//number라는 변수에 현재 문제가 들어간다. ex) [1, 5, 6, 3]
}
var count = 0;
var strike = 0;
var ball = 0;
while (count < 10){
//입력창(prompt)
var input = prompt('숫자를 입력하세요'); //플레이어가 입력하는 숫자 ex) ["1234"]
var inputArray = input.split('');
//poompt는 문자로 찍혀서 input에 들어있는 값이 문자가 된다.
//["1234"]를 비교를 위해 split함수를 사용해
//['1','2','3','4'] 처럼 한글자씩 떨어뜨린다.
strike = 0; //비교하기 전, strike와, ball을 초기화한다.
ball = 0;
count++;
//입력받은 숫자를 비교하는 부분,
for (var j = 0; j < 4; j++){
for(var k = 0; k < 4; k++){
if(number[j] == inputArray[k]){
//ex) number[1, 5, 6, 3] inputArray['1','2','3','4']
// 비교할 때 '==' 쓴 이유는 number는 숫자이고, inputArray는 문자이기 때문이다.
// number에 있는 것들을 inputArray에서 한번씩 돌려가며 해당 숫자가 있는지 부터 판별한다.
// 즉, {1 == '1','2','3','4'}, {5 == '1','2','3','4'}, {6 == '1','2','3','4'}, {3 == '1','2','3','4'}
// 첫번째 if가 참이 되면, strike와, ball의 여부를 가린다.
// j === k 가 strike인 이유는 자리수가 같은지 판별한다. 만약 자리수까지 같다면, strike가 나오고 그렇지 않다면 ball로 나올 것이다.
if(j === k){
strike++;
} else{
ball++;
}
break; // j === k가 같을경우 즉, strike될 때 가장가까이에있는 for문을 break한다.
//여기서 break는 구지 쓰지 않아도 작동하지만, 참이 나온 상황에서 불필요한 비교를 피해주기위해 사용한다.
}
}
}
//결과창(console)
if(strike === 4){
console.log('홈런!!! ' + count + ' 번 만에 맞추셨습니다.')
break; // break로 인해 바로 밖에서 동작하고 있는 while문이 멈추게되고 게임이 종료된다.
} else if (count >= 10){
console.error('시도 횟수를 초과하셨습니다.');
} else{
console.info(inputArray.join('') + ': ' + strike + '스트라이크' + ball + '볼');
//inputArray.join('')을 하지 않았을 경우, ex)1,2,3,4
//inputArray.join('') ex)1234
}
}
출처 : https://www.zerocho.com/category/JavaScript/post/5734572a9def49170022bd96
(제로초님 사이트)
함수사용(참고링크)