js实现俄罗斯方块小游戏分享

 更新时间:2014年01月31日 01:15:28   作者:  
这篇文章主要介绍了js实现俄罗斯方块小游戏分享,,需要的朋友可以参考下
复制代码 代码如下:

<!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("["+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.getElementById("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.getElementById("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.onkeydown=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.getElementById("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%20==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.onkeydown=function(e){
    eval("pause||"+keycom[(e?e:event).keyCode]);
};
nextdia();
start();
</script></body></html>

相关文章

  • layui+jquery支持IE8的表格分页方法

    layui+jquery支持IE8的表格分页方法

    今天小编就为大家分享一篇layui+jquery支持IE8的表格分页方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • JavaScript获取URL参数的方法分享

    JavaScript获取URL参数的方法分享

    这篇文章主要介绍了JavaScript获取URL参数的方法分享,主要包括字符串 split 方法、 URLSearchParams 方法、正则匹配方法等,具有一定的参考价值需要的小伙伴可以参考一下
    2022-04-04
  • 微信小程序uploadFile接口实现文件上传

    微信小程序uploadFile接口实现文件上传

    这篇文章主要介绍了微信小程序uploadFile接口实现文件上传流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • JavaScript 给汉字排序实例代码

    JavaScript 给汉字排序实例代码

    数组的 sort 方法默认字符的编码排序,有时候要给一组汉字排序,默认的方法就不适用了。
    2008-06-06
  • JS实现带导航城市列表以及输入搜索功能

    JS实现带导航城市列表以及输入搜索功能

    这篇文章主要为大家详细介绍了JS实现带导航城市列表以及输入搜索功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • JavaScript中的Function函数

    JavaScript中的Function函数

    函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块,接下来跟着小编一起来学习javascript中的function函数,小伙伴们快来一起学习吧
    2015-08-08
  • js实现表格单列按字母排序

    js实现表格单列按字母排序

    这篇文章主要为大家详细介绍了js实现表格单列按字母排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • JS给超链接加确认对话框的方法

    JS给超链接加确认对话框的方法

    这篇文章主要介绍了JS给超链接加确认对话框的方法,涉及javascript操作对话框的技巧,需要的朋友可以参考下
    2015-02-02
  • js实现动态加载数据瀑布流

    js实现动态加载数据瀑布流

    这篇文章主要为大家详细介绍了js实现动态加载数据瀑布流,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 微信小程序开发之改变data中数组或对象的某一属性值

    微信小程序开发之改变data中数组或对象的某一属性值

    本文通过案例给大家分析了微信小程序开发之改变data中数组或对象的某一属性值,本文通过实例代码相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07

最新评论