JavaScript实现打地鼠小游戏

让我来介绍一下如何使用JavaScript实现打地鼠小游戏的攻略。这个攻略将涵盖整个实现过程,并且提供两个示例来帮助解释。

准备工作

首先,为了开始这个小游戏的开发,我们需要准备一些基本的工具和框架。以下是需要准备的内容:

  • HTML:用于构建页面并显示游戏。
  • CSS:用于样式和布局方案。
  • JavaScript:用于游戏逻辑的实现。
  • 图片资源:用于创建动画和显示地鼠。

HTML和CSS的设置

首先,我们需要创建一个HTML文件,用于构建基本的页面和布局方案。在HTML文件中,创建一个包含菜单、游戏区域、得分和倒计时的容器。游戏区域是指玩家需要打击地鼠的区域。在HTML中设置好CSS样式。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>打地鼠 - JavaScript 小游戏</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
  <div class="container">
      <h1>打地鼠 - JavaScript 小游戏</h1>
      <div class="menu">
          <h2>菜单</h2>
          <button id="start">开始游戏</button>
          <button id="restart" disabled>重新开始</button>
          <h3>分数: <span id="score">0</span></h3>
          <h3>倒计时: <span id="timer">30</span></h3>
      </div>
      <div class="game">
          <div class="hole hole1" id="hole1"><img src="./images/mole.png"></div>
          <div class="hole hole2" id="hole2"><img src="./images/mole.png"></div>
          <div class="hole hole3" id="hole3"><img src="./images/mole.png"></div>
          <div class="hole hole4" id="hole4"><img src="./images/mole.png"></div>
          <div class="hole hole5" id="hole5"><img src="./images/mole.png"></div>
          <div class="hole hole6" id="hole6"><img src="./images/mole.png"></div>
          <div class="hole hole7" id="hole7"><img src="./images/mole.png"></div>
          <div class="hole hole8" id="hole8"><img src="./images/mole.png"></div>
          <div class="hole hole9" id="hole9"><img src="./images/mole.png"></div>
      </div>
  </div>

  <script src="game.js"></script>
</body>
</html>
body {
    font-family: Arial, sans-serif;
}

.container {
    max-width: 960px;
    margin: 0 auto;
    padding: 50px 0;
}

h1 {
    text-align: center;
}

.menu {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.game {
    margin-top: 50px;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
}

.hole {
    width: 120px;
    height: 120px;
    display: flex;
    justify-content: center;
    align-items: center;
    position: relative;
    overflow: hidden;
}

.hole img {
    position: absolute;
    bottom: 0;
    opacity: 0;
    transition: all 0.3s;
}

.hole.active img {
    bottom: -20px;
    opacity: 1;
}

.hole.scored img {
    opacity: 0.5;
}

#score, #timer {
    font-size: 24px;
    margin: 0;
    color: #333;
    font-weight: bold;
}

button {
    padding: 10px 20px;
    font-size: 16px;
    border: 2px solid #333;
    background-color: white;
    color: #333;
    border-radius: 10px;
    cursor: pointer;
}

button:disabled, button[disabled] {
    cursor: not-allowed;
    opacity: 0.5;
}

button:not(:disabled):hover {
    background-color: #333;
    color: white;
}

实现游戏逻辑

在游戏逻辑中,我们需要实现以下几个功能:

  • 随机出现地鼠。
  • 点击地鼠得分。
  • 游戏倒计时和结束游戏。
  • 重新开始游戏。

在JavaScript文件中,创建一个对象,用于存储游戏中的变量和函数

var game = {

}

随机出现地鼠

在随机出现地鼠的函数中,我们需要获取到所有的地鼠框,并从中随机选择其中一个地鼠进行显示。我们可以使用Math.random()函数随机从数组中选择一个地鼠。

randomHole: function() {
    var holes = document.querySelectorAll('.hole');
    var hole = holes[Math.floor(Math.random() * holes.length)];
    return hole;
}

在每隔一定的时间,随机出现一个地鼠并显示在游戏区域中。

startGame: function() {
    game.timer = setInterval(game.randomHole, 1000);
}

点击地鼠得分

在点击地鼠的函数中,我们需要获取到点击的地鼠元素,并将其得分加一,并在界面上更新显示分数。

clickMole: function(e) {
    if (!e.isTrusted) return;
    var mole = this.querySelector('.mole');
    if (!mole.classList.contains('active')) return;
    mole.classList.remove('active');
    mole.classList.add('scored');
    game.score++;
    document.getElementById('score').innerText = game.score;
}

游戏倒计时和结束游戏

我们需要在游戏开始时,启动一个定时器,每隔一秒,将游戏的倒计时减一,并在界面上更新显示。

