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 相关文章推荐
学习ExtJS TextField常用方法
Oct 07 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
Jan 22 Javascript
使用jquery 简单实现下拉菜单
Jan 14 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
Sep 24 Javascript
基于JavaScript实现图片剪切效果
Mar 07 Javascript
JavaScript转换数据库DateTime字段类型方法
Jun 27 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
element-ui 表格数据时间格式化的方法
Aug 24 Javascript
laydate只显示时分 不显示秒的功能实现方法
Sep 28 Javascript
关于引入vue.js 文件的知识点总结
Jan 28 Javascript
微信小程序利用button控制条件标签的变量问题
Mar 15 Javascript
Vue+Openlayers自定义轨迹动画
Sep 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 生成文字png图片的代码
2011/04/17 PHP
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
JavaScript延迟加载
2021/03/09 Javascript
[JS]点出统计器
2020/10/11 Javascript
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
来自qq的javascript面试题
2010/07/24 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
浅谈function(函数)中的动态参数
2017/04/30 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
python列表推导式操作解析
2019/11/26 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
外贸业务员的岗位职责
2013/11/23 职场文书
家长对孩子的评语
2014/04/18 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
小学生安全教育广播稿
2014/10/20 职场文书
小学生学习保证书
2015/02/26 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js