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得到网页中所有的div的id
Oct 19 Javascript
jqeury eval将字符串转换json的方法
Jan 20 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
May 07 Javascript
jquery中map函数与each函数的区别实例介绍
Jun 23 Javascript
javascript如何实现暂停功能
Nov 06 Javascript
JavaScript的Number对象的toString()方法
Dec 18 Javascript
jQuery ajax时间差导致的变量赋值问题分析
Jan 22 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
Mar 06 Javascript
JavaScript事件处理的方式(三种)
Apr 26 Javascript
详解PHP后期静态绑定分析与应用
Mar 21 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
Nov 14 Javascript
js实现拖拽元素选择和删除
Aug 25 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
详解:――如何将图片储存在数据库里
2006/12/05 PHP
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
PHP防注入安全代码
2008/04/09 PHP
使用php清除bom示例
2014/03/03 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
js DOM 元素ID就是全局变量
2012/09/20 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
node.js通过url读取文件
2020/10/16 Javascript
使用python加密自己的密码
2015/08/04 Python
Python表示矩阵的方法分析
2017/05/26 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
Python实现学校管理系统
2018/01/11 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
Python 在函数上添加包装器
2020/07/28 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
员工工作能力评语
2014/12/31 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
小学生读书笔记
2015/07/01 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书