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 相关文章推荐
javascript getElementsByName()的用法说明
Jul 31 Javascript
半角全角相互转换的js函数
Oct 16 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
Jun 18 Javascript
jquery插件推荐 jquery.cookie
Nov 09 Javascript
AngularJS基础 ng-cloak 指令简单示例
Aug 01 Javascript
JavaScrpt判断一个数是否是质数的实例代码
Jun 11 Javascript
浅析Vue自定义组件的v-model
Nov 26 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
Dec 26 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
Apr 25 Javascript
vue-自定义组件传值的实例讲解
Sep 18 Javascript
浅谈JavaScript 代码简洁之道
Jan 09 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
Apr 19 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
分享别人写的一个小型js框架
2007/08/13 Javascript
符合标准的js表单提交的代码
2007/09/13 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
AngularJS入门之动画
2016/07/27 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
python list中append()与extend()用法分享
2013/03/24 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
python队列queue模块详解
2018/04/27 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
python将list转为matrix的方法
2018/12/12 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
python命令 -u参数用法解析
2019/10/24 Python
python异常处理try except过程解析
2020/02/03 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
初中化学教学反思
2014/01/23 职场文书
青春奉献演讲稿
2014/05/08 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
授权委托书
2015/01/28 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
小学运动会开幕词
2016/03/04 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书