본문 바로가기

Web Development/Front-end

[Javascript] 곱등이게임

Javascript로 음.. 두더지게임을 만들어봤습니다.

그런데, 맥북에 두더지 아이콘을 못찾겠어서, 곱등이로.. 아이콘을 바꿧으니, 곱등이게임이되겠죠?ㅋㅋ

아무튼 !

살펴봅시다 !

 

0. 곱등이게임영상

 

 

1. 순서도

두더지 x -> 곱등이게임

처음에, 틱택토 응용해서 3x3칸을 만들려고했습니다. 그런데, 생각해보니 HTML로 화면을 만들면 훨씬 간편하잖아요?

그래서 굳이, JS로 만들 필요성을 못느껴서, HTML로 직접 만들어주고, 시작했습니다.

 

2. humble.html (곱등이 = humble);

<!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="humble.css">
</head>
<body>
    <div class='header'>
        <div class='score'>점수표</div>
    </div>

    <div class='screen'>
        <table>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>4</td>
                <td>5</td>
                <td>6</td>
            </tr>
            <tr>
                <td>7</td>
                <td>8</td>
                <td>9</td>
            </tr>
        </table>
    </div>
    <button class='game_starter'>게임시작 !</button>
    <script src="humble.js"></script>
</body>
</html>

3 X 3 칸과, 점수를 넣을 칸, 그리고, 게임시작버튼 등을 만들고 humble.js를 임포트 + humble.css를 임포트해왔습니다.

 

 

2. humble.js

let score = document.querySelector('.score');
let blanks = document.querySelectorAll('.screen table tr td');
let game_start_btn = document.querySelector('.game_starter');
let score_result = 0;

//게임시작
const 게임시작 = () => {
    blanks.forEach((td)=>{
        setInterval(()=>{
            td.textContent = '';
        }, 1000);
    });
    
    setInterval(()=>{
        let random = Math.floor(Math.random() * 9);
        blanks[random].textContent = '🦗';
    }, 2000);
}
const 곱등이죽이기 = () => {
    blanks.forEach((td)=>{
        td.textContent = '';
    })
}
const 초기화 = () => {
    window.location.reload();
}

//게임진행.
blanks.forEach((td)=>{
    td.addEventListener('click', (event)=>{
        if(event.currentTarget.textContent === '🦗'){
            //두더지를 잡았을 때, 스코어 올리고 -> x를 없애준다.(초기화)
            score_result += 1;
            score.textContent = `Your Score : ${score_result}`;
            곱등이죽이기();
        } else {
            //두더지를 잡지 못했을 때,
            score_result -= 1;
            score.textContent = `Your Score : ${score_result}`;
            곱등이죽이기();
        }
        if(score_result < 0){
            //게임오버;
            alert('Game Over !');
            초기화();
        }
    });
});
//게임시작 버튼을 눌렀을 때,
game_start_btn.addEventListener('click', ()=>{
    게임시작();
})

우선, 자주 쓰일것 같은, 점수창, 각 td를 선택, 게임스타트버튼, 점수를 기록할 score_result를 변수로 선언해줬습니다.

 

그리고, 함수형으로 프로그래밍했는데요.

 

1. 게임시작()함수를 볼까요? setInterval로, 매 1초마다 모든 td를 비워줄 수 있도록 했습니다. 그리고 또, setInterval로 매 2초마다, 곱등이를 등장하게 해줬습니다. 그럼 곱등이가 깜빡깜빡 나타났다가 사라졌다가 하게 할 수 있겠죠?

 

2. 곱등이죽이기() << 이 함수는, 사용자가 게임중에 곱등이를 두번클릭하면 점수가 여러번 오르는 문제가 있습니다. 따라서, 사용자가 곱등이를 클릭하면, 동시에 곱등이가 죽고 사라져야합니다. 그래서 이 함수에서는 곱등이를 클릭하면, 곱등이를 죽이는 함수를 만들어줬습니다.

 

3. 초기화() << 초기화함수는, 게임이 끝났을 때, 새로고침하는 함수입니다. window.location.reload() << 명령어를 통해, 새로고침 할 수 있습니다.

 

**원래 두더지게임을 만들려다가, 아이콘이 없어서 곱등이로 변신한거라.. 곱등이 === 두더지 라고 생각하시면 됩니다.

 

4. 게임진행. 이부분에서는 모든, td태그들을 가져오고, 클릭 이벤트리스너를 달아줬습니다.

 

5. 이벤트리스너에는, 만약, currentTarget에 곱등이가 나타난 부분이라면, 점수를 올리고, 그 점수를 반영해 점수표에 넣어주고, 그리고 곱등이죽이기()함수를 이용해서, 곱등이를 사라지게 해줬습니다.

 

6. 그리고 만약, 곱등이를 잡지 못하고 엉뚱한 화면을 클릭했을 때는 점수를 -1 해주고, 점수를 점수표에 반영해 준뒤, 현재 있는 곱등이를 사라지게 해줬습니다.

 

7. 지속적으로 score << 점수를 감시하면서, 점수가 0보다 적을 때 '게임오버'할 수 있도록 해주고(alert창), 게임을 초기화(); 즉, 새로고침 시켜줍니다.

 

8. 게임시작버튼을 누르면, 게임시작()함수를 이용해서, 게임을 시작해줍니다.

 

3. humble.css

body{
    background: url('./forest.jpg');
}
.screen{
    display: flex;
    justify-content: center;
}
td{
    border: 1px solid black;
    width: 150px;
    height: 150px;
    text-align: center;
    font-size: 60px;
    font-weight: bold;
    user-select: none;
}
.game_starter{
    background: url('./forest.jpg');
    width: 500px;
    height: 100px;
    font-size: 35px;
    text-align: center;
    display: block;
    margin: 0px auto;
}

.header{
    display: flex;
    justify-content: center;
}
.score{
    display: inline-block;
    width: 400px;
    border: 1px solid black;
    text-align: center;
    font-size: 25px;
    font-weight: bolder;
}

css는 즉흥적으로 찾아보고 한거라 따로 설명드릴 내용이 없을것 같네요 ㅠㅠ..

 

아무튼, 이렇게해서 곱등이 게임을 완성시켰습니다 ^ㅇ^ !