countDown: function() {
    game.timer = setInterval(function() {
        game.timeLeft--;
        document.getElementById('timer').innerText = game.timeLeft;
        if (game.timeLeft < 1) game.gameOver();
    }, 1000);
}

在结束游戏的函数中,我们需要清除随机出现地鼠定时器和倒计时定时器,并在界面上显示游戏结束信息。

gameOver: function() {
    clearInterval(game.timer);
    alert('Game over. \nYour score: ' + game.score);
    document.getElementById('start').disabled = false;
    document.getElementById('restart').disabled = true;
    document.getElementById('score').innerText = '0';
    document.getElementById('timer').innerText = '30';
    document.querySelectorAll('.mole').forEach(function(mole) {
        mole.classList.remove('active');
    });
}

重新开始游戏

在重新开始游戏的函数中,我们需要清除所有的倒计时和得分数据,并在按钮上添加有效和无效状态。

restartGame: function() {
    clearInterval(game.timer);
    this.disabled = true;
    document.getElementById('start').disabled = true;
    game.timeLeft = 30;
    game.score = 0;
    game.countDown();
    game.startGame();
    setTimeout(function() {
        document.getElementById('restart').disabled = false;
    }, 3000);
}

示例介绍

下面我们来看两个比较简单的示例,来帮助理解打地鼠小游戏的实现过程。

示例1

