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日

相关文章

  • JavaScript中reduce()方法的使用详解

    JavaScript中reduce()方法的使用详解 1. 什么是reduce()方法 reduce()是JavaScript中的高阶函数,用于对数组中的所有元素进行迭代,并将它们缩减为单个值。它接受一个回调函数作为参数,该回调函数执行一个累加器和当前元素之间的操作,将最终结果返回。 reduce()方法的语法如下: arr.reduce(callback[…

    JavaScript 2023年5月27日
    00
  • 关于JavaScript中URL对象的一些妙用

    关于JavaScript中URL对象的一些妙用,我来为大家详细讲解一下。 什么是URL对象 URL对象是JavaScript中的一个内置对象,它表示一个统一资源定位符,即URL。它可以帮助我们解析并操作URL。 在JavaScript中,我们可以通过创建一个URL实例来创建一个URL对象。其语法如下: let urlObject = new URL(urlS…

    JavaScript 2023年6月11日
    00
  • 如何使用VUE+faceApi.js实现摄像头拍摄人脸识别

    下面我将详细讲解如何使用Vue.js和face-api.js实现摄像头拍摄人脸识别的完整攻略。 1. 准备工作 在使用Vue.js和face-api.js进行开发前,我们需要确保已经准备好以下工作: Node.js和npm的安装; Vue.js的安装; face-api.js库的安装。 具体可以参考以下步骤: 1.1 安装Node.js和npm 可前往Nod…

    JavaScript 2023年6月11日
    00
  • javascript里模拟sleep(两种实现方式)

    下面是JavaScript模拟sleep的两种实现方式的详细攻略。 方式一:使用Promise对象 定义async函数: async function sleep(duration) { return new Promise(resolve => setTimeout(resolve, duration)) } 将需要延迟执行的代码放在async函数中…

    JavaScript 2023年6月11日
    00
  • js闭包实例汇总

    JS闭包实例汇总 在 JavaScript 中,函数是一等公民,它们可以被传递、被赋值、被嵌套定义等等。在函数内定义的函数,被称为闭包(Closure)。闭包可以访问函数外部的变量,而且在函数执行完并返回时,可以保留这些变量的值。 本文将为大家汇总几个 JavaScript 闭包的实例,方便大家加深对闭包的理解。 示例一:计数器 我们可以通过闭包来创建一个计…

    JavaScript 2023年6月10日
    00
  • javascript的数组方法大全

    JavaScript的数组方法大全 JavaScript中的数组是一种非常强大和常用的数据结构,可以存储任何类型的数据,并且提供了很多方便的数组方法来操作数组。在本篇文章中,我们将介绍JavaScript的所有数组方法,并提供示例说明用法。 push()方法 push()方法将一个或多个元素添加到数组的末尾。 let fruits = [‘apple’, ‘…

    JavaScript 2023年5月18日
    00
  • Ajax,UTF-8还是GB2312 eval 还是execScript

    下面是关于Ajax、UTF-8与GB2312、eval与execScript的详细讲解以及示例: Ajax Ajax是一种异步的Web开发技术,可以在不刷新整个页面的情况下更新部分页面的内容。Ajax采用异步通信的方式,通过浏览器与服务器之间的数据交互,在不影响用户体验的情况下异步地向服务器请求数据并将响应的数据动态地显示到页面中。Ajax涉及到的技术包括H…

    JavaScript 2023年5月19日
    00
  • JS运动特效之同时运动实现方法分析

    JS运动特效之同时运动实现方法分析 在JavaScript中,同时运动指的是在同一时间内对一个元素的多个属性进行变换,以实现连续的动画效果。同时运动可以使页面动效更加美观,提升用户体验。本文将详细介绍同时运动的实现方法。 基本思路 同时运动的基本思路是通过定时器对元素的不同属性进行不断的增减,达到动画效果。 实现方法 同时运动的实现方法一般有两种: 1. 多…

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