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 相关文章推荐
js setattribute批量设置css样式
Nov 26 Javascript
jquery关于图形报表的运用实现代码
Jan 06 Javascript
JQuery中$之选择器用法介绍
Apr 05 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 Javascript
ajax在兼容模式下失效的快速解决方法
Mar 22 Javascript
JS组件Bootstrap Select2使用方法解析
May 30 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
Mar 01 Javascript
mpvue小程序循环动画开启暂停的实现方法
May 15 Javascript
详解vue为什么要求组件模板只能有一个根元素
Jul 22 Javascript
解决一个微信号同时支持多个环境网页授权问题
Aug 07 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
Jul 17 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
10个实用的PHP代码片段
2011/09/02 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
如何开启linux的ssh服务
2013/06/03 面试题
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
java程序员面试交流
2012/11/29 面试题
留学生如何写好自荐信
2013/12/27 职场文书
无传销社区工作方案
2014/05/13 职场文书
运动会加油口号
2014/06/07 职场文书
2015年元旦标语大全
2014/12/09 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
卡特教练观后感
2015/06/08 职场文书
详解Python内置模块Collections
2022/03/22 Python