JavaScript 打地鼠游戏代码说明


Posted in Javascript onOctober 12, 2010

演示地址:http://demo.3water.com/js/mouse/index.html
打包下载地址 https://3water.com/jiaoben/32434.html
这个是我无聊的时候写的,先看看效果(UI做得比较丑):
JavaScript 打地鼠游戏代码说明 
说明:红色的点击得分100,蓝色的点击扣分100.

只是想用js来写个小游戏,顺便练练js的代码。
先看html部分:
html

<style> 
#panel{height:300px;width:300px;background:#ccc;margin:50px 0 0 200px;} 
#panel ul{list-style:none;display:block;float:left;margin:0;padding:0;} 
#panel li{display:block;float:left;width:100px;height:100px; 
overflow:hidden;position:relative;text-align:center;} 
#panel li span{display:block;position:relative;left:0;top:60px; 
width:100px;height:40px;background:url(img/hole.gif) 0 -60px;z-index:100;} 
</style> 
</head> 
<body> 
<span>说明:红色的点击得分100,蓝色的点击扣分100.</span> 
<div id="panel"> 
<ul> 
<li><span></span></li> 
<li><span></span></li> 
<li><span></span></li> 
<li><span></span></li> 
<li><span></span></li> 
<li><span></span></li> 
<li><span></span></li> 
<li><span></span></li> 
<li><span></span></li> 
</ul> 
</div> 
<div>分数:<span id="score">0</span></div> 
<div>倒计时:<span id="time">60</span></div> 
<input type="button" value="开始" onclick="GameStart()" />

js部分:地鼠类
var Mouse = function(type){ 
//地鼠的具体dom元素,添加到页面上的 
this.mouse = null; 
//地鼠的编号 
this.num = -1; 
//地洞的编号(地鼠藏身在哪个洞) 
this.hole = -1; 
//初始化,type为地鼠类型,好与坏 
this.init(type); 
} 
Mouse.prototype = { 
//地鼠类型,好,坏,好的被杀,坏的被杀 
mousetype: { 
"good": "img/good.gif", 
"bad": "img/bad.gif", 
"goodkill":"img/goodkill.gif", 
"badkill":"img/badkill.gif" 
}, 
//初始化地鼠 
init : function(type){ 
type = type || 'good'; 
var _this = this; 
//创建地鼠的dom元素 
this.mouse = document.createElement("div"); 
//扩展属性--地鼠类型 
this.mouse.mousetype = type; 
//扩展类型--属否活着 
this.mouse.islive = true; 
this.mouse.style.cssText = 'width:75px;height:100px;background:url('+this.mousetype[type]+');left:0;top:20px;\ 
position:relative;margin:auto;cursor:pointer;'; 
//绑定地鼠被点击事件 
this.mouse.onclick = function(e){_this.beat(e);}; 
}, 
//地鼠被点中 
beat : function(e){ 
if(this.mouse.islive){ 
this.mouse.islive = false; 
this.onbeat(); 
this.mouse.style.background = "url("+this.mousetype[this.mouse.mousetype+"kill"]+")"; 
} 
}, 
//地鼠的动画 
animation : function(speed){ 
speed = speed == 'fast'?20:speed == 'normal'?30:50; 
var obj = this.mouse,ost = obj.style,oTop = parseInt(ost.top,10),cut=5,_this = this; 
//让地鼠从地洞冒出来 
var show = function(top){ 
top = top-cut; 
if(top >= -40){ 
ost.top = top + 'px'; 
setTimeout(function(){show(top);},speed); 
} 
else 
{ 
setTimeout(function(){hide(-40);},speed*10); 
} 
} 
//隐藏地鼠 
var hide = function(top){ 
top = top+cut; 
if(top <= oTop){ 
ost.top = top + 'px'; 
setTimeout(function(){hide(top);},speed); 
} 
else { 
_this.reset(); 
} 
} 
show(oTop); 
}, 
//重置地鼠,当地鼠滚回洞里的时候 
reset : function(){ 
this.mouse.islive =true; 
this.mouse.style.background = "url("+this.mousetype[this.mouse.mousetype]+")"; 
this.onend(); 
}, 
//扩展方法:地鼠被点中 
onbeat : function(){}, 
//扩展方法:地鼠动画结束后 
onend : function(){} 
}

