숫자야구 구현
Complete number baseball game
var body = document.body;//document.body를 통해서 화면(document)에 접근할 수 있다
var 숫자후보 = [1,2,3,4,5,6,7,8,9];
var 숫자배열 = [];//숫자야구 정답!
for (var i =0; i <4 ;i += 1) {
//var 뽑은것 = 숫자후보.pop();뒤에서부터 뽑는다.
//var 뽑은것 = 숫자후보.splice(5,2);//5번째부터 2개 6,7을 뽑는다.
var 뽑은것 = 숫자후보.splice(Math.floor(Math.random() * (9-i)),1)[0];//랜덤한 index를 생성하여 그 뒤 2개 6,7을 뽑는다, 한번 숫자를 뽑으면 배열 길이가 1씩 감소하기 때문에 (9-i)로 해준다.
숫자배열.unshift(뽑은것);//앞에서부터 넣는다. 4 3 2 1 순서대로 넣음.
}
console.log(숫자배열);
var fform = document.createElement('form');
document.body.append(fform);
var 입력창 = document.createElement('input');
입력창.type = 'number';//이렇게 해줘도 입력창.value는 숫자로 되지 않는다.
입력창.maxLength = 4;
fform.append(입력창);//document>body가 아니라 form 하위에 만들어줘야하기 때문에.
var btn = document.createElement('button');
btn.textContent = '입력';//태그 안에 들어가는 글자.
fform.append(btn);
var result = document.createElement('div');
document.body.append();
var trial = 0;//틀린 횟수
fform.addEventListener('submit',function 비동기(e){//엔터를 쳤을 때
e.preventDefault();
var answer = 입력창.value;
//console.log(answer,숫자배열, 답 === 숫자배열.join(''));
if(answer === 숫자배열.join('')){//답이 맞으면
result.textContent = '홈런';//입력한 answer와 정답과 일치하면 '홈런'
입력창.value = '';
입력창.focus();
//다음 문제 낸다
숫자후보 = [1,2,3,4,5,6,7,8,9];
숫자배열 = [];
for(var i = 0;i<4;i += 1) {
var 뽑은것 = splice(Math.floor(Math.random * (9-i)),1)[0];
숫자배열.push(뽑은것);
}
trial = 0;
} else {//스트라이크와 볼을 알려줘야하기 떄문에 split을 사용하여 각각의 원소를 따진다.
//9546을 배열로 만들 수 있다.
//문자.split(구분자)->배열 (문자를 배열로 바꿀 땐 split)
//배열.join(구분자)->문자 (배열을 문자로 바꿀 땐 join)
var 답배열 = answer.split('');//입력한 대답을 쪼개서 답배열에 저장한다.
var strike = 0;
var ball = 0;
trial += 1;
if(trial > 10) {//10번 넘게 틀린 경우
result.textContent = '10번 넘게 틀려서 실패! 답은' + 숫자배열.join(',')+'였습니다';
입력창.value = '';
입력창.focus();
//문제 새로 낸다.
숫자후보 = [1,2,3,4,5,6,7,8,9];
숫자배열 = [];
for(var i = 0;i<4;i += 1) {
var 뽑은것 = splice(Math.floor(Math.random * (9-i)),1)[0];
숫자배열.push(뽑은것);
}
trial=0;
} else {//10번 미만으로 틀린 경우
console.log('답이 틀리면');//에러원인을 track 하기위해
for(var i=0; i <4; i++) {//4자리 숫자이기 때문에 4번 반복
if(Number(답배열[i]) === 숫자배열[i]){//같은 자리, 같은 숫자인지 확인.답배열(입력한 대답)와 숫자배열(숫자야구 정답)의 각각의 원소(i번째 원소)를 비교한다.
console.log('같은 자리?',답배열);
strike += 1;
}
else if (숫자배열.indexOf(Number(답배열[i])) > -1){//같은 자리는 아니지만 숫자가 겹치는지 확인.배열.indexOf(값) : 값의 위치를 알 수 있다. 없으면 -1. 그러므로 -1과 비교하여 -1보다 크면 들어있다.
console.log('겹치는 숫자?');
ball += 1;
}
}
}
result.textContent = strike + '스트라이크' + 볼 + '볼입니다.';
입력창.value = '';
입력창.focus();
}
});
Last updated