60行js代码实现俄罗斯方块


Posted in Javascript onMarch 31, 2015

这是我之前网上看到的,很牛逼的一位大神写的,一直膜拜中

<!doctype html><html><head></head><body>
<div id="box" style="width:252px;font:25px/25px 宋体;background:#000;color:#9f9;border:#999 20px ridge;text-shadow:2px 3px 1px #0f0;"></div>
<script>
var map=eval("["+Array(23).join("0x801,")+"0xfff]");
var tatris=[[0x6600],[0x2222,0xf00],[0xc600,0x2640],[0x6c00,0x4620],[0x4460,0x2e0,0x6220,0x740],[0x2260,0xe20,0x6440,0x4700],[0x2620,0x720,0x2320,0x2700]];
var keycom={"38":"rotate(1)","40":"down()","37":"move(2,1)","39":"move(0.5,-1)"};
var dia, pos, bak, run;
function start(){
  dia=tatris[~~(Math.random()*7)];
  bak=pos={fk:[],y:0,x:4,s:~~(Math.random()*4)};
  rotate(0);
}
function over(){
  document.onkeydown=null;
  clearInterval(run);
  alert("GAME OVER");
}
function update(t){
  bak={fk:pos.fk.slice(0),y:pos.y,x:pos.x,s:pos.s};
  if(t) return;
  for(var i=0,a2=""; i<22; i++)
    a2+=map[i].toString(2).slice(1,-1)+"<br/>";
  for(var i=0,n; i<4; i++)
    if(/([^0]+)/.test(bak.fk[i].toString(2).replace(/1/g,"\u25a1")))
      a2=a2.substr(0,n=(bak.y+i+1)*15-RegExp.$_.length-4)+RegExp.$1+a2.slice(n+RegExp.$1.length);
  document.getElementById("box").innerHTML=a2.replace(/1/g,"\u25a0").replace(/0/g,"\u3000");
}
function is(){
  for(var i=0; i<4; i++)
    if((pos.fk[i]&map[pos.y+i])!=0) return pos=bak;
}
function rotate(r){
  var f=dia[pos.s=(pos.s+r)%dia.length];
  for(var i=0; i<4; i++)
    pos.fk[i]=(f>>(12-i*4)&15)<<pos.x;
  update(is());
}
function down(){
  ++pos.y;
  if(is()){
    for(var i=0; i<4 && pos.y+i<22; i++)
      if((map[pos.y+i]|=pos.fk[i])==0xfff)
        map.splice(pos.y+i,1), map.unshift(0x801);
    if(map[1]!=0x801) return over();
    start();
  }
  update();
}
function move(t,k){
  pos.x+=k;
  for(var i=0; i<4; i++)
    pos.fk[i]*=t;
  update(is());
}
document.onkeydown=function(e){
  eval(keycom[(e?e:event).keyCode]);
};
start();
run=setInterval("down()",400);
</script></body></html>

以上所述就是本文的全部内容,希望大家能够喜欢。

Javascript 相关文章推荐
Stop SQL Server
Jun 21 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 Javascript
分享一个asp.net pager分页控件
Jan 04 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
js跨域请求的5中解决方式
Jul 02 Javascript
vue 的keep-alive缓存功能的实现
Mar 22 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
Aug 22 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
Jul 05 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
Sep 28 Javascript
关于vue表单提交防双/多击的例子
Oct 31 Javascript
详细谈谈JavaScript中循环之间的差异
Aug 23 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
Mar 31 #Javascript
js实现的牛顿摆效果
Mar 31 #Javascript
JS动态显示表格上下frame的方法
Mar 31 #Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
Mar 31 #Javascript
jQuery选择器源码解读(八):addCombinator函数
Mar 31 #Javascript
JS显示表格内指定行html代码的方法
Mar 31 #Javascript
jQuery选择器源码解读(七):elementMatcher函数
Mar 31 #Javascript
You might like
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
在PHP中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
原生js和jquery分别实现横向导航菜单效果
2016/05/13 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
Django rest framework工具包简单用法示例
2018/07/20 Python
python实现随机漫步算法
2018/08/27 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
初中英语教学反思
2014/01/25 职场文书
运动会通讯稿150字
2014/02/15 职场文书
毕业评语大全
2014/05/04 职场文书
五好关工委申报材料
2014/05/31 职场文书
创先争优活动个人总结
2015/03/04 职场文书
考试后的感想
2015/08/07 职场文书
教育教学工作反思
2016/02/24 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
Python绘制散乱的点构成的图的方法
2022/04/21 Python
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android