接着是游戏控制类,控制游戏的逻辑:
//游戏控制类 
var Game = { 
//游戏时间,一分钟 
time : 61, 
//地鼠地图,总共有十只,其中两只是坏的 
mouseMap : { 
1:'good', 
2:'bad', 
3:'good', 
4:'good', 
5:'bad', 
6:'good', 
7:'bad', 
8:'good', 
9:'good', 
10:'good' 
}, 
//所有的地鼠dom元素 
allMouse : [], 
//目前分数 
nowScore : 0, 
//目前有哪几个地洞给占用 
hasHole : {}, 
//目前有哪几只地鼠是活动的 
hasMouse : {}, 
//页面的地洞集合 
lis : null, 
//初始化地鼠与地洞 
init : function(){ 
//获取页面的地洞集合 
this.lis = document.getElementById('panel').getElementsByTagName('li'); 
_this = this; 
//初始化10只地鼠 
for(var i=1;i <=10;i++){ 
var mouse = new Mouse(this.mouseMap[i]); 
//扩展地鼠被点中事件 
mouse.onbeat = function(){ 
//修改分数 
Game.changeScore(100 * (this.mouse.mousetype=='good'?1:-1)); 
} 
//扩展地鼠动画结束事件 
mouse.onend = function(){ 
//移除地洞中的地鼠 
var li = _this.lis[this.hole]; 
li.removeChild(li.mouse.mouse); 
li.mouse = null; 
//清除对应的地洞与地鼠 
_this.hasHole[this.hole] = null; 
_this.hasMouse[this.num] = null; 
} 
this.allMouse.push(mouse); 
} 
}, 
//修改游戏分数 
changeScore : function(score){ 
this.nowScore += score; 
document.getElementById('score').innerHTML = this.nowScore; 
}, 
//游戏开始 
start : function(){ 
if(this.time <= 0)return; 
var _this = this; 
//随机地洞编号 
var random = parseInt(Math.random()*9,10); 
while(this.hasHole[random]){ 
random = parseInt(Math.random()*9,10); 
} 
//随机地鼠编号 
var randomMouse = parseInt(Math.random()*10,10); 
while(this.hasMouse[randomMouse]){ 
randomMouse = parseInt(Math.random()*10,10); 
} 
//添加地鼠到地洞中 
this.allMouse[randomMouse].hole = random; 
this.allMouse[randomMouse].num = randomMouse; 
this.lis[random].appendChild(this.allMouse[randomMouse].mouse); 
this.lis[random].mouse = this.allMouse[randomMouse]; 
this.lis[random].mouse.animation('normal'); 
//记录地鼠与地洞编号 
this.hasHole[random] = 'true'; 
this.hasMouse[randomMouse] = 'true'; 
setTimeout(function(){_this.start();},250); 
}, 
//倒计时 
startTime : function(){ 
this.time -= 1; 
var _this = this; 
document.getElementById('time').innerHTML = this.time; 
if(this.time > 0){ 
setTimeout(function(){_this.startTime()},1000); 
} 
}, 
//重置游戏设置 
reset : function(){ 
this.time = 61; 
this.allMouse = []; 
this.nowScore = 0; 
this.hasHole = {}; 
this.hasMouse = {}; 
this.lis = null; 
this.changeScore(0); 
} 
} 
//游戏开始函数 
function GameStart(){ 
if(Game.time > 0 && Game.time != 61){ 
alert("游戏尚未结束,不能重新开始哦!"); 
return; 
} 
Game.reset(); 
Game.init(); 
Game.start(); 
Game.startTime(); 
}

这样就完成了。。。功能还是很简陋。。。只是想说明,js还是可以做小游戏的。。。欢迎拍砖!
Javascript 相关文章推荐
javascript的函数
Jan 31 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
Nov 13 Javascript
jQuery 加上最后自己的验证
Nov 04 Javascript
基于jquery的合并table相同单元格的插件(精简版)
Apr 05 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
Jan 12 Javascript
jQuery基于muipicker实现仿ios时间选择
Feb 22 Javascript
jQuery stop()用法实例详解
Jul 28 Javascript
AngularJS模仿Form表单提交的实现代码
Dec 08 Javascript
Vue2 监听属性改变watch的实例代码
Aug 27 Javascript
vuejs点击class变化的实例
Sep 05 Javascript
解决vue同一slot在组件中渲染多次的问题
Sep 06 Javascript
JQuery事件冒泡和默认行为代码实例
May 13 jQuery
理解Javascript_03_javascript全局观
Oct 11 #Javascript
理解Javascript_02_理解undefined和null
Oct 11 #Javascript
理解Javascript_01_理解内存分配原理分析
Oct 11 #Javascript
javascript getElementsByClassName实现代码
Oct 11 #Javascript
javascript Array.prototype.slice使用说明
Oct 11 #Javascript
javascript 伪数组实现方法
Oct 11 #Javascript
javascript forEach通用循环遍历方法
Oct 11 #Javascript
You might like
解析php如何将日志写进syslog
2013/06/28 PHP
php 地区分类排序算法
2013/07/01 PHP
php下获取http状态的实现代码
2014/05/09 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
在网页里看flash的trace数据的js类
2009/01/10 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
Python 命令行参数sys.argv
2008/09/06 Python
Python中的异常处理简明介绍
2015/04/13 Python
python关闭windows进程的方法
2015/04/18 Python
Python数据结构之单链表详解
2017/09/12 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
工程造价专业大专生求职信
2013/10/06 职场文书
竞选班委演讲稿
2014/04/28 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
综合办公室岗位职责
2015/04/11 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby