IT编程 > 网页制作 > HTML

jQuery实现小游戏源代码--打灰太狼

87人参与2020-07-07

注:该游戏是通过学习B站李南江老师jQuery后,再其基础上做的修正。

不多说,直接上代码:代码有详细的注释,应该不难看懂

首先是HTML代码:值得一提的是,我这里引入的是jQuery1.12.4版本的

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>打灰太狼</title>
  <link rel="stylesheet" href="css/index.css">
  <script src="../jquery-1.12.4.js"></script>
  <script src="js/index.js"></script>
</head>
<body>
<!--游戏的容器 -->
<div class="container">
  <h1>0</h1>
  <!-- 进度条-->
  <div class="progress"></div>
  <button class="start">开始游戏</button>
  <div class="rules">游戏规则</div>
  <!-- 游戏规则界面-->
  <div class="rule">
    <p>游戏规则:</p>
    <p>1.游戏时间:60s</p>
    <p>2.拼手速,殴打灰太狼+10分</p>
    <p>3.殴打小灰灰-10分</p>
    <a href="javascript:;" class="close">关闭</a>
  </div>

  <!-- 游戏结束界面-->
  <div class="mask">
    <h1>GAME OVER</h1>
    <button class="reStart">重新开始</button>
  </div>
</div>
</body>
</html>

接下来是CSS样式:

* {
  margin: 0px;
  padding: 0px;
}

.container {
  width: 320px;
  height: 480px;
  margin: 100px auto;
  background: url("../img/game_bg.jpg") no-repeat 0 0;
  position: relative;
  overflow: hidden;
}

.container > h1 {
  color: white;
  margin-left: 56px;
}

.container > .progress {
  width: 180px;
  height: 16px;
  background: url("../img/progress.png") no-repeat 0px 0px;
  position: absolute;
  top: 66px;
  left: 63px;
}

