<!doctype html><html><head><style type="text/css">
body { background:#000; font:25px/25px 宋体;}
#box { float:left;width:252px;border:#999 20px ridge;color:#9f9;text-shadow:2px 3px 1px #0f0; }
#info { float:left;color:#cfc;padding:24px; }
#next { padding:8px;width:105px;color:#9f9;text-shadow:2px 3px 1px #0f0; }
</style></head><body>
<div id="box"></div><div id="info">NEXT:<div id="next"></div><div id="text"></div></div>
<script type="text/javascript">
var map=eval_r("["+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 char={x:"\u3000",s:"\u25a0",t:"\u25a1"};
var keycom={"38":"rotate(1)","40":"down()","37":"move(2,1)","39":"move(0.5,-1)","32":"0;pause=!pause"};
var dia, pos, bak, run, next, pause=false, info={speed:1,lines:0,score:0};
function start(){
 dia=next.d;
 bak=pos={fk:[],y:0,x:4,s:next.s};
 nextdia();
 document.getElementByIdx_x("next").innerHTML=(next.d[next.s%next.d.length]|0x10000).toString(2).slice(-16).replace(/..../g,"$&<br/>").replace(/1/g,char.t).replace(/0/g,char.x);
 document.getElementByIdx_x("text").innerHTML="SCORE:"+info.score+"<br/><br/>LINES:"+info.lines+"<br/><br/>SPEED:"+info.speed;
 rotate(0);
 run=setInterval("pause||down()",~~(Math.pow(1.3,12-info.speed)*30+20));
}
function over(){
 document.οnkeydοwn=null;
 alert("GAME OVER");
}
function nextdia(){
 next={d:tatris[~~(Math.random()*7)],s:~~(Math.random()*4)};
}
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,char.t)))
   a2=a2.substr(0,n=(bak.y+i+1)*15-RegExp.$_.length-4)+RegExp.$1+a2.slice(n+RegExp.$1.length);
 document.getElementByIdx_x("box").innerHTML=a2.replace(/1/g,char.s).replace(/0/g,char.x);
}
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, r=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);
    ++info.lines ==0 && info.speed++, r++;
   }
  clearInterval(run);
  if(map[1]!=0x801) return over();
  info.score+=~~(Math.pow(r,1.5)*10)+2;
  start();
 }
 update();
}
function move(t,k){
 pos.x+=k;
 for(var i=0; i<4; i++)
  pos.fk[i]*=t;
 update(is());
}
document.οnkeydοwn=function(e){
 eval_r("pause||"+keycom[(e?e:event).keyCode]);
};
nextdia();
start();
</script></body></html>

转载于:https://www.cnblogs.com/liuzhuqing/archive/2013/05/02/7480539.html

60行代码俄罗斯方块相关推荐

  1. 直击面试现场:神级程序员仅100秒,60行代码写出俄罗斯方块,成为全公司焦点!...

    小编我今天逛论坛看到一位HR帖子直播公司面试情况,该公司是做棋牌APP的,现在正在招聘前端工程师和运营人员,HR直播的是前端这块的,有写游戏的也有做网站项目的,写特效的都有很多,但是这位HR却看上了一 ...

  2. python居然能语音控制电脑壁纸切换,只需60行代码

    前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 家在日常的电脑使用中,都会有自己喜爱类型的桌面 单纯的桌面有时候会让人觉得单调 今天,就由我带领大家只用60行代码打造一款语音壁纸切换器程序, 让大家能够 ...

  3. 菜鸟最爱,60行代码打造一款音乐播放器!

    点上方"菜鸟学Python",选择"星标" 第467篇原创干货,第一时间送达 大家好,我是菜鸟哥! 对于小伙伴们来说,在日常的学习和工作中,很多人都喜欢边听音乐 ...

  4. GameBuilder开发游戏应用系列之60行代码实现FlappyBird

    在线演示:http://osgames.duapp.com/apprun.html?appid=osgames1-911422256817006 在线编辑:http://osgames.duapp.c ...

  5. Win10下 60行代码实现多线程PDF转Word 运行错误摘要

    代码下载:https://github.com/python-fan/pdf2word 资料整合来源: https://www.imooc.com/qadetail/181211 https://zh ...

  6. 60行代码出炫酷效果之 python语音控制电脑壁纸切换

    前言 大家早好.午好.晚好吖 ❤ ~欢迎光临本文章 电脑大家有吧!手大家有吧!今天!! 就由我带领大家用区区60行代码打造一款语音壁纸切换器程序!!! 单纯的桌面有时候会让人觉得单调,那么~ 让大家能 ...

  7. python房子代码_基于python的链家小区房价爬取——仅需60行代码!

    简介 首先打开相关网页(北京链家小区信息). 注意本博客的代码适用于爬取某个城市的小区二手房房价信息. 如果需要爬取其他信息,可修改代码,链家的数据获取的基本逻辑都差不多. 效果展示 因为只需要60行 ...

  8. 短短60行代码搞定鸿蒙“二维码扫描”功能!

    开发者(KaiFaX) 面向全栈工程师的开发者专注于前端.Java/Python/Go/PHP的技术社区 可以实现的效果就是打开摄像头扫描一张二维码图片然后显示二维码里面的内容,看个视频一睹为快吧(界 ...

  9. python爬取南京市房价_基于python的链家小区房价爬取——仅需60行代码

    简介 首先打开相关网页(北京链家小区信息). 注意本博客的代码适用于爬取某个城市的小区二手房房价信息. 如果需要爬取其他信息,可修改代码,链家的数据获取的基本逻辑都差不多. 效果展示 因为只需要60行 ...

最新文章

  1. 自动驾驶开发云平台业务分析
  2. 机器学习(1)机器学习基础 鸢尾花数据集
  3. P2207 Photo
  4. 字符数组的初始化与赋值
  5. Wind的实时行情API使用
  6. matlab波特率,波特率定义及波特率计算公式小结
  7. r73750h和i79750h哪个好
  8. 帝国栏目导航点击显示不同样式的实现
  9. StarRocks 社区一周年:极速统一,感谢遇见!
  10. ES6—46:class中getter和setter的设置方法
  11. 实现电脑文件自动同步到FTP
  12. zzzfun网站连接不上服务器,ZzzFun
  13. IPv4 Type of Service服务类型(TOS)字段
  14. 【Java】JVM内存回收
  15. gsoc 任务_我在GSoC'20中进行编码的第三周
  16. 演讲比赛流程管理---C++
  17. 服务器虚拟化有哪些方面,服务器虚拟化技术有哪些
  18. 四级英语黄金词组及常用15个句型
  19. 求chen混沌系统仿真程序
  20. unity3d_颜色转换器

热门文章

  1. 怎么找出消耗 CPU 的罪魁祸首?!
  2. 分库、分表、分区的区别,傻傻分不清?
  3. 我的天!史上最烂的项目:苦撑12年,600多万行代码...
  4. 分库分表就能无限扩容吗,解释得太好了
  5. Spring Cloud 微服务架构的五脏六腑!
  6. Go语言入门——dep入门
  7. UNIX:描述符和文件结构
  8. map:根据 value 找 key ?
  9. 图的遍历:BFS和DFS
  10. oracle standby同步,ORACLE 利用rman增量备份同步standby库