在这个示例中,我们使用了一个简单的布局方案。玩家可以通过点击按钮开始或重新开始游戏。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>打地鼠 - 示例</title>
    <style>
        .container {
            width: 600px;
            margin: 0 auto;
            text-align: center;
        }

        h1 {
            font-size: 32px;
            font-weight:bold;
        }

        .game {
            margin: 50px 0;
        }

        .hole {
            width: 120px;
            height: 120px;
            border: 2px solid #333;
            display: inline-block;
            margin: 10px;
            position: relative;
            overflow: hidden;
            transition: all 0.2s;
            cursor: pointer;
        }

        .hole > img {
            position: absolute;
            bottom: 0;
            left: 0;
            opacity: 0;
            transition: all 0.2s;
        }

        .hole.active > img {
            opacity: 1;
        }

        #score {
            font-size: 24px;
            color: #333;
            margin: 20px 0;
        }

        button {
            padding: 10px 20px;
            font-size: 16px;
            border: 2px solid #333;
            background-color: white;
            color: #333;
            border-radius: 10px;
            cursor: pointer;
        }

        button:not(:disabled):hover {
            background-color: #333;
            color: white;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>打地鼠 - 示例</h1>
        <button id="start">开始游戏</button>
        <button id="restart" disabled>重新开始</button>
        <div class="game">
            <div class="hole" id="hole1"><img src="./images/mole.png"></div>
            <div class="hole" id="hole2"><img src="./images/mole.png"></div>
            <div class="hole" id="hole3"><img src="./images/mole.png"></div>
            <div class="hole" id="hole4"><img src="./images/mole.png"></div>
            <div class="hole" id="hole5"><img src="./images/mole.png"></div>
            <div class="hole" id="hole6"><img src="./images/mole.png"></div>
            <div class="hole" id="hole7"><img src="./images/mole.png"></div>
            <div class="hole" id="hole8"><img src="./images/mole.png"></div>
            <div class="hole" id="hole9"><img src="./images/mole.png"></div>
        </div>
        <div id="score">得分: 0</div>
    </div>

    <script src="game.js"></script>
</body>
</html>
var game = {
    timeLeft: 30,
    score: 0,
    timer: null,

    randomHole: function() {
        var holes = document.querySelectorAll('.hole');
        var hole = holes[Math.floor(Math.random() * holes.length)];
        hole.classList.add('active');
        setTimeout(function() {
            hole.classList.remove('active');
        }, 1000);
    },

    clickMole: function(e) {
        if (!e.isTrusted) return;
        var mole = this.querySelector('img');
        if (!mole) return;
        if (!mole.classList.contains('active')) return;
        mole.parentElement.classList.remove('active');
        mole.classList.add('scored');
        game.score++;
        document.getElementById('score').innerText = '得分: ' + game.score;
    },

    countDown: function() {
        game.timer = setInterval(function() {
            game.timeLeft--;
            if (game.timeLeft < 1) game.gameOver();
        }, 1000);
    },

    startGame: function() {
        game.timer = setInterval(game.randomHole, 1000);
    },

    gameOver: function() {
        clearInterval(game.timer);
        alert('Game over. \nYour score: ' + game.score);
        document.getElementById('start').disabled = false;
        document.getElementById('restart').disabled = true;
        var moles = document.querySelectorAll('.hole img');
        moles.forEach(function(mole) {
            mole.classList.remove('active');
        });
        game.score = 0;
        document.getElementById('score').innerText = '得分: 0';
        game.timeLeft = 30;
    },

    restartGame: function() {
        clearInterval(game.timer);
        game.timeLeft = 30;
        game.score = 0;
        game.countDown();
        game.startGame();
        document.getElementById('restart').disabled = true;
        setTimeout(function() {
            document.getElementById('restart').disabled = false;
        }, 3000);
    }
}

document.getElementById('start').addEventListener('click', function() {
    this.disabled = true;
    game.countDown();
    game.startGame();
    document.getElementById('restart').disabled = true;
});

document.getElementById('restart').addEventListener('click', game.restartGame);

document.querySelectorAll('.hole').forEach(function(hole) {
    hole.addEventListener('click', game.clickMole);
});

示例2

在这个示例中,我们使用了CSS动画,在地鼠出现和消失时添加了一些额外的动画效果。另外,游戏倒计时和分数信息通过固定的底部栏显示。

```html





打地鼠 - 示例2



打地鼠 - 示例2

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现打地鼠小游戏 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js前端如何写一个精确的倒计时代码

    下面我将为你详细讲解JS前端如何编写一个精确的倒计时代码。 如何编写JS倒计时 步骤一:取值 我们需要先取得倒计时的结束时间,以便计算剩余时间。可以通过以下代码获取当前时间: const now = new Date().getTime(); 然后,可以通过设定一个结束时间(例如:2022年1月1日),并将其转换为时间戳: const end = new D…

    JavaScript 2023年6月11日
    00
  • javascript开发随笔二 动态加载js和文件

    我将详细讲解一下“javascript开发随笔二 动态加载js和文件”的完整攻略。 什么是动态加载js和文件? 动态加载指的是在页面运行时动态地加载一些脚本或文件。相比静态加载,在需要的时候才加载脚本或文件,可以有效提高页面的加载速度和响应速度。 如何动态加载js和文件? 动态加载js脚本 要动态加载一个js脚本,可以使用document.createEle…

    JavaScript 2023年5月27日
    00
  • JavaScript的21条基本知识点

    下面我将为您详细讲解“JavaScript的21条基本知识点”完整攻略。 JavaScript的21条基本知识点 1. 什么是JavaScript? JavaScript是一种脚本语言,用于编写交互式网页。JavaScript可以用于控制HTML页面中的各种事件,如按钮点击、表单提交、页面滚动等。 2. 变量和数据类型 JavaScript中的数据可以分为以…

    JavaScript 2023年5月17日
    00
  • 原生js实现轮播图的示例代码

    让我们一步步讲解如何使用原生JS实现轮播图。在开始之前,请确保你已经了解了HTML、CSS和基础的JavaScript知识。 1. HTML结构 首先,我们需要在HTML文件中创建我们的轮播图结构。下面是一个基本的例子: <div class="slider"> <div class="slides"…

    JavaScript 2023年6月10日
    00
  • Javascript Array length 方法

    以下是关于JavaScript Array length方法的完整攻略。 JavaScript Array length方法 JavaScript Array length方法用于获取或设置数组的长度。该方法返回数组中元素的数量,或者设置数组的长度。如果设置的长度小于当前数组的长度,则数组将被截断。如果设置的长度大于当前数组的长度,则数组将被扩展,并且新的元…

    JavaScript 2023年5月11日
    00
  • 小程序异步问题之多个网络请求依次执行并依次收集请求结果

    当小程序中需要同时发起多个网络请求,并且这些网络请求需要按顺序执行,每个请求执行完成后需要依次收集请求结果时,就需要解决小程序的异步问题。 下面是实现多个网络请求依次执行并依次收集请求结果的完整攻略: 方法一:Promise + async/await 使用Promise.all方法,将需要按顺序执行的请求封装成Promise对象,传入Promise.all…

    JavaScript 2023年6月11日
    00
  • JavaScript中的类数组对象介绍

    JavaScript中的类数组对象介绍 在JavaScript中,除了数组对象以外,还存在一些类数组对象。这些对象具有类似于数组的结构和特性,但是却不是真正的数组。理解这些对象的特点和用途可以帮助我们更好的处理和操作数据。 类数组对象的定义和特点 类数组对象是指具有数组结构和特性,但是不是真正的数组,无法使用数组的方法,例如push、pop、shift、un…

    JavaScript 2023年5月27日
    00
  • js正则函数match、exec、test、search、replace、split使用介绍集合

    Js正则函数match、exec、test、search、replace、split使用介绍集合 正则表达式是一种能够从文本中匹配出我们需要的信息的工具,同时在JavaScript中也提供了多个正则函数可以操作正则表达式,包括match()、exec()、test()、search()、replace()和split()。 match() match()函数…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部