두더지 잡기 게임 만들기
많다면 많고, 적다면 적었던 JavaScript30 시리즈의 마지막 튜토리얼입니다.
오락실 앞에 약방의 감초처럼 놓여있는 두더지 게임을 간단하게 JavaScript로 구현해봅니다.
튜토리얼 정보
- 출처: JavaScript30
- 이름: Day 30 - Whack A Mole
- 언어: JavaScript
- 목표: 구멍에서 무작위로 튀어나오는 두더지를 잡는 미니 게임 만들기
진행 기간
2020년 5월 16일
두더지가 나오는 구멍, 나와있는 시간 무작위로 설정하기
우선, 두더지가 튀어나올 구멍이 여럿 필요합니다. 여러 구멍 중 어떤 구멍으로 나올지, 그리고 나와서 얼마 동안 있다가 다시 들어갈 지가 정해져야 하겠죠.
두더지가 튀어나오는 구멍과 튀어나왔다가 들어가는 시간이 일정하면 금방 질리기 때문에, 이 둘을 무작위로 만들어줍니다.
JavaScript에 내장되어 있는 Math 객체의 random( ) 메서드를 활용하면 무작위 숫자를 구현할 수 있습니다. 1
무작위로 시간을 정하는 randTime( ) 함수를 먼저 만들겠습니다. randTime( ) 함수의 작동 방식입니다.
- Math.random( ) 메서드를 이용해 최소값과 최대값 사이에서 무작위 수를 산출
- Math.round( ) 메서드를 이용해 1.에서 구한 무작위 수를 반올림해서 반환
다음은 무작위로 구멍을 정하는 randHole( ) 함수입니다. randHole( ) 함수는 이렇게 작동합니다.
- 참고 코드
두더지가 구멍에서 튀어나오게 하기
자, 두더지가 나올 구멍과 시간을 정했으니 구멍에서 튀어나오게 할 차례입니다.
구멍에서 나오게 하는 함수의 이름은 peep( )으로 하죠. peep( ) 함수의 작동 방식입니다.
- 참고 코드
게임 시작하기
이제 두더지가 무작위로 구멍에서 튀어나오고, 일정 시간 동안 나와 있다가 다시 들어가는 기능은 완성되었습니다.
이제 게임을 시작하는 함수를 만들어봅시다.
점수를 초기화시키고 게임을 시작하고 일정 시간 동안 지속시키는 startGame( ) 함수를 만듭니다. 다음처럼 작동합니다.
- 점수판의 점수 표시와 점수를 저장한 score 변수를 0으로 초기화
- 게임이 끝났는지를 알려주는 변수 timeUp에 false 값 지정
- peep( ) 함수 실행
- setTimeout( ) 메서드를 이용해 일정 시간 이후 변수 timeUp에 true 값 지정
- 참고 코드
튀어나온 두더지 잡기
마지막으로 튀어나온 두더지를 잡는 기능을 추가하면 게임이 완성됩니다.
두더지를 잡는 bonk( ) 함수를 두더지 요소들에 마우스 클릭 이벤트로 연결합니다. bonk( ) 함수의 작동 방식입니다.
- 참고 코드
- 참고자료: Math.random() - JavaScript | MDN [본문으로]
- 재귀적으로 작동하는 방식입니다. 결정된 구멍이 직전의 구멍과 다를 때까지 함수를 계속 실행하게 됩니다. [본문으로]
- randHole( ) 함수와 동일하게 재귀적인 방식으로 동작합니다. [본문으로]
- 이벤트의 isTrusted 속성은 이벤트가 사용자의 행동으로 만들어지면 true 값을, 스크립트나 다른 과정을 통해 만들어지면 false 값을 가집니다. 참고자료: Event.isTrusted - Web APIs | MDN [본문으로]