zoukankan      html  css  js  c++  java
  • JS重现_经典拼板游戏

    <!doctype html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>JS重现_经典拼板游戏</title>
    </head>
    <body>
    <style>
    *{margin:0;padding:0;}
    .shell{margin:20px auto;position:relative;width:499px;height:299px;border:#666 10px solid;background:#FAFAFA;}
    .shell p{position:absolute;width:99px;height:99px;background:url(1.jpg) no-repeat 0 0;cursor:pointer;}
    .bar{margin:0 auto;width:499px;font:600 16px/1.8em Verdana;}
    .bar em{font-style:normal;margin-right:10px;color:#F00;}
    #showall{font:12px/1.8em Verdana;cursor:pointer;}
    #show{background:url(1.jpg) no-repeat 0 0;}
    </style>
    <div id="shell" class="shell"></div>
    <div id="bar" class="bar">
        <b>计时:</b><em id="times">00:00</em>
        <b>步数:</b><em id="steps">0</em>
        <select id="hard">
            <option value="1">入门模式</option>
            <option value="7">简单模式</option>
            <option value="81">一般模式</option>
            <option value="201">困难模式</option>
            <option value="501">超难模式</option>
        </select>
        <b id="showall">查看原图</b>
    </div>
    <div id="show" class="shell" style="display:none;"></div>
    <script type="text/javascript">
    speller={
        init:function(n){
            this.hard=n||5;
            this.step=this.useTime=0;
            this.blank=14;
            this.createGrid();
            clearInterval(this.timer);
            this.timer=setInterval(function(){
                speller.useTime++;/* 累加时间并格式化显示 */
                document.getElementById("times").innerHTML=('0'+parseInt(speller.useTime/60)).slice(-2)+':'+('0'+speller.useTime%60).slice(-2);
            },1000);
        }
        ,createGrid:function(){
            var X=function(n){return n%5*100;},Y=function(n){return parseInt(n/5)*100;};
            for(var i=0,html=[];i<15;i++){
                html.push('<p onclick="speller.move(this);" id="'+i+'" class="'+i+'"  style="left:'+X(i)+'px;top:'+Y(i)+'px;background-position:-'+X(i)+'px -'+Y(i)+'px;"></p>');
            }
            document.getElementById("shell").innerHTML=html.join('');
            this.random();
        }
        ,random:function(p){
            var ps=document.getElementById("shell").getElementsByTagName("P"),l=ps.length,me=this;
            ps[this.blank].style.display="none";
            var en=function(n){
                var arr=[];
                if(n<14 && n%5!=4){arr.push(n+1);}
                if(n>0 && n%5!=0){arr.push(n-1);}
                if(n>4){arr.push(n-5);}
                if(n<10){arr.push(n+5);}
                return arr[parseInt(Math.random()*arr.length)]*1;
            }
            var getp=function(n){for(var i=0;i<l;i++){if(ps[i].className==n){return ps[i];}}}
            for(var i=0;i<me.hard;i++){
                this.move2(getp(en(this.blank*1)));
            }
        }
        ,move2:function(p){
            var pos=p.className*1,POS=this.blank*1,abs=Math.abs(pos-POS),max=pos>POS?pos:POS;
            p.style.top=parseInt(POS/5)*100+"px";
            p.style.left=POS%5*100+"px";
            p.className=POS;this.blank=pos;
        }
        ,move:function(p){
            var pos=p.className*1,POS=this.blank*1,abs=Math.abs(pos-POS),max=pos>POS?pos:POS;
            if(abs==5){
                this.fx(parseInt(pos/5)*100,parseInt(POS/5)*100,function(x){p.style.top=x+"px";},function(){},100,.4)
            }else if(abs==1&&max%5!=0){
                this.fx(pos%5*100,POS%5*100,function(x){p.style.left=x+"px";},function(){},100,.4)
            }else{return;}
            p.className=POS;this.blank=pos;document.getElementById("steps").innerHTML=++this.step;
            if(this.check()){
                var me=this,last=document.getElementById("shell").getElementsByTagName("P")[14];
                last.style.display="block";
                this.blank=10000;
                this.fx(0,100,function(x){last.style.opacity=x/100;last.style.filter="alpha(opacity="+x+")";},function(){alert('你真棒!再来一次吧!');me.init();},200,1)
            }
        }
        ,check:function(){
            var p=document.getElementById("shell").getElementsByTagName("P");
            for(var i=0,l=p.length;i<l;i++){if(p[i].className!=p[i].id){return false;}}
            return true;
        }
        ,fx:function(f,t,fn,end,tm,pow){
            var D=Date,d=new D,e,c=tm||240,pow=pow||2;
            return e=setInterval(function (){
                var z=Math.min(1,(new D-d)/c);
                (false===fn(+f+(t-f)*Math.pow(z,pow),z)||z==1) && end && end(clearTimeout(e));
            },10);
        }
    }
    speller.init(document.getElementById("hard").value);
    document.getElementById("showall").onclick=function(){
        document.getElementById("show").style.display=document.getElementById("show").style.display=="none"?"":"none";
    }
    document.getElementById("hard").onchange=function(){
        speller.init(this.value);
    }
    document.all&&document.execCommand("BackgroundImageCache", false, true);
    </script>
    </body>
    </html>

    效果浏览

  • 相关阅读:
    字符匹配算法之KMP
    rabbitmq_hearbeat
    rabbitmq_config
    postgres SQL编译过程
    postgres启动过程分析
    postgres源码目录结构
    Js两种post方式(转)
    PHP-MySQL,PHP-MySQLi,PDO的差异
    CSS属性中Display与Visibility的不同
    PHP中include路径修改
  • 原文地址:https://www.cnblogs.com/wsir/p/8808360.html
Copyright © 2011-2022 走看看