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 相关文章推荐
将jQuery应用于login页面的问题及解决
Oct 17 Javascript
jquery高效反选具体实现
May 05 Javascript
使用js实现一个可编辑的select下拉列表
Feb 20 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
Aug 06 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
AJAX和jQuery动态加载数据的实现方法
Dec 05 Javascript
javascript 中的继承实例详解
May 05 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 Javascript
JS计算距当前时间的时间差实例
Dec 29 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
Dec 20 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
Oct 24 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 中include()与require()的对比
2006/10/09 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
详解Python发送邮件实例
2016/01/10 Python
详解Python函数作用域的LEGB顺序
2016/05/14 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
2019/12/09 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
个人找工作自荐信格式
2013/09/21 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
创先争优承诺书
2015/01/20 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
电气工程师岗位职责
2015/02/12 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
教师读书活动心得体会
2016/01/14 职场文书
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技