打豆豆小游戏 用javascript编写的[打豆豆]小游戏


Posted in Javascript onJanuary 08, 2013

闲来无事,花了两天时间,用javascript 写了一个打豆豆的游戏,至于怎么玩的就不细说了,到网上搜一下就知道了,很简单。

下面是源码,发布出来供大家学习交流。
由于本程序没有用到一个图片,所以界面在ie下豆豆都是方形的比较扎眼,建议用chrome浏览器运行,或者firefox
演示地址:http://www.imkoko.com/app/dadoudou.php
不多说,上代码

<!DOCTYPE html> 
<html> 
<head> 
<style> 
body{font-size:12px;} 
#fly{position:absolute;} 
a{text-decoration:none;color:#999;} 
.huabu,#main{width:600px;height:450px;position:relative;overflow:hidden;} 
.b,.c{height:25px;width:25px;position:absolute;z-index:1;background:#efefef;font-size:12px;} 
.c{background:#000;border-radius:12px;text-align:center;line-height:25px;color:#fff;} 
.c10{background:#FDADFE} 
.c1{background:#0569FF} 
.c2{background:#0CCE0C} 
.c3{background:#CE6C0A} 
.c4{background:#FF9B05} 
.c5{background:#CCCC66} 
.c6{background:#CD6ACD} 
.c7{background:#6DCECE} 
.c8{background:#9C9C9C} 
.c9{background:#FF6A6A} 
#pin{z-index:3;position:absolute;width:600px;height:450px;filter:alpha(opacity=50);-moz-opacity:0.5;-khtml-opacity: 0.5; opacity: 0.5;background:#fff;} 
#time,#cou,.right{position:absolute;bottom:0px;color:#999;} 
#cou{left:100px;} 
#menu{z-index:3;position:absolute;left:200px;top:100px;width:200px;height:300px;font-weight:bold;font-size:24px;text-align:center;} 
#menu button{width:100px; height:50px;} 
.right{right:0px;} 
</style> 
</head> 
<body> 
<div id="fly"> 
<div id="dou" class="huabu"> 
<div id="pin" onmousedown="event.cancelBubble=true;"></div> 
<div id="menu"> <button onclick="start()" >开始</button><br><br>玩法:点击空白地方,上、下、左、右如果有相同的颜色或数字就可以得分</div> 
<div id="main" onmousedown="MoveObject.down(this,cc)"></div> 
<div id="time">剩余时间:120</div> 
<div id="cou">得分:0</div> 
<div class="right">Power by <a href="http://www.imkoko.com">酷酷网</a></div> 
</div> 
</div> 
<script> 
/* 
*作者:江奇 
*演示网站:酷酷网 http://www.imkoko.com/app/dadoudou.php 
*程序完全免费公开,转载请保留此信息,谢谢 
*/ 
function $(o){ 
return document.getElementById(o); 
} 
var MoveObject={ 
down:function (o,fun) 
{ 
document.onselectstart=new Function("event.returnValue=false"); 
document.body.setAttribute('style','-moz-user-select: none;'); 
//e=e?e:window.event; 
e=arguments.callee.caller.arguments[0] || window.event; 
x=e.clientX; 
y=e.clientY; 
fun([x,y]); 
return false; 
} 
}; 
var o=new Array(); 
var it=0; 
var fen=0; 
function ini(){ 
var _doc = (document.compatMode != "BackCompat") ? document.documentElement : document.body; 
fly_left=_doc.scrollLeft+_doc.clientWidth/2-$('fly').offsetWidth/2; 
$('fly').style.left=fly_left+'px'; 
for(i=0;i<15;i++){ 
for(j=0;j<12;j++){ 
tmp=document.createElement('div'); 
tmp.className="b"; 
tmp.style.left=(j*50+i%2*25)+'px'; 
tmp.style.top=i*25+'px'; 
$('main').appendChild(tmp); 
} 
} 
for(i=0;i<24;i++){ 
o[i]=new Array(); 
} 
for(i=0;i<200;i++){ 
var ji=cre(); 
tmp=document.createElement('div'); 
tmp.innerHTML=t; 
tmp.id=ji[0]+'_'+ji[1]; 
tmp.className="c c"+t; 
tmp.style.left=(x*25)+'px'; 
tmp.style.top=y*25+'px'; 
$('main').appendChild(tmp); 
} 
} 
function cre(){ 
x=parseInt(Math.random()*24); 
y=parseInt(Math.random()*15); 
t=parseInt(Math.random()*10+1); 
if(o[x][y]>0){ 
var re=cre(); 
return re; 
}else{ 
o[x][y]=t; 
return [x,y]; 
} 
} 
function cc(p){ 
x=parseInt((p[0]-$('fly').offsetLeft)/25); 
y=parseInt((p[1]-$('fly').offsetTop)/25); 
if(o[x][y]>0){ 
return false; 
}else{ 
var finded=[]; 
for(i=y;i>=0;i--){ 
if(o[x][i]>0){ 
finded.push([o[x][i],x,i]); 
break; 
} 
} 
for(i=y;i<o[x].length;i++){ 
if(o[x][i]>0){ 
finded.push([o[x][i],x,i]); 
break; 
} 
} 
for(i=x;i>=0;i--){ 
if(o[i][y]>0){ 
finded.push([o[i][y],i,y]); 
break; 
} 
} 
for(i=x;i<o.length;i++){ 
if(o[i][y]>0){ 
finded.push([o[i][y],i,y]); 
break; 
} 
} 
find=0; 
po(finded,0); 
if(find==0){ 
it+=10; 
} 
fen=fen+find; 
$('cou').innerHTML='得分:'+fen; 
} 
} 
function po(obj,n){ 
a=obj[n]; 
tag=0; 
for(j=n+1;j<obj.length;){ 
if(obj[j][0]==a[0]){ 
o[obj[j][1]][obj[j][2]]=0; 
paowuxian.p($(obj[j][1]+'_'+obj[j][2])); 
obj.splice(j,1); 
tag=1; 
find++; 
}else{ 
j++; 
} 
} 
if(tag==0){ 
n++; 
}else{ 
o[a[1]][a[2]]=0; 
paowuxian.p($(a[1]+'_'+a[2])); 
find++; 
obj.splice(n,1); 
} 
if(n<obj.length-1){ 
po(obj,n); 
} 
} 
function time(){ 
it++; 
if(it<121){ 
$('time').innerHTML='剩余时间:'+(121-it); 
setTimeout('time()',1000); 
}else{ 
$('pin').style.display='block'; 
$('menu').style.display='block'; 
$('menu').innerHTML='<button onclick="start()" >开始</button><br><br><br>'+'恭喜你 '+fen+' 分' 
} 
} 
function start(){ 
it=0; 
fen=0; 
$('main').innerHTML=''; 
o=new Array(); 
ini(); 
$('pin').style.display='none'; 
$('menu').style.display='none'; 
time(); 
} 
ini(); 
var paowuxian={ 
_type:[], 
bot:0, 
o:[], 
ini:function(o){ 
for(i=0;i<this.o.length;i++){ 
if(this.o[i]==o){ 
return i; 
} 
} 
for(i=0;i<this.o.length;i++){ 
if(this._type[i].sta==-1){ 
break; 
} 
} 
o.style.position='absolute'; 
this.o[i]=o; 
this._type[i]={l:o.offsetLeft,t:o.offsetTop,s:0,nt:0,sta:1}; 
return i; 
}, 
p:function(o){ 
this.ini(o); 
var _doc = (document.compatMode != "BackCompat") ? document.documentElement : document.body; 
var sctop= document.documentElement.scrollTop||document.body.scrollTop; 
fly_top=sctop+_doc.clientHeight 
this.bot=fly_top-30; 
setTimeout("paowuxian.dos("+i+")",20); 
}, 
dos:function(i){ 
if(this._type[i].nt>this.bot){ 
if(this._type[i].sta==1){ 
document.body.removeChild(this.o[i]); 
this._type.sta=-1; 
} 
}else{ 
this._type[i].l=this._type[i].l+3; 
this._type[i].s++; 
this._type[i].nt=this._type[i].t-5*this._type[i].s+0.5*1*this._type[i].s*this._type[i].s; 
this.o[i].style.top=this._type[i].nt+'px'; 
this.o[i].style.left=this._type[i].l+'px'; 
setTimeout("paowuxian.dos("+i+")",20); 
} 
} 
}; 
</script> 
</body> 
</html>

我是江奇
Javascript 相关文章推荐
基于jquery的获取浏览器窗口大小的代码
Mar 28 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
Sep 26 Javascript
在Node.js中实现文件复制的方法和实例
Jun 05 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
Aug 07 Javascript
延时加载JavaScript代码提高速度
Dec 27 Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 Javascript
Angular2学习笔记——详解NgModule模块
Dec 02 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
Dec 07 Javascript
Less 安装及基本用法
May 05 Javascript
vue 组件的封装之基于axios的ajax请求方法
Aug 11 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
Nov 01 jQuery
vue postcss-px2rem 自适应布局
May 15 Vue.js
jQuery.buildFragment使用方法及思路分析
Jan 07 #Javascript
js新闻滚动 js如何实现新闻滚动效果
Jan 07 #Javascript
YUI Compressor压缩JavaScript原理及微优化
Jan 07 #Javascript
onclick与listeners的执行先后问题详细解剖
Jan 07 #Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
Jan 07 #Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 #Javascript
jQuery插件开发基础简单介绍
Jan 07 #Javascript
You might like
PHP的栏目导航程序
2006/10/09 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
php语法检查的方法总结
2019/01/21 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
Python logging模块学习笔记
2014/05/24 Python
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
python如何实现int函数的方法示例
2018/02/19 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
python代码编写计算器小程序
2020/03/30 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
软件工程师岗位职责
2013/11/16 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
安全演讲稿开场白
2014/08/25 职场文书
办公用房租赁协议书
2014/11/29 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
create-react-app开发常用配置教程
2022/06/25 Javascript