본문 바로가기

TIL

숫자 기억 게임 만들기

숫자를 기억하고 맞추는 숫자 기억 게임 만들기

1. 시작 버튼 클릭 시 1000 ~ 9999의 숫자를 무작위로 나타내기. 이때, 3초 뒤에 숫자가 다시 사라짐

2. 사용자가 숫자를 입력하고, 제출 버튼을 통해 정답 유무를 확인

3. 정답 시 “정답입니다!” 노출

4. 오답 시 “오답입니다. 정답은 [정답숫자]입니다.” 노출

 

⌨️ 내가 작성한 코드

 

● HTML

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>숫자 기억 게임</title>
    <link rel="stylesheet" href="style.css" />
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
      href="https://fonts.googleapis.com/css2?family=Gamja+Flower&display=swap"
      rel="stylesheet"
    />
  </head>
  <body>
    <div class="main_box">
      <h2>숫자 기억 게임</h2>
      <h3 id="rNumber"></h3>
      <form>
        <input
          class="putNumber"
          id="Input"
          type="number"
          maxlength="4"
          placeholder="숫자를 입력하세요"
        />
        <button type="button" id="start">시작</button>
        <button type="button" id="submit">제출</button>
      </form>
      <span id="result"></span>
    </div>
    <script src="run.js"></script>
  </body>
</html>

 

● CSS

* { font-family: "Noto Sans KR", sans-serif;
    font-optical-sizing: auto;
    font-weight: weight;
    font-style: normal;
}

.main_box {
    background-color: #ddff99;
    border-style: solid;
    border-width: medium;
    border-color: #88cc00;
    width: 400px;
    height: 200px;
    margin: auto;
    border-radius: 20px;
    position: relative;
    top: 300px;
    text-align: center;
}

h2 {
    display: inline-block;
    top: 60px;
}

#start, #submit {
    background-color: white;
    border-style: solid;
    border-width: 2px;
    border-color: #88cc00;
    border-radius: 4px;
    width: 60px;
    height: 37px;
}

.putNumber {
    width: 200px;
    height: 32px;
}

 

● JavaScript

  // 난수 생성 함수
  function generateRandomNumber() {
    return Math.floor(Math.random()*(9999-1000+1)+1000);
  }

  // 게임 시작 함수
const startButton = document.getElementById('start');
const random = document.getElementById('rNumber');
const enter = document.getElementById('Input');
function startGame() {
  random.style.display = "block"
  random.innerText = generateRandomNumber();
  // 3초 뒤 숫자 사라짐
  function numberGone() {
    random.style.display = "none";
  }
  setTimeout(numberGone, 3000);
 }
startButton.addEventListener("click", startGame);


  // 제출 버튼 클릭 시 실행되는 함수
  const result = document.getElementById('result');
  const submit = document.getElementById('submit');
  function checkNumber() {
    if (random.innerText == enter.value) {
        result.innerText = '정답입니다!';
    } else {
        result.innerText = '오답입니다. ' + '정답은 ' + random.innerText + '입니다.';
    }
 //정답,오답 멘트 사라짐
    function resultGone() {
      result.style.display = "none";
    }
    setTimeout(resultGone, 3000);
    result.style.display = "block";
 //입력값 초기화
    enter.value = null;
  }
submit.addEventListener("click", checkNumber);

 

🖥️ 완성 페이지

🤔 고민하고 검색했던 내용

MDN 에서 Math.random 을 참고해서 랜덤의 난수를 생성하는 함수를 만들었다.

그리고 시작버튼 클릭 시 랜덤 숫자 생성과 input 값에 숫자를 입력했을 때 if else 문으로 정답, 오답을 출력하도록 했고,

계속 막혔던 부분 중 하나가 한번 시작과 제출을 하고 난 뒤 다시 시작을 클릭했을 때 함수가 재실행이 안되었다.

별별 키워드로 구글에 이것 저것 검색해보았는데, 3초 뒤 style.display = "none" 되는 부분 때문에 시작 클릭이 한 번밖에 안되었던 랜덤 숫자를 style.display = "block" 을 집어넣으니 화면에 보였고 정답 오답 멘트 부분에도 적용해서 완성할 수 있었다.

 

🫠느낀점

코드를 얼마나 가독성있고 간결하게 작성하느냐가 개발자의 실력을 좌우하겠지만.. 나는 완전 비기너인 입장으로써

꾸역꾸역 만들었지만 저 코드 조차도 작성하는데 자꾸 막혀서 너무 오래걸렸다.😢

앞으로도 계속해서 시행착오를 마주할텐데, 언젠가는 쉽고 깔끔하게 뚝딱뚝딱 코드를 작성할 수 있었으면 좋겠고 앞으로도 계속 열심히 공부해야겠다.

'TIL' 카테고리의 다른 글

git pull 오류  (0) 2024.07.16
Git & Github  (1) 2024.07.15
Random number (난수 만들기)  (0) 2024.07.02
콘솔 적극 활용하기 - 특수문자를 활용한 강아지 출력  (0) 2024.06.28
React 트랙을 신청한 이유  (0) 2024.06.27