亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

javascript版2048小游戲

2024-05-06 16:17:10
字體:
來源:轉載
供稿:網友
本文給大家分享的是使用javascript制作的2048小游戲的代碼,僅僅是想鍛煉下自己的編程代碼風格,盡量做的規范些,小伙伴們多多給些建議。
 

沒有技術含量,只是用來練習代碼邏輯的。為了代碼結構清晰,我把邏輯控制部分寫在全局變量里,用戶界面操作封裝在UI對象里,大概就這樣了。僅供參考。工作時候,我的編碼風格有人吐槽太亂了,所以我想試著寫一個不是那么亂的東西出來。。

 

復制代碼代碼如下:

<HTML>
<head>
<title>2048 DEMO</title>
<meta charset='utf-8' />
<!--
 708616 javascript present
 http://treemonster.sinaapp.com
 1696292264@qq.com
-->
<head>
<div id='box'>
MSIE is SB
<script>
//全局方法用于邏輯控制
function x4(n){
    var t=[];
    while(n-->0)t.push([]);
    return t;
}
function xx(f){
    for(var i=0;i<UI.nw;i++){
        for(var j=0;j<UI.nw;j++){
            f(i,j);
        }
    }
}
function make(n){
    return {
        number:n,
        moveStep:0,
        newNumber:n,
        needKill:0
    };
}
function tran(_arr,md){
    var undo=x4(UI.nw);
    var out=x4(UI.nw);
    var ud=UI.undo;
    if(ud.push(undo)>32)ud.shift();
    for(var i=0;i<UI.nw;i++){
        var t=[],o=md%2^1;
        for(var k=0;k<UI.nw;k++){
            undo[i][k]=_arr[i][k].number;
            if(md<3)t.push(_arr[i][k]);else t.push(_arr[k][i]);
        }
        o && t.reverse();
        t=trans(t);
        if(o)t[0].reverse(),t[1].reverse();
        for(var j=0;j<UI.nw;j++){
            var x=i,y=j;
            if(md>2)x=j,y=i;
            _arr[x][y]=t[0][j];
            out[x][y]=t[1][j];
        }
    }
    return [_arr,out];
}
function trans(arr){
    for(var i=0,m=0;i<UI.nw;i++){
        if(arr[i].number===0)m++;else arr[i].moveStep+=m;
        var _i=arr[i];
        for(var j=i-1;j>=0;j--){
            if(!arr[j].number)continue;
            if(arr[j].needKill)break;
            if(arr[j].number==_i.number){
                arr[j].needKill=1;
                arr[i].newNumber*=2;
                arr[i].moveStep++;
                m++;
            }
        }
    }
    var out=[];
    for(var i=UI.nw;i--;){
        !arr[i].needKill && arr[i].number && out.unshift(arr[i].newNumber);
    }
    while(out.length<UI.nw)out.push(0);
    return [arr,out];
}
//界面操作開始,界面操作的參數通過全局方法來獲得
function $(a){return document.getElementById(a);}
UI={};
UI.update=function(d){
    if(UI.locked)return;
    var map=this.map;
    var n=this.times;
    UI.locked=1;//未完成動畫之前阻止用戶動作
    var out=tran(map,d)[1];
    var _n=0,_begin=x4(UI.nw);
    (function(){
        if(_n>n){
            var _q=0;
            xx(function(i,j){
                _q=_q||this.map[i][j].moveStep;
                var o=$('i'+i+'j'+j);
                o.innerHTML=out[i][j]||'';
                o.className='x r'+o.innerText;
                this.map[i][j]=make(out[i][j]);
                o=o.style;
                o.display='block';
                o.left=UI.size*j+"px";
                o.top=UI.size*i+"px";
            });
            return _q ? UI.addNew():(UI.locked=0);
        }
        xx(function(i,j){
            var o=$('i'+i+'j'+j),t,o1=o.style,s=d<3?'left':'top';
            if(t=map[i][j][_n==n?'newNumber':'number'])o.innerHTML=t;else o1.display='none';
            if(_begin[i][j]===undefined)_begin[i][j]=parseInt(o1[s]);
            o1[s]=(_begin[i][j]+(map[i][j].moveStep*100/n*_n)*Math.pow(-1,d))+'px';
        });
        _n++;
        setTimeout(arguments.callee,10);
    })();
}
UI.undo=[];
UI.addNew=function(_q){
    UI.locked=1;
    var r=[];
    xx(function(i,j){
        this.map[i][j].number || r.push([i,j]);
    });
    if(!r.length)return UI.locked=0;
    var q=new Date%r.length;q=r[q];
    var b=$('i'+q[0]+'j'+q[1]);
    var m=this.map[q[0]][q[1]];
    b.innerHTML=m.number=m.newNumber=2<<new Date%2;
    b.className='x r'+b.innerText;
    var o=0,q=5;
    (function(){
        if(o<100)setTimeout(arguments.callee,10);
        b.style.opacity=Math.min(o+=q++,100)/100;
    })();
    UI.locked=0;//解除鎖定
};
//創建
UI.init=function(nw,maxUndo,size,times){
    UI.times=times||8;//動畫過度次數
    UI.nw=nw||5;//方陣邊長
    UI.map=map=x4(UI.nw);//創建數字塊對象
    UI.size=size||100;//單元格寬度
    UI.maxUndo=maxUndo||5;//最大撤銷步數
    $('box').innerHTML='';
    xx(function(i,j){
        map[i][j]=make(0);
        document.write("<div class='x' id='i"+i+"j"+j+"'/
         style='left:"+(UI.size*j)+"px;top:"+(UI.size*i)+"px;'></div>/
         <div class='y' /
         style='left:"+(UI.size*j)+"px;top:"+(UI.size*i)+"px;'></div>");
    });
    UI.addNew();
    UI.addNew();
};
UI.init(6,3,100,20);
//自動播放,僅用來做演示的。沒有做事件綁定
setInterval(function(){UI.update([1,2,3,4][Math.random()*4|0]);},200);
</script>
</div>
<style>
#box{position:absolute;left:50%;top:50%;margin-left:-300px;margin-top:-300px;}
.x,.y{background:#ddd;position:absolute;width:80px;height:80px;font-size:30px;text-align:center;line-height:80px;font-weight:700;font-family:arial;z-index:1;}
.x{z-index:30;}
.r2{background: #eee4da;}
.r4{background: #ede0c8;}
.r8{color: #f9f6f2;background: #f2b179;}
.r16{ color: #f9f6f2;
    background: #f59563; }
.r32{color: #f9f6f2;
    background: #f67c5f; }
.r64{ color: #f9f6f2;
    background: #f65e3b; }
.r128{    color: #f9f6f2;
    background: #edcf72;}
.r256{    color: #f9f6f2;
    background: #edcc61;}
.r512{   color: #f9f6f2;
    background: #edc850;}
.r1024{ color: #f9f6f2;
    background: #edc53f;}
.r2048{    color: #f9f6f2;
    background: #edc22e;}
</style>

 

以上就是本文所述的全部內容了,希望大家能夠喜歡。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国内亚洲在观看18黄| 国产成人一区二区| 日韩中文字幕在线视频播放| 亚洲成人aaa| 亚洲成人动漫在线播放| 日韩av综合中文字幕| 久久久久久久久久久网站| 亚洲精品suv精品一区二区| 欧美日本精品在线| 日韩亚洲在线观看| 亚洲国产精彩中文乱码av| 亚洲欧美中文日韩v在线观看| 夜夜嗨av一区二区三区免费区| 黑人狂躁日本妞一区二区三区| 亚洲韩国青草视频| 国产免费观看久久黄| 奇米成人av国产一区二区三区| 亚洲午夜小视频| 日韩视频在线免费| 欧美成人免费观看| 国产精品久久久久久久美男| 亚洲色图欧美制服丝袜另类第一页| 亚洲精品按摩视频| 欧美肥老妇视频| 高跟丝袜一区二区三区| 色综合色综合久久综合频道88| 国产视频综合在线| 国产精品扒开腿做爽爽爽视频| 91国产美女在线观看| 国产精品美女久久| 亚洲国产精品免费| 欧美又大粗又爽又黄大片视频| 狠狠久久亚洲欧美专区| 国内外成人免费激情在线视频| 亚洲三级av在线| 国产不卡av在线免费观看| 国产成人自拍视频在线观看| 精品国产欧美一区二区三区成人| 国产欧美精品日韩| 亚洲欧美一区二区三区久久| 亚洲男人天堂网| 久久久久国产精品www| 欧美一级淫片播放口| 日韩在线免费av| 日本高清视频精品| 欧美肥老妇视频| 亚洲va欧美va国产综合久久| 人体精品一二三区| 69久久夜色精品国产69乱青草| 国产欧美日韩免费| 欧美在线视频a| 欧美性生活大片免费观看网址| 欧美最顶级丰满的aⅴ艳星| 久久精品夜夜夜夜夜久久| 欧美激情影音先锋| www.日本久久久久com.| 欧美性xxxx极品高清hd直播| 亚洲成人av片| 成人精品久久av网站| 欧美激情一区二区三区久久久| 日韩欧美在线播放| 日韩美女视频中文字幕| 国产精品久久久久久久久久久久| 中文字幕在线日韩| 欧美亚洲国产视频| 中文字幕无线精品亚洲乱码一区| 成人免费观看网址| 91精品国产自产91精品| 久久久久久久久久久人体| 国产日韩亚洲欧美| 国产欧美韩国高清| 亚洲成人精品视频在线观看| 91天堂在线视频| 欧美国产日韩视频| 亚洲毛片一区二区| 国产成人av网址| 亚洲国产精品va在线看黑人| 欧美日韩午夜剧场| 日韩国产在线看| 国产精品一区久久| 国产精品第100页| 国产91色在线|免| 欧美日本在线视频中文字字幕| 成人在线一区二区| 久久777国产线看观看精品| 午夜精品久久久99热福利| 91免费欧美精品| 久久久久久亚洲精品不卡| 欧美日韩在线影院| 亚洲精品国产福利| 午夜精品久久久久久久99热| 色偷偷噜噜噜亚洲男人| 国产日韩中文字幕| 久久亚洲国产精品| 色综合亚洲精品激情狠狠| 中文字幕日本欧美| 国产精品91一区| 欧美日韩在线免费观看| 国产精品久久久久久久久影视| 97婷婷涩涩精品一区| 久久久久久午夜| 欧美高清第一页| 精品亚洲一区二区三区四区五区| 一区二区三区视频观看| 国产欧美日韩专区发布| 日韩激情av在线免费观看| 国产视频精品一区二区三区| 国产精品免费视频久久久| 日韩男女性生活视频| 久久人人97超碰精品888| 欧美在线观看www| 欧美亚洲视频在线看网址| 啊v视频在线一区二区三区| 欧美怡红院视频一区二区三区| 91中文在线观看| 在线免费看av不卡| 91人人爽人人爽人人精88v| 国产精品美女久久久免费| 精品国产自在精品国产浪潮| 精品久久久久久亚洲精品| 欧美日韩国产综合视频在线观看中文| 亚洲美女福利视频网站| 国产免费观看久久黄| 国产女人18毛片水18精品| 91精品国产九九九久久久亚洲| 亚洲精品一区av在线播放| 国内精品模特av私拍在线观看| 国语自产精品视频在线看抢先版图片| 91日韩在线播放| 久久久久www| 国产综合视频在线观看| 97超碰蝌蚪网人人做人人爽| 亚洲va欧美va国产综合剧情| 欧美精品videos另类日本| 伊人青青综合网站| 亚洲人成电影网站色www| 日韩福利视频在线观看| 中文字幕日韩av电影| 亚洲精品电影网站| 久久精品国产亚洲7777| 成人欧美一区二区三区在线| 日韩一区二区在线视频| 4k岛国日韩精品**专区| 亚洲综合视频1区| 国产香蕉一区二区三区在线视频| 日韩电影免费观看中文字幕| 亚洲福利视频网站| 亚洲午夜精品视频| 日韩电影免费在线观看| 亚洲激情在线视频| 久久九九全国免费精品观看| 亚洲视频第一页| 日韩一区二区av| 欧美成人激情视频免费观看| 亚洲伊人第一页| 久久夜色精品国产| 北条麻妃一区二区在线观看| 色综合色综合网色综合| 欧美美最猛性xxxxxx| 成人精品在线观看| 日韩中文娱乐网| 欧美日韩国产一区二区三区| 成人激情视频在线| 欧美日韩国产色|