본문 바로가기

화면 수업 정리

HTML,CSS,JS 16일차

document에서 사용되는 이벤트를 정의

마우스 이벤트 : click(), focus(), input(), change(), mousevoer(), moseout(), scroll() ...

키보드 이벤트 : keyDown(), keyPress(), keyUp()

기타 이벤트 : prevnetDefault(), target, submit()

addEventListener('evnetName', callback Function)

메서드를 사용하여 이벤트 구현을 권장

- 이벤트 중복 부여가 가능하기 때문

 

키보드 이벤트

  • keyDown : 키를 눌렀을 때
  • keyPress : 키를 누르고 있는 시점
  • keyUp : 키가 올라오는 순간

 

활용) 숫자야구 게임 만들어보기 

 

 

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button type="button" id="startBtn">게임시작</button>
    <h1 id="comMsg"></h1>
    숫자입력 : <input type="text" id="myNum">
    <button type="button" id="tryBtn">게임확인</button>
    <ol id="ol"></ol>

    <script>
        const comSet = new Set();
        let comNums = [];
        const comMsg = document.getElementById('comMsg');
        const ol = document.getElementById('ol');

        document.getElementById('startBtn').addEventListener('click', makeGame);
        document.getElementById('tryBtn').addEventListener('click', compareNum);

        //비교
        function compareNum(){
            console.log(comNums);
            if(comSet.size<=0){
                comMsg.innerText = "게임시작버튼을 클릭해주세요.";
                return; //함수종료
            }
            let myNum = document.getElementById('myNum');
            //유효성 검증
            if(validMyNum(myNum.value)){
                console.log("검증통과!!");
                //비교
                let myNumsArr = myNum.value.split("");
                console.log(myNumsArr);

                let strike = 0, ball =0;

                //com
                for(let i=0; i<comNums.length; i++){
                    //my
                    for(let j=0; j<myNumsArr.length; j++){
                        if(comNums[i] == myNumsArr[j]){
                            if(i==j){
                                strike++;
                            }else{
                                ball++;
                            }
                            break;
                        }
                    }
                }

                if(strike == 0 && ball==0){
                    ol.innerHTML += `<li>${myNumsArr} => OUT!!</li>`;
                }else{
                    if(strike == 3){
                        ol.innerHTML += `<li>${myNumsArr} => SUCCESS!!</li>`;
                    }else{
                        ol.innerHTML += `<li>${myNumsArr} => ${strike}Strike, ${ball}Ball</li>`;
                    }
                }

            }else{
                console.log("검증실패!!");  
                comMsg.innerText="유효하지 않은 숫자입니다.";
            }
            myNum.value="";
            myNum.focus();
        }

        function makeGame(){
            //기존 값 초기화
            comNums = [];
            comSet.clear();
            ol.innerText='';
            while(comSet.size < 3){
                let rNum = Math.floor(Math.random()*9+1);
                comSet.add(rNum);
            }
            console.log(comSet);
            //set => arr 저장
            comSet.forEach((e)=>{
                comNums.push(e);
            });
            comMsg.innerText = "컴퓨터가 숫자를 결정하였습니다."
        }

        //검증
        //숫자는 3자리, 숫자만 가능, 비어있으면 안됨, 중복 안됨
        function validMyNum(myNum){
            if(myNum==''){
                return false;
            }else if(myNum.length != 3){
                return false;
            }else if(isNaN(myNum)){
                return false;
            }else if(new Set(myNum.split("")).size != 3){
                return false;
            }else{
                return true;
            }
        }
        // console.log(validMyNum('q'));
    </script>
</body>
</html>

 

'화면 수업 정리' 카테고리의 다른 글

HTML,CSS,JS 15일차  (0) 2024.08.14
HTML,CSS,JS 14일차  (0) 2024.08.13
HTML,CSS,JS 13일차  (0) 2024.08.12
HTML,CSS,JS 12일차  (0) 2024.08.09
HTML,CSS,JS 11일차  (0) 2024.08.08