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
Nov 26 Javascript
syntaxhighlighter 使用方法
Jul 02 Javascript
JS在textarea光标处插入文本的小例子
Mar 22 Javascript
node.js中的fs.readlink方法使用说明
Dec 17 Javascript
详解javascript中原始数据类型Null和Undefined
Dec 17 Javascript
Angular1.x自定义指令实例详解
Mar 01 Javascript
JavaScript截屏功能的实现代码
Jul 28 Javascript
webpack学习笔记之优化缓存、合并、懒加载
Aug 24 Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 Javascript
webstorm添加*.vue文件支持
May 08 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 Javascript
vue3获取当前路由地址
Feb 18 Vue.js
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获取随机数字和字母的方法详解
2013/06/06 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python处理html转义字符的方法详解
2016/07/01 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
通过实例解析python and和or使用方法
2020/11/14 Python
python实现猜拳游戏项目
2020/11/30 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
班长竞选演讲稿
2014/04/24 职场文书
教师工作表现评语
2014/12/31 职场文书
2015年暑期见闻
2015/07/14 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP