没有技术含量,只是用来练习代码逻辑的。为了代码结构清晰,我把逻辑控制部分写在全局变量里,用户界面操作封装在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 "<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>

以上就是本文所述的全部内容了,希望大家能够喜欢。

标签:
javascript,2048

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
桃源资源网 Design By www.nqtax.com

评论“javascript版2048小游戏”

暂无“javascript版2048小游戏”评论...

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?