JS

[JS] Random Number Game

winter17 2023. 5. 23. 19:03

[게임 진행 순서] 
1. 0부터 어디까지 랜덤 수를 고를지 입력한다
2. 사용자가 맞출 수를 입력 후 play버튼을 누른다
3. 컴퓨터가 랜덤으로 뽑은 수와 사용자가 맞춘 수를 비교한다
4. 사용자가 맞추면 win, 아니라면 lost

 

[조건]
1. 0에서 사용자가 지정한 숫자까지의 범위에서 랜덤 한 숫자를 찾으세요. (범위는 0 이상 입력값 이하가 됩니다.)
2. 범위에는 음수가 포함될 수 없습니다.
3. 실시간으로 범위 값을 업데이트해야 합니다.
4. 유저가 숫자를 선택한 후에 게임을 플레이할 수 있습니다.
5. 유저에게 게임의 승패를 알려야 합니다.

 

html >>>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JavaScript Challenge</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <h1>Random Number Game</h1>
  <h3>Generate a number between 0 and <input type="number" class="number"></h3>
  <p>Guess the number: <input type="number" class="user"> <button type="submit">Play!</button></p>
  <p class="hidden">You chose: <span class="user-number"></span>, the machine chose: <span class="machine-number"></span></p>
  <h4 class="result"></h4>

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

 

css >>>

.hidden{
  display: none;
}

 

JavaScript >>>

// random 수를 생성할 최대값
// 사용자가 맞출 숫자 입력 후 play버튼 누르면 
// you chose === the machine chose 같을 경우 won 아니면 lost 
const chooseNumber = document.querySelector('.number') // 저장하고
const userNumber = document.querySelector('.user') // 저장하고
const playButton = document.querySelector('button') // 버튼을 누르면

const hidden = document.querySelector('.hidden')
const spanUserNum = document.querySelector('.user-number')
const spanMachineNum = document.querySelector('.machine-number')
// 결과
const result = document.querySelector('.result')

function playCasinoGame(e){ 
  // 궁금한 점 : 로컬 스토리지, preventDefault없어도 코드가 잘 실행됨. 왜?
  // preventDefault : form태그를 사용하지 않았기 때문에 필요없음
  // localStorage : 함수 외부에서 로컬 스토리지 값을 불러올 필요가 없기 때문에 이 전체 코드에서는 필요가 없다

  // e.preventDefault() // 필요없는 코드

  // 로컬 스토리지에 저장
  // 변수1 + 로컬 스토리지 / 변수2 + 로컬 스토리지 순서로 구현하면 에러발생함 
  const maxNum = chooseNumber.value
  const userNum = userNumber.value
  // localStorage.setItem('maxKey', maxNum) // 필요없는 코드
  // localStorage.setItem('userKey', userNum) // 필요없는 코드

  // 랜덤수 생성
  const randomNumber = Math.round(Math.random() * maxNum)  
  
  // hidden 클래스 삭제
  hidden.classList.remove('hidden')

  // span 태그 사이에 넣을 텍스트
  spanUserNum.textContent = userNum
  spanMachineNum.textContent = randomNumber

  // 승패
  if (spanUserNum.textContent === spanMachineNum.textContent){
    result.textContent = 'You won!'
  }else{
    result.textContent = 'You lost!'
  }
}
playButton.addEventListener('click', playCasinoGame)

[의문사항]

localStorage, preventDefault가 없어도 코드가 잘 실행되었다. 왜일까?

 

[답변]

preventDefault : form태그를 사용하지 않았기 때문에 필요 없다
localStorage : 함수 외부에서 로컬 스토리지 값을 불러올 필요가 없기 때문에 이 전체 코드에서는 필요가 없다

// 필요없는 코드
  e.preventDefault()

  localStorage.setItem('maxKey', maxNum) 
  localStorage.setItem('userKey', userNum)

[리뷰]

이틀 동안 게임을 완성해야 했는데 강의를 볼 때는 별로 안 어려운데? 하고 시작했다가 하루를 그대로 날렸다. 

첫날은 게임 룰을 잘못이해해서 그랬고, 둘째 날은 로컬스토리지, preventDefault 유무와 로컬 스토리지 선언순서 때문에 시간이 걸렸지만 완성하는 데까지 2시간도 안 걸린 것 같다. 강의에서는 로컬스토리지, preventDefault를 사용해서 나도 무조건 사용해야 하는 줄 알고 약간의 혼돈이 있었지만, gpt의 코드 평가도 괜찮아서 만족한다!

chat gpt가 평가한 내 코드에 대한&nbsp;코멘트

스스로 과제를 해결해서 뿌듯하다!!