zoukankan      html  css  js  c++  java
  • 60行代码:Javascript 写的俄罗斯方块游戏

    哈哈这个实在是有点意思

    备受打击当初用java各种类写的都要几百行啦

    先看效果图:

    eluosi-javascript-01

     

    游戏结束图:

    eluosi-javascript-02

     

    javascript实现源码:

    [javascript] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    1. <!doctype html>  
    2. <html><head><title>俄罗斯方块</title>  
    3. <meta name="Description" content="俄罗斯方块Javascript实现">  
    4. <meta name="Keywords" content="俄罗斯方块,Javascript,实现,短小精悍,游戏,ithomer,ithomer.net">  
    5. </head><body>  
    6. <div id="box" style="margin: 20px auto; text-align:center; 252px;font:25px/25px 宋体;background:#000;color:#9f9;border:#999 20px ridge;text-shadow:2px 3px 1px #0f0;"></div>  
    7. <div id="footer" style="margin-top: 200px auto; text-align:center; font-size: 16px;">© 2009 - 2014 All Rights by <a href="http://blog.ithomer.net">ithomer.net</a></div>  
    8. <script>  
    9. var domain="www.zuidaima.com";  
    10. var author="zuidaima";  
    11. var map=eval("["+Array(23).join("0x801,")+"0xfff]");  
    12. var tatris=[[0x6600],[0x2222,0xf00],[0xc600,0x2640],[0x6c00,0x4620],[0x4460,0x2e0,0x6220,0x740],[0x2260,0xe20,0x6440,0x4700],[0x2620,0x720,0x2320,0x2700]];  
    13. var keycom={"38":"rotate(1)","40":"down()","37":"move(2,1)","39":"move(0.5,-1)"};  
    14. var dia, pos, bak, run;  
    15. function start(){  
    16.     dia=tatris[~~(Math.random()*7)];  
    17.     bak=pos={fk:[],y:0,x:4,s:~~(Math.random()*4)};  
    18.     rotate(0);  
    19. }  
    20. function over(){  
    21.     document.onkeydown=null;  
    22.     clearInterval(run);  
    23.     alert("GAME OVER");  
    24. }  
    25. function update(t){  
    26.     bak={fk:pos.fk.slice(0),y:pos.y,x:pos.x,s:pos.s};  
    27.     if(t) return;  
    28.     for(var i=0,a2=""; i<22; i++)  
    29.         a2+=map[i].toString(2).slice(1,-1)+"<br/>";  
    30.     for(var i=0,n; i<4; i++)  
    31.         if(/([^0]+)/.test(bak.fk[i].toString(2).replace(/1/g,"u25a1")))  
    32.             a2=a2.substr(0,n=(bak.y+i+1)*15-RegExp.$_.length-4)+RegExp.$1+a2.slice(n+RegExp.$1.length);  
    33.     document.getElementById("box").innerHTML=a2.replace(/1/g,"u25a0").replace(/0/g,"u3000");  
    34. }  
    35. function is(){  
    36.     for(var i=0; i<4; i++)  
    37.         if((pos.fk[i]&map[pos.y+i])!=0) return pos=bak;  
    38. }  
    39. function rotate(r){  
    40.     var f=dia[pos.s=(pos.s+r)%dia.length];  
    41.     for(var i=0; i<4; i++)  
    42.         pos.fk[i]=(f>>(12-i*4)&15)<<pos.x;  
    43.     update(is());  
    44. }  
    45. function down(){  
    46.     ++pos.y;  
    47.     if(is()){  
    48.         for(var i=0; i<4 && pos.y+i<22; i++)  
    49.             if((map[pos.y+i]|=pos.fk[i])==0xfff)  
    50.                 map.splice(pos.y+i,1), map.unshift(0x801);  
    51.         if(map[1]!=0x801) return over();  
    52.         start();  
    53.     }  
    54.     update();  
    55. }  
    56. function move(t,k){  
    57.     pos.x+=k;  
    58.     for(var i=0; i<4; i++)  
    59.         pos.fk[i]*=t;  
    60.     update(is());  
    61. }  
    62. document.onkeydown=function(e){  
    63.     eval(keycom[(e?e:event).keyCode]);  
    64. };  
    65. start();  
    66. run=setInterval("down()",400);  
    67. </script></body></html>  


    在线演示


    原文: http://blog.ithomer.net/2014/05/60-lines-of-code-the-small-javascript-written-in-russia-block-game/


    版权声明:本文为博主原创文章,未经博主允许不得转载。

    today lazy . tomorrow die .
  • 相关阅读:
    vue2 在methods 中无法获取this对象
    mysql-set
    laravel 模板
    laravel save() 返回 null
    如何设置电脑允许远程访问并修改电脑用户密码?
    laravel报错:Unable to detect application namespace.
    b站操作系统2程序的顺序执行与并发执行
    b站计算机网络谢希仁4物理层
    b站计算机网络谢希仁2性能
    b站J数据库13之封装通用的增删改查方法
  • 原文地址:https://www.cnblogs.com/france/p/4808754.html
Copyright © 2011-2022 走看看