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 相关文章推荐
跨域表单提交状态的变相判断代码
Nov 12 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 Javascript
js给onclick事件赋值,动态传参数实例解说
Mar 28 Javascript
js中同步与异步处理的方法和区别总结
Dec 25 Javascript
JQuery判断HTML元素是否存在的两种解决方法
Dec 26 Javascript
jQuery中:only-child选择器用法实例
Jan 03 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
Sep 27 Javascript
利用React-router+Webpack快速构建react程序
Oct 27 Javascript
js实现前端图片上传即时预览功能
Aug 02 Javascript
vue.js 微信支付前端代码分享
Feb 10 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
Jul 24 Javascript
JS画布动态实现黑客帝国背景效果
Nov 08 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大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
Drupal简体中文语言包安装教程
2014/09/27 PHP
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
JS验证字符串功能
2017/02/22 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
python求前n个阶乘的和实例
2020/04/02 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
前台接待的工作职责
2013/11/21 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
建筑工地文明标语
2014/10/09 职场文书
先进党组织事迹材料
2014/12/26 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
nginx lua 操作 mysql
2022/05/15 Servers