바닐라 JS 챌린지 - 7일차

Seungmin Shin·2021년 8월 30일
1

랜덤 숫자게임 구현

이틀간의 코딩 과제, 지금까지 배웠던것을 모두 이용해서 랜덤숫자게임을 구현해야 한다.

사용한 기능

  • html, css, JavaScript;
  • <input type="text", "range", "button">;
  • document.querySelector();
  • eventHandler();
  • if / else;
  • Math.floor() / Math.random();
  • add.EventListener();
  • ${xxx}
  • innerText

구현과정

HTML -> JavaScript -> CSS 순으로 작성하였다.

원래의 예시화면에서는 랜덤으로 출력할 숫자의 범위를 단순하게 text area 안에 넣어주는거였지만,
여기저기 조사하다가 어떤 수강생이 range 타입을 이용해서 제작한걸 보고 따라하게 됬다.

html 파일에서 range 타입의 bar 를 생성해 min = 0, max = 100 의 값으로 설정을 하고
10의 단위로 눈금을 줘서 나중에 커서로 이동하며 원하는 숫자를 input 할 수 있게 하였다.

그리고 그 밑에 랜덤으로 발생할 숫자와 일치해야될 input 값을 추가할 text area 를 만들었다.
사용자는 이곳에 입력한 숫자와 랜덤으로 발생할 숫자가 일치하면 승리하고, 틀리다면 지게 된다.

(*코드를 전부 공유하면 안된다니까 부분적으로만 올리는걸로)

range type

<input type="range" list="tickmarks" id="set-range" 
 min="0" max="100" step="1" />   --->  range type 생성

<datalist id="tickmarks">   ---> range의 눈금생성
           <option value="0" label="0"></option>
           <option value="10"></option>
           <option value="20"></option>
           <option value="30"></option>
           <option value="40"></option>
           <option value="50"></option>
           <option value="60"></option>
           <option value="70"></option>
           <option value="80"></option>
           <option value="90"></option>
           <option value="100" label="100"></option>
       </datalist>

JavaScript 파일에서는 range 의 이동값을 value 로 가져올 수 있게 하고,
textbox에 입력한 숫자와 range의 이동으로 만들어낸 범위에서 랜덤으로 출력되는 숫자가
일치한다면 이겼다는 결과를 출력해주고, 그렇지 않다면 졌다는 결과를 출력하는 핸들러 함수를 만들었다.

핸들러는 총 두가지, range의 이동에따라 값을 input 하는 handlerRange() 와
위에서 말한것처럼 숫자의 일치에 따라 결과를 text로 출력해주는 handleInputValue() 를 작성한다.

handlerRange()

function handleRange(e) {
 endNum.innerText = `숫자의 범위를 정하세요, 범위는 0부터 ${setRange.value} 까지입니다.`
}

handleInputValue()

function handleInputValue(e) {
    const machine = Math.floor(Math.random() * setRange.value) + 1; 
    inputResult.innerText = `당신의 선택:${inputNum.value}, 나의 선택:${machine}`;

    if (parseInt(inputNum.value) === machine) {
        inputResultTxt.innerText = "당신이 이겼습니다!!";
        inputResultTxt.style.color = `#72CC50`  // 이겼을때 포인트컬러로 강조해준다.
    } else {
        inputResultTxt.innerText = "당신이 졌습니다!!";
        inputResultTxt.style.color = `black`
    }
}

그리고 최종적으로 이 모든 핸들러를 실행시킬 addEventListener() 를 만들어 실행시킨다.

addEventListener()

setRange.addEventListener("input", handleRange);
setRange.addEventListener("change", handleRange);
inputBtn.addEventListener("click", handleInputValue);

이것들말고도 기본적으로 html에서 js 파일로 가져와야하는 querySelector 나 기타 css들은
간단한 문제이니 구현은 어렵지 않다. 이것도 정답이 아니라 하나의 방법일뿐,

방법은 무궁무진하니 본인의 스타일대로 만들어도 무관하다. 기능만 정상적으로 구현되면 그만,

끝까지 화이팅

profile
Frontend Developer

0개의 댓글

관련 채용 정보