FRONT/JAVASCRIPT

[Javascript] 랜덤한 숫자 맞추기 게임

연듀 2021. 6. 9. 14:15

 

 

JS Casino

 

 

 

html

<!DOCTYPE html>
<html>
  <head>
    <title>Casino</title>
    <link rel="stylesheet" href="style.css" />
    <meta charset="UTF-8" />
  </head>

  <body>
    <h1>Random Number Game</h1>
    <h3>Generate a Number between 0 and <span class="maxNum"></span></h3>
    <form class="gameForm">
      <input class="rangeInput" type="range" min="0" max="200" />
    </form>
    <div class="numBox">
      Guess the number:&nbsp;
      <form class="numForm">
        <input class="inputNum" type="number" style="width: 50px" />
        <button>play!</button>
      </form>
    </div>
    <div class="paintChose"></div>
    <h4 class="paintResult"></h4>

    <script src="index.js"></script>
  </body>
</html>

 

 

 

js

 const form = document.querySelector(".numForm"),
    range = document.querySelector(".rangeInput"),
    inputNum = form.querySelector(".inputNum"),
    maxNum = document.querySelector(".maxNum"),
    paintChose = document.querySelector(".paintChose"),
    paintResult = document.querySelector(".paintResult");

function result(myNum, randNum){
    paintChose.innerText=`You chose: ${myNum}, the machine chose ${randNum}`;
    myNum = parseInt(myNum);
    if (myNum === randNum){ 
        paintResult.innerText=`You won!`;
    }
    else if(myNum > randNum || myNum < 0){
        paintResult.innerText =`This is wrong number.`;
    }
    else{
        paintResult.innerText=`You lose!`;
    }
}

function makeRandNum(e){
    e.preventDefault();
    const myNum = inputNum.value;
    const maxValue = range.value;
    const randNum = Math.ceil(Math.random() * maxValue);

   result(myNum, randNum);
}

function handleInput(){
    const maxNumValue = range.value;

    maxNum.innerText = `${maxNumValue}`;
    form.addEventListener("submit", makeRandNum);
}

function init(){
    range.oninput = handleInput;
}
init();

 

 

 

target.oninput = functionRef;

 

=>range.oninput으로 range value를 실시간으로 받는다.

 

 

 

 

handleInput()

 

range value를 받아 출력하고 form을 submit할시 makeRandNum함수를 실행한다.

 

 

 

 

 

makeRandNum()

 

event.preventDefault()로 다시 제출하는것을 막고

내가 입력한 값 myNum

range로 설정한 최대 값 myValue

랜덤으로 생성된 값 randNum 을 만든다. 

이 때 randNum 은 Math.random()으로 랜덤한 값의 범위를 maxValue만큼으로 지정해 주고, Math.ceil을 해줘 소수점 아래 자리가 안나오게 해준다.

 

 

 

 

result()

 

내가 입력한 값과 랜덤으로 생성된 값을 인자로 받아 비교해 두 값이 같으면 이기고, 같지 않으면 지는 결과를 출력한다.

이 때 이기는 값이 제대로 출력되지 않아 문제를 살펴봤었는데, 내가 입력한 값은 문자열이기 때문에 비교했을 때 항상 두 값이 같지 않게 나온것이였다.

그렇기 때문에 내가 입력한 문자열을 parseInt()를 사용해 정수로 변환해야 한다.