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 相关文章推荐
用倒置滤镜把div倒置,再把table倒置。
Jul 31 Javascript
Firefox div高度自适应
Apr 28 Javascript
jQuery中append()方法用法实例
Dec 25 Javascript
使用three.js 画渐变的直线
Jun 05 Javascript
喜大普奔!jQuery发布 3.0 最终版
Jun 12 Javascript
Bootstrap3 Grid system原理及应用详解
Sep 30 Javascript
js指定步长实现单方向匀速运动
Jul 17 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
Jan 08 Javascript
JavaScript生成指定范围的时间列表
Mar 19 Javascript
webpack4 CSS Tree Shaking的使用
Sep 03 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
Mar 06 Javascript
Vue实现点击导航栏当前标签后变色功能
Aug 19 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
mysql 字段类型说明
2007/04/27 PHP
php模板原理讲解
2013/11/13 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
Javascript继承机制详解
2017/05/30 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
python写入中英文字符串到文件的方法
2015/05/06 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
python列表使用实现名字管理系统
2019/01/30 Python
python输入多行字符串的方法总结
2019/07/02 Python
详解用python生成随机数的几种方法
2019/08/04 Python
Python实现名片管理系统
2020/02/14 Python
美国在线宠物商店:Chewy
2019/01/12 全球购物
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
英国森林假期:Forest Holidays
2021/01/01 全球购物
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
工程造价管理专业大专生求职信
2013/10/06 职场文书
服务承诺书格式
2014/05/21 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
硕士学位论文评语
2014/12/31 职场文书
《鲸》教学反思
2016/02/23 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
python中opencv实现图片文本倾斜校正
2021/06/11 Python
Python语言规范之Pylint的详细用法
2021/06/24 Python
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android