基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)


Posted in Javascript onNovember 02, 2017

 随着html5的兴起,那些公司对大型游戏的开发正在慢慢疏远,一、开发周期长;二、运营花费高;他们正找一些能够克服这些缺点的替代品。正好,html5的出现可以改变这些现状,在淘宝、京东等一些大型电商网站、QQ、微信等聊天软件都出现了html5的小游戏,这说明html5越来越受到大家的青睐。接下来我用javascript实现一个小型游戏---打地鼠。

一.游戏简介

打地鼠这个游戏相信大家都不陌生,也是童年时候一款经典的游戏。本次游戏的编写是以html文件形式完成的,并且使用HBulider软件进行编写,使用谷歌浏览器展示效果,游戏将会采用JavaScript实现整体的逻辑流程,最终使用谷歌浏览器来实现游戏的展示和操作。本次游戏需要有一定的HTML5+JavaScript基础。

二.游戏最终的效果如下:

基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)

三.游戏实现的流程

a) 游戏界面的切换和背景音乐的实现

b) 设置按钮的点击效果

c) 地鼠的隐藏与出现

d) 地鼠的随机出现

e) 设置小锤跟随鼠标移动

f) 小锤和地鼠的碰撞

1

首先是游戏界面的切换,在我们点击开始游戏或者游戏说明时,都会进行页面的切换,页面切换效果我们可以使用隐藏属性display:none。在游戏主菜单界面时,将内容content设置为出现:

document.getElementById("content").style.display="block";

在进入游戏或者游戏说明时,将content内容设置为隐藏,从而实现界面的切换效果

document.getElementById("content").style.display="none";

2

 接下来是音频的实现,HTML5新特性中的<audio>标签提供音乐播放的功能,在进入游戏时,音乐自动播放,我们在body中自定义一个按钮,通过按钮来控制音频的播放和暂停,代码如下:

按钮样式:

基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)

//src中存放音频地址,设置autoplay加载完成自动播放,button按钮控制播放暂停
<audio id="audio" src="audio/game_music.ogg" autoplay="autoplay" loop="loop" ></audio>
<input type="button" onclick="playOrPause()" id="playbtn"></input>

然后再js中自定义按钮的功能,代码如下:

然后再js中自定义按钮的功能,代码如下:

//音频播放与暂停
function playOrPause(){
 var audio = document.getElementById("audio");
 if(audio.paused){
 audio.play();
document.getElementById("playbtn").style.backgroundImage = "url(img/musicplaying.png)";
 }else if(audio.played){
  audio.pause();
 document.getElementById("playbtn").style.backgroundImage = "url(img/musicpause.png)";
 }
 }

3

之后是设置按钮的点击效果,这个比较简单,实际上就是两个图片之间的切换,给按钮一个hover,通过鼠标移上来实现背景图片的切换

基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)

例:

//开始按钮被鼠标指向时触发
#start:hover{
 background-image: url(../img/start2.png);
 }

4

 接下来是地鼠的出现功能,在地鼠出现的区域设置一个div用来显示地鼠,在地鼠未出现之前将地鼠隐藏在洞下,使用定时器setInterval()设定地鼠出现的时间,使用延时器setTimeout(),设定地鼠待在地面上的时间

首先是div块(地鼠显示的区域)和地鼠的隐藏div块

展示效果:

基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)

例:

//d0为地鼠出现的区域,m0设置地鼠隐藏的区域
<div id="d0" >
 <div id="m0" ></div> 
</div>

其次是地鼠的出现和消失,

例:

//老鼠显示和消失动画
intervalid= setInterval(function(){
 $("#m"+num).animate({"marginTop":0+"px"},function(){

  timeId2= setTimeout(function(){
  $("#m"+num).animate({"marginTop":100+"px"});
  },1000);
  
 }); 
 //老鼠被打进洞后,恢复原图
  document.getElementById("m"+num).style.backgroundImage = "url(img/mouse1.png)";
  
 },3000);

5

 地鼠的随机出现,我们可以设定一个随机数,

例:

//随机产生0-8之间的随机数,包括0和8
var num = Math.floor(Math.random()*9);

产生0-8之间的随机数,指定九个洞中哪个洞出现地鼠,然后将num传递给定时器和延时器中的id指定的地鼠,实现地鼠随机的选取。

随机出现地鼠展示:

基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)

