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 Xml增删改查(IE下)操作实现代码
Jan 30 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
Mar 07 Javascript
js日期相关函数总结分享
Oct 15 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
Mar 30 Javascript
Jquery简单分页实现方法
Jul 24 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
Sep 09 Javascript
javascript跨域总结之window.name实现的跨域数据传输
Nov 01 Javascript
超实用的javascript时间处理总结
Aug 16 Javascript
详解vue.js移动端导航navigationbar的封装
Jul 05 Javascript
VueJs监听window.resize方法示例
Jan 17 Javascript
vuex(vue状态管理)的特殊应用案例分享
Mar 03 Javascript
js实现带积分弹球小游戏
Jul 21 Javascript
理解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
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
jquery等待效果示例
2014/05/01 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Django的数据模型访问多对多键值的方法
2015/07/21 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
Flask之flask-session的具体使用
2018/07/26 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
pygame实现飞机大战
2020/03/11 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
学习雷锋倡议书
2014/04/15 职场文书
出租房屋协议书
2014/09/14 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
搬迁通知
2015/04/20 职场文书
爱国主题班会教案
2015/08/14 职场文书
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js