`
mywebcode
  • 浏览: 1015206 次
文章分类
社区版块
存档分类
最新评论

JS写怀旧小游戏系列(一)俄罗斯方块

 
阅读更多
这年头这么多用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>


分享到:
评论

相关推荐

    俄罗斯方块-微信小游戏-项目源码

    这是一个微信小游戏项目源码,是经典怀旧的俄罗斯方块游戏,适合新手入门参考学习,下面还有↓ 使用微信开发工具选择小游戏导入即可打开,可编译运行,请放心下载, 相关指导教程请看作者发表的以下文章: ① 微信...

    游戏开发-基于Python开发的怀旧小游戏之俄罗斯方块.zip

    游戏开发_基于Python开发的怀旧小游戏之俄罗斯方块

    俄罗斯方块VC经典小游戏

    《俄罗斯方块VC经典小游戏》是一款深受玩家喜爱的休闲益智游戏,它的设计基于经典的俄罗斯方块玩法,结合了Visual C++(VC)编程技术,为用户提供了独特的游戏体验。这款小游戏不仅保留了原版俄罗斯方块的核心玩法,...

    俄罗斯方块游戏-微信小程序-项目源码

    这是一个微信小程序项目源码,是经典怀旧的俄罗斯方块游戏,适合新手入门参考学习。 相关指导教程请看作者发表的文章https://blog.csdn.net/zs1028/article/details/128383343

    Dos俄罗斯方块游戏

    首先,由于现代操作系统已经高度图形化,DOS系统的游戏在当前环境中变得罕见,这使得这款基于DOS的俄罗斯方块游戏具有较高的怀旧价值。其次,它表明这款游戏是专为DOS环境设计的,可能无法在现代操作系统上直接运行...

    俄罗斯方块 嵌入式版

    在本项目中,嵌入式系统被用来运行和展示俄罗斯方块游戏,这意味着开发者需要考虑如何高效地利用有限的硬件资源,如内存和处理器性能,同时确保游戏的流畅性和响应速度。 5.1_color_lcd 文件名暗示了游戏可能使用了...

    五彩俄罗斯方块.zip

    《五彩俄罗斯方块》是一款集经典与创新于一体的俄罗斯方块游戏合集,它包含了三种不同的玩法模式,为玩家提供了多样化的游戏体验。这款游戏的独特之处在于其支持在线更新,这意味着玩家可以持续获得新的挑战和改进,...

    俄罗斯方块

    经典游戏俄罗斯方块,附有Java源码,需求分析,说明文档.

    俄罗斯方块游戏-uniapp小程序-项目源码

    这是一个uniapp小程序项目源码,uniapp项目支持发布跨平台应用小程序,是经典怀旧的俄罗斯方块游戏,适合新手入门参考学习。 相关指导教程请看作者发表的文章...

    超小的俄罗斯方块

    《超小的俄罗斯方块》是一款充满怀旧情怀的小游戏,它将经典的俄罗斯方块玩法浓缩在一个小巧的程序中,提供了便捷的娱乐体验。这款小游戏虽然体积不大,但其核心玩法与传统俄罗斯方块无异,依然能带给玩家丰富的乐趣...

    VC#2010源码_俄罗斯方块游戏

    【VC#2010源码_俄罗斯方块游戏】是一个基于C#编程语言的项目,使用了Visual Studio 2010 Express开发环境。这个项目是对经典的DOS版俄罗斯方块游戏的一个现代化改编,旨在保留原始游戏的核心玩法,同时进行了一些...

    双人俄罗斯方块

    【双人俄罗斯方块】是一款基于Visual Basic(VB)编程语言开发的小型游戏,它将经典的游戏模式与双人对战结合,旨在提供一个轻松...无论你是怀旧的游戏玩家,还是对编程感兴趣的初学者,"双人俄罗斯方块"都值得你一试。

    俄晚罗方块(Symbian)

    【标题】"俄晚罗方块(Symbian)"所指的是一款基于Symbian操作系统的游戏,可能是一款类似于俄罗斯方块的经典游戏。Symbian操作系统曾是诺基亚等手机制造商广泛使用的移动平台,尤其在智能手机初期阶段非常流行。这...

    俄罗斯方块华丽效果版,tc2.0下编译通过

    本项目“俄罗斯方块华丽效果版,tc2.0下编译通过”就是这样一个杰出的示例,它将传统的俄罗斯方块游戏与现代编程技巧相结合,创造出令人眼前一亮的视觉体验。 TC(Turbo C)是DOS时代流行的C语言编译器,以其小巧...

    王中王掌上游戏机网页源码,怀旧小游戏.txt

    王中王掌上游戏机网页源码,怀旧小游戏

    Java经典怀旧小霸王网页游戏机源码增强版

    Java经典怀旧小霸王网页游戏机源码增强版

    PPC 58个小游戏

    不过,可以想象,在那个时代,PPC游戏往往依赖于设备的CPU性能和触摸屏交互,因此,游戏可能设计得相对简单,注重策略或反应速度,例如经典的贪吃蛇、俄罗斯方块、井字游戏等。此外,这些游戏可能不包含复杂图形和...

    DOS版五大美女俄罗斯方

    本项目所提到的“DOS版五大美女俄罗斯方块”就是这样一个独特的版本,它将传统的俄罗斯方块游戏与当时的流行元素相结合,为玩家带来了一种全新的体验。 【描述】中的信息表明,这个游戏是开发者在DOS环境下利用自研...

    推箱子-微信小游戏-项目源码

    这是一个微信小游戏项目源码,是经典怀旧的推箱子游戏,共100关卡,以下还有↓ 请用微信开发者工具选小游戏导入即可,可正常编译运行,请放心下载, 类似解锁关卡,一种益智解密的游戏,适合新手入门参考学习,能学...

Global site tag (gtag.js) - Google Analytics