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技巧–转义符”\”的妙用

    来讲讲JavaScript中转义符“\”的妙用吧。 转义符的作用 在JavaScript中,转义符“\”可以在特定情况下表示一些特殊字符或者让某些字符变得有特殊意义。例如,我们可以使用转义符将一些内容输出在HTML中的标签中。 转义符实现HTML中标签的插入 比如说,我们有一个网站,需要在页面上显示如下这段文字: <p>This is a par…

    JavaScript 2023年5月28日
    00
  • 细说JS数组遍历的一些细节及实现

    细说JS数组遍历的一些细节及实现 简介 JavaScript中的数组是一种数据结构,用于存储一组元素。数组常常使用循环来遍历其中的元素,这篇文章将详细讲解JS数组的遍历,以及在遍历过程中需要注意的一些细节。 遍历数组的方法 for循环 for循环是遍历数组最基础、最常用的方法。for循环遍历数组时,可以使用数组的length属性获取数组的长度,通过遍历其下标…

    JavaScript 2023年5月27日
    00
  • javascript实现校验文件上传控件实例

    先来介绍一下如何实现文件上传控件的校验。 1. HTML中的上传控件 首先需要在HTML中使用<input>标签创建一个文件上传控件。 <input type="file" id="upload-file"> 上述代码创建了一个id为upload-file的文件上传控件。 2. JS中监听上传控…

    JavaScript 2023年5月27日
    00
  • js格式化时间小结

    JS 格式化时间小结 格式化时间是前端开发经常会遇到的问题之一,不同场景下需要展现的时间格式也会有所不同。在JavaScript中,我们可以使用内置的Date对象和一些方法来格式化时间。 获取当前时间 使用内置的Date对象可以获得当前时间。比如以下代码: const now = new Date(); 格式化时间 toLocaleDateString() …

    JavaScript 2023年5月27日
    00
  • $()JS小技巧

    $()JS小技巧 在前端开发中,我们经常需要对DOM元素进行操作,而jQuery库可以帮助我们更方便地实现这些操作。其中一个最常用的方法是$(),它可以获取DOM元素并对其进行操作。 基本语法 $()是jQuery的一种基本语法,它可以通过选择器来选取HTML元素,并返回一个jQuery对象。基本语法如下: $(selector).action() 其中的s…

    JavaScript 2023年5月18日
    00
  • webpack HappyPack实战详解

    webpack HappyPack实战详解 什么是 HappyPack HappyPack是一个webpack插件,可以将代码在多个子进程中并行编译,提高构建的速度。 HappyPack使用 使用步骤: 安装 HappyPack: npm install happypack -D 引入 HappyPack: js const HappyPack = requ…

    JavaScript 2023年5月28日
    00
  • 整理关于Bootstrap表单的慕课笔记

    接下来我将介绍如何详细整理关于Bootstrap表单的慕课笔记。整理步骤如下: 步骤一:了解Bootstrap表单 首先需要了解Bootstrap表单的基本概念和用法。可以通过查看Bootstrap官网的文档来深入了解,也可以观看相应的慕课视频,了解Bootstrap表单的基本布局、输入控件、表单验证等相关知识。 步骤二:整理笔记 根据学习所得,对Boots…

    JavaScript 2023年6月10日
    00
  • javascript url几种编码方式详解

    JavaScript URL几种编码方式详解 在JavaScript中,对URL进行编码是一项常见的任务。URL编码是将URL中的字符串转换为可安全传输的格式的过程。在编码URL之前,需要了解几种不同的URL编码方式以及它们的适用场景。 encodeURIComponent() encodeURIComponent() 是Javascript中常用的编码函数…

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