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限制文本框只能输入数字(正则表达式)
Jul 15 Javascript
JavaScript中OnLoad几种使用方法
Dec 15 Javascript
select标签模拟/美化方法采用JS外挂式插件
Apr 01 Javascript
JavaScript验证图片类型(扩展名)的函数分享
May 05 Javascript
jQuery CSS()方法改变现有的CSS样式
Aug 20 Javascript
jQuery 遍历map()方法详解
Nov 04 Javascript
AngularJS过滤器filter用法实例分析
Nov 04 Javascript
100行代码理解和分析vue2.0响应式架构
Mar 09 Javascript
Node.JS利用PhantomJs抓取网页入门教程
May 19 Javascript
点击按钮弹出模态框的一系列操作代码实例
Mar 29 Javascript
leaflet加载geojson叠加显示功能代码
Feb 21 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
Dec 29 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的header和asp中的redirect比较
2006/10/09 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
window.location 对象所包含的属性
2014/10/10 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
vue的toast弹窗组件实例详解
2018/05/14 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
python 实现多线程下载视频的代码
2019/11/15 Python
将python安装信息加入注册表的示例
2019/11/20 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
网络工程师职业规划
2014/02/10 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
保护环境倡议书范文
2014/05/13 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电