6

 设置锤子的移动需要与鼠标移动同步,使用到JavaScript中的鼠标移动事件,首先注册鼠标移动事件,代码如下:

基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)

var ele=document.getElementById("all");
ele.onmousemove=function(){GetMouse(event);}
function GetMouse(oEvent,snum)
{
 x=oEvent.clientX;
 y=oEvent.clientY; document.getElementById('Img').style.left=(parseInt(x))+10+"px";
 document.getElementById('Img').style.top=y-30+"px"; 
 var oEvent=oEvent||event;

7

 检测碰撞:

检测锤子是否与出现的地鼠相碰撞,使用offsetTop、offsetWidth、offsetHeight和offsetLeft计算出地鼠和锤子的位置,根据距离的计算,判断地鼠与锤子是否重合碰撞。

效果:

代码如下:

var l1=document.getElementById('Img').offsetLeft; 
var r1=document.getElementById('Img')
.offsetLeft+document.getElementById('Img').offsetWidth; 
var t1=document.getElementById('Img').offsetTop; 
var b1=document.getElementById('Img')
.offsetTop+document.getElementById('Img').offsetHeight; 
var l2=document.getElementById('m'+num).offsetLeft; 
var r2=document.getElementById('m'+num)
.offsetLeft+document.getElementById('m'+num).offsetWidth; 
var t2=document.getElementById('m'+num).offsetTop; 
var b2=document.getElementById('m'+num)
.offsetTop+document.getElementById('m'+num).offsetHeight; 
//锤子与老鼠碰撞计算
if(r1<l2 || l1>r2 || b1<t2 || t1>b2) 
 { 
 var ele = document.getElementById("m"+num);
 //实现锤子点击动画
 ele.onmousedown = function(){
 ChangeBg("Img","img/hammer2.png");
 //打中老鼠老鼠切换图片
 document.form1.score.value = beat;
 console.log("总得分为:"+beat);   document.getElementById('m'+num)
.style.backgroundImage='url(img/mouse2.png)'; 
 } 
beat+=1; 
 } 
else 
 { 
 var ele = document.getElementById("m"+num);
 //实现锤子点击动画
 ele.onmousedown = function(){
 ChangeBg("Img","img/hammer2.png"); document.getElementById('m'+num).style.background='url(img/mouse1.png); 
}
 }

以上是主要功能的代码展示,需要完整的游戏代码,可自行下载。

总结

以上所述是小编给大家介绍的基于JavaScript+HTML5 实现打地鼠小游戏,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)

Javascript 相关文章推荐
jQuery图片的展开和收缩实现代码
Apr 16 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
Oct 17 Javascript
javascript操作字符串的原生方法
Dec 22 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
May 15 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
Oct 28 Javascript
angular2模块和共享模块详解
Apr 08 Javascript
vue项目中公用footer组件底部位置的适配问题
May 10 Javascript
JavaScript基于数组实现的栈与队列操作示例
Dec 22 Javascript
微信小程序生成二维码的示例代码
Mar 29 Javascript
layui清空,重置表单数据的实例
Sep 12 Javascript
JavaScript实现单图片上传并预览功能
Sep 30 Javascript
vue2路由基本用法实例分析
Mar 06 Javascript
vue-resource + json-server模拟数据的方法
Nov 02 #Javascript
详解vue-cli项目中用json-sever搭建mock服务器
Nov 02 #Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
Nov 02 #Javascript
vue项目中使用axios上传图片等文件操作
Nov 02 #Javascript
JavaScript登录验证基础教程
Nov 01 #Javascript
vue打包后显示空白正确处理方法
Nov 01 #Javascript
js实现登录与注册界面
Nov 01 #Javascript
You might like
星际争霸秘籍
2020/03/04 星际争霸
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
javascript 流畅动画实现原理
2009/09/08 Javascript
Extjs中常用表单介绍与应用
2010/06/07 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
深入了解Django中间件及其方法
2019/07/26 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
详解python tkinter 图片插入问题
2020/09/03 Python
python 实现控制鼠标键盘
2020/11/27 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
出生公证委托书
2014/04/03 职场文书
大专生找工作自荐书
2014/06/10 职场文书
小学班级特色活动方案
2014/08/31 职场文书
优秀教师个人总结
2015/02/11 职场文书
优秀教师工作总结2015
2015/07/22 职场文书