.container > .start {
  width: 150px;
  line-height: 35px;
  position: absolute;
  top: 400px;
  left: 85px;
  background: linear-gradient(#E55C3D, #C50000);
  border-radius: 30px;
  border: none;
  color: white;
  font-size: 18px;
}

.container > .rules {
  width: 100%;
  line-height: 20px;
  position: absolute;
  bottom: 0px;
  background-color: #cccccc;
  text-align: center;
}

/*以下为游戏规则样式*/
.container > .rule {
  width: 320px;
  height: 439px;
  position: absolute;
  background: rgba(0, 0, 0, 0.5);
  padding-top: 50px;
  text-align: center;
  box-sizing: border-box;
  /*默认隐藏*/
  display: none;
}

.rule > p {
  color: white;
  margin-top: 30px;
}

.rule > .close {
  display: inline-block;
  margin-top: 30px;
  color: #00CC00;
}

/*以下的为游戏结束样式*/
.container > .mask {
  width: 320px;
  height: 439px;
  position: absolute;
  background: rgba(0, 0, 0, 0.5);
  padding-top: 100px;
  text-align: center;
  box-sizing: border-box;
  /*默认不显示*/
  display: none;
}

.mask > h1 {
  color: white;
  font-size: 40px;
  text-shadow: 3px 3px 0px #ffffff;
}

.mask > .reStart {
  width: 150px;
  line-height: 35px;
  position: absolute;
  top: 356px;
  left: 85px;
  background: linear-gradient(#74ACCF, #007DDC);
  border-radius: 30px;
  border: none;
  color: white;
  font-size: 18px;
}

还有JS的代码如下:

$(function () {
  //进度条定时器名称
  var timer
  //切换图片的定时器名称
  var wolfTimer
  //变量a,用来判断定时器是否已经开始执行,默认为0没有开启
  var a = 0
  //变量b,用来判断动画灰太狼是否已经执行,默认为0没有开启
  var b = 0
  //1监听游戏规则按钮
  $(".rules").click(function () {
    //暂停进度条定时器
    clearInterval(timer)
    //暂停灰太狼动画
    stopWolfAnimation()
    //显示游戏规则界面
    $(".rule").stop().fadeIn(100)
  })

  //2监听关闭按钮
  $(".rule>a").click(function () {
    //a不等于0说明定时器没有执行过,恢复当前的进度条定时器
    //可以避免一开始就点游戏规则而导致游戏开始执行!!
    if (a !== 0 && b !== 0) {
      //恢复当前的进度条定时器
      progress()
      //恢复灰太狼动画
      startWolfAnimation()
    } else {
      //暂停灰太狼动画
      stopWolfAnimation()
    }
    //隐藏游戏规则界面
    $(".rule").stop().fadeOut(100)
  })

  //3监听开始游戏按钮
  $(".start").click(function () {
    //让开始按钮隐藏
    $(this).stop().fadeOut(100)
    //让进度条开始执行,调用定时器函数
    progress()
    //调用执行灰太狼动画的定时器
    startWolfAnimation()
  })

  //4监听重新开始的按钮
  $(".mask").click(function () {
    //当显示重新开始按钮时,说明定时器已经至少调用一次了,所以将a重新设为0
    a = 0
    //当点击时,隐藏当前结束界面,显示游戏开始时的默认界面
    $(this).stop().fadeOut(100)
    //让进度条立刻恢复成原来的宽度
    $(".progress").css("width", 180)
    //显示开始游戏按钮
    $(".start").fadeIn(100)
    //点击重新开始时,将已累加的分数清零
    $(".container>h1").text(0)
  })

  //设置进度条的定时器
  function progress() {
    timer = setInterval(function () {
      //当调用定时器时,a值变成1,表至少已执行过一次
      a = 1;
      //获取当前进度条的宽度
      var width = $(".progress").width()
      //每次减2个宽度,并设置给当前的进度条
      width -= 2
      $(".progress").width(width)
      if (width <= 0) {
        //当进度条为0时停止定时器
        clearTimeout(timer)
        //当进度条为0时,显示游戏结束界面
        $(".mask").stop().fadeIn(100)
        //进度条结束后,调用停止灰太狼动画的定时器
        stopWolfAnimation()
      }
    }, 100)
  }

  //设置一个用来显示动画灰太狼的方法
  function startWolfAnimation() {
    //一旦调用动画,b值改为1,表至少已执行过一次
    b = 1
    // 1.定义两个数组保存所有灰太狼和小灰灰的图片
    var wolf_1 = ['./img/h0.png', './img/h1.png', './img/h2.png', './img/h3.png', './img/h4.png', './img/h5.png', './img/h6.png', './img/h7.png', './img/h8.png', './img/h9.png'];
    var wolf_2 = ['./img/x0.png', './img/x1.png', './img/x2.png', './img/x3.png', './img/x4.png', './img/x5.png', './img/x6.png', './img/x7.png', './img/x8.png', './img/x9.png'];
    // 2.定义一个数组保存所有可能出现的位置
    var arrPos = [
      {left: "100px", top: "115px"},
      {left: "20px", top: "160px"},
      {left: "190px", top: "142px"},
      {left: "105px", top: "193px"},
      {left: "19px", top: "221px"},
      {left: "202px", top: "212px"},
      {left: "120px", top: "275px"},
      {left: "30px", top: "295px"},
      {left: "209px", top: "297px"}
    ];
    //3创建一个图片对象
    var $img = $("<img src='' class='wolfImage'>")
    //4获取随机数,用来获取图片的位置
    var int = Math.ceil(Math.random() * 8)
    //5设置图片位置
    $($img).css({
      position: "absolute",
      left: arrPos[int].left,
      top: arrPos[int].top
    })
    //6获取数据数组类型(0或1)0为灰太狼 1为小灰灰
    var wolfType = Math.round(Math.random()) == 0 ? wolf_1 : wolf_2
    //7设置定时器,用来设置图片的切换,默认从第一张开始
    window.imgIndexStart = 0
    window.imgIndexStop = 5
    wolfTimer = setInterval(function () {
      //只用切换到第五张图
      if (imgIndexStart >= imgIndexStop) {
        //删除图片
        $(".wolfImage").remove()
        //清除定时器
        clearInterval(wolfTimer)
        //重新调用:执行灰太狼动画的方法
        startWolfAnimation()
      }
      //设置图片中的src属性的值
      $img.attr("src", wolfType[imgIndexStart])
      imgIndexStart++;
    }, 200)
    //8将图片添加到界面上
    $(".container").append($img)
    //9调用游戏规则方法
    gameRules($img)
  }

  //创建一个游戏得分规则方法
  function gameRules($img) {
    //给图片绑定只能执行一次的单击响应事件
    $($img).one("click", function () {
      //当点击图片时,修改切换图片的索引,显示敲打图片
      window.imgIndexStart = 5
      window.imgIndexStop = 9
      //获取当前图片的灰太狼(包含 h)还是小灰灰(包含 x)
      var str = $(this).attr("src")
      //包含'h'的大于0,返回true,代表灰太狼,否则为小灰灰
      var flag = str.indexOf("h") >= 0
      if (flag) {
        //打灰太狼加十分
        $(".container>h1").text(parseInt($(".container>h1").text()) + 10)
      } else {
        //打小灰灰减十分
        $(".container>h1").text(parseInt($(".container>h1").text()) - 10)
      }
    })
  }

  //设置一个用来暂停动画灰太狼的方法
  function stopWolfAnimation() {
    //删除图片对象
    $(".wolfImage").remove()
    //清楚切换图片的定时器
    clearInterval(wolfTimer)
  }

})

最终实现效果如下:该小游戏会自动计时计分等

该小游戏所需要的图片资源在以下链接中,可自取:

链接:https://pan.baidu.com/s/1iONaeBpq1c2-Zfs7JxhSaQ 
提取码:2nvb 
 

本文地址:https://blog.csdn.net/weixin_45902966/article/details/107159262

您对本文有任何疑问!!点此进行留言回复

推荐阅读

猜你喜欢

jQuery实现小游戏源代码--打灰太狼

07-07

css3滤镜开发模糊背景效果(99)

07-07

HTML+CSS:viewport的写法,跟图片也有关系

07-07

(1)爬虫笔记备份

07-07

1103. 分糖果 II 数学问题

07-07

Django 前后端数据交换

07-07

拓展阅读

大家都在看

前端页面点击图片放大功能(viewerjs插件的简单而强大)

08-20

京训钉自动播放,京训钉自动续播,京训钉刷课时,京训钉自动关弹窗,京训钉自动下一课

08-12

WVP+ZLMediaKit+MediaServerUI实现摄像头GB28181推流播放录制

08-12

R2S搭配即插即用的4G Cat4实现4G转有线以太网的应用演示

11-17

R2S搭配即插即用的4G Cat4实现4G转有线以太网的应用演示

11-17

7-2 交换最小值和最大值 (15分)

10-26

解决uniapp小程序打包体积超过2M,提示包体积超过2M,“main packagexxx”,不给上传和预览的解决办法,绝对有效!

08-14

Solr 8-7的安装、配置

11-13

热门评论