js 考记忆力得小游戏

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
    window.onload = function (){
         var oStar = document.getElementById("start");
         var oSpan = oStar.getElementsByTagName("span")[0];

         var oContent = document.getElementById("content");
         var oRect = document.getElementById("rect");
         var timer = null;
         var oTime = document.getElementById("time");

         var aImg = document.getElementsByTagName("img");

         var arrImg = ["http://img3.douban.com/view/photo/thumb/public/p1994200192.jpg",
                        "http://img5.douban.com/view/photo/thumb/public/p1994200528.jpg",
                        "http://img3.douban.com/view/photo/thumb/public/p1994200963.jpg",
                        "http://img3.douban.com/view/photo/thumb/public/p1994201400.jpg",
                        "http://img3.douban.com/view/photo/thumb/public/p1994201804.jpg",
                        "http://img5.douban.com/view/photo/thumb/public/p1994201968.jpg",
                        "http://img3.douban.com/view/photo/thumb/public/p1994202154.jpg",
                        "http://img5.douban.com/view/photo/thumb/public/p1994202276.jpg",
                        "http://img3.douban.com/view/photo/thumb/public/p1994202342.jpg"];

         var oScore = document.getElementById("score");
         var oFail = document.getElementById("fail");
         var oSuccess = document.getElementById("success");
         var level = [{"num":"3","timeGame":"10"},
                       {"num":"4","timeGame":"10"},
                       {"num":"6","timeGame":"15"},
                       {"num":"8","timeGame":"20"}];


         oSpan.onclick = function (){

             var rating = 0;
             starGame( level[rating].num,level[rating].timeGame,rating );
             
         }

         // 游戏程序 参数分别代表 块数 游戏时间 等级
         function starGame( num,timeGame,rating){ 

             oStar.style.display = "none";
             oFail.style.display = "none";
             oSuccess.style.display = "none";
             oContent.style.display = "block";
             oContent.setAttribute("off","0");

             oTime.style.width = "440px";
             oScore.innerHTML = 0;
             oRect.innerHTML = "";

             fillContent(num); 
             setTimeout(function (){
                 for(var i = 0; i < aImg.length; i++){
                     aImg[i].src = "http://img3.douban.com/view/photo/thumb/public/p2191686093.jpg";
                 }
                 getTime( oTime,"width", -Math.floor( parseInt( getStyle(oTime,"width") )/timeGame ), timeGame, num*20, rating );
             },3000);
         }

         //填充块
         function fillContent(size){
             var arr = Mix(size,1,2);
             //console.log(arr);

             for(var i = 0; i < arr.length; i++){
                 oRect.innerHTML += "<img style = 'top:"+ 110*Math.floor(i/4) +"px; left:"+ 110*Math.floor(i%4) +"px' select = 'N' index = " + i + " address = " + arrImg[arr[i]] +" src = "+ arrImg[arr[i]] +" num = "+ arr[i] + ">";
             }
         }

         function Mix( max,min,fre){
             var arr = [];
             for(var i = min; i <= max; i++ ){
                 arr.push(i);
             }
             var newarr = [getRandom(arr.length,1)];
             for(var i = 0; newarr.length < arr.length*fre; i++ ){

                 var num = getRandom(arr.length,1);

                 if( toCon(num,fre-1 ) ){
                     newarr.push(num);
                 }
             }

             function toCon( num,fre ){
                 var iNow = 0;
                 for(var i = 0; i < newarr.length; i++ ){
                     if( num == newarr[i] && iNow != fre ){
                         ++iNow;
                     }else if( num == newarr[i] && iNow == fre ){
                         return false;
                     }
                 }
                 return true;
             }

             return newarr;
         }

         

         function getTime( obj,attr,speed,time,totle,rating ){
             clearInterval(obj.timer);

             selectRect(totle,rating);
             obj.timer = setInterval( function (){

                 time--;
                 if( time != 0 ){
                     obj.style[attr] = parseInt( getStyle(obj,attr) ) + speed + "px";
                     if( parseInt(oContent.getAttribute("off")) ==  1  ){
                         clearInterval(obj.timer);
                     }
                 }


                 if( time == 0  ){
                     obj.style[attr] = "0px";
                     clearInterval(obj.timer);
                     for(var i = 0; i < aImg.length; i++ ){
                         aImg[i].src = aImg[i].getAttribute("address");
                     }
                     
                     //console.log( oContent.getAttribute("off") );
                     if( parseInt(oContent.getAttribute("off"))!=  1 ){

                         oContent.style.display = "none";
                         oFail.style.display = "block";

                         var oP = oFail.getElementsByTagName("p")[0];

                         oP.onclick = function (){

                             oFail.style.display = "none";
                             oStar.style.display = "block";

                             oSpan.onclick = function (){
                                 starGame(level[0].num,level[0].timeGame,0);
                             }
                         }
                     }

                 }
             },1000)
         }

         function selectRect(totle,rating){
             var selectNum = 0;
             var selectVal = [];
             var selectIndex = [];
             for(var i = 0; i < aImg.length; i++ ){
                 aImg[i].style.cursor = "pointer";
                 aImg[i].onclick = function(){
                     selectNum++;
                     this.style.border = "1px red solid";
                     this.src = this.getAttribute("address");
                     this.setAttribute("select","Y");
                     selectVal.push( parseInt( this.getAttribute("num")) );
                     selectIndex.push( parseInt( this.getAttribute("index")) );

                     //console.log(selectVal );
                     if( selectNum == 2 ){
                         selectNum = 0;

                          if( selectVal.length == 2 ){
                              if( selectVal[0] == selectVal[1]  && selectIndex[0]!= selectIndex[1] ){

                                  toSelectSuccess(totle,rating);
                                  oScore.innerHTML = parseInt( oScore.innerHTML ) + 20;
                              } else {
                                  toSelectError();
                              }
                          }
                         selectVal = [];
                         selectIndex = [];
                     }    
                 }
             }

             function toSelectError(){
                 setTimeout (function(){
                     var selArrE = [];

                     for(var i = 0; i < aImg.length; i++ ){
                         if( aImg[i].getAttribute("select") == "Y"){
                             selArrE.push( parseInt(aImg[i].getAttribute("index")) );
                         }
                     }

                     for(var i = 0; i < aImg.length; i++ ){
                         for(var j = 0; j < selArrE.length; j++ ){
                             if( aImg[i].getAttribute("index") == selArrE[j] ){
                                 aImg[i].src = aImg[i].getAttribute("address");
                                 aImg[i].src = "http://img3.douban.com/view/photo/thumb/public/p2191686093.jpg";
                                 aImg[i].style.border = "1px white solid";
                                 aImg[i].setAttribute("select","N");
                             }
                         }
                     }
                     selArrE.length = 0;
                 },300);
            }

            function toSelectSuccess( totle,rating){
                 setTimeout (function(){
                     var selArrS = [];
                     for(var i = 0; i < aImg.length; i++ ){
                         if( aImg[i].getAttribute("select") == "Y"){
                             selArrS.push( aImg[i].getAttribute("index") );
                         }
                     }

                     //console.log(totle);

                     for(var i = 0; i < aImg.length; i++ ){
                         for(var j = 0; j < selArrS.length; j++ ){
                             if( aImg[i].getAttribute("index") == selArrS[j] ){
                                 aImg[i].src = aImg[i].getAttribute("address");
                                 aImg[i].style.display = "none";
                                 aImg[i].setAttribute("select","N");
                             }
                         }
                     }
                     selArrS.length = 0;

                     if( parseInt( oScore.innerHTML ) == parseInt( totle ) ){

                         oContent.setAttribute("off","1");
                         oContent.style.display = "none";
                         oSuccess.style.display = "block";

                         var oP = oSuccess.getElementsByTagName("p")[0];
                         oP.onclick = function(){
                             rating++;
                             
                             if( rating == 4 ){
                                 oStar.style.display = "block";
                                 oFail.style.display = "none";
                                 oSuccess.style.display = "none";
                                 oContent.style.display = "none";
                                 rating = 0;

                                 oSpan.onclick = function (){

                                     
                                     starGame( level[0].num,level[0].timeGame,0 );
                                     
                                 }

                             }

                             starGame( level[rating].num,level[rating].timeGame,rating);
                             
                         }
                         
                     }

                     //console.log( selArr[0],selArr[1] );
                     var selArr = [];
                     //console.log( selArr[0],selArr[1] );
                     //var selArr = [];
                 },200);
        }



         }

             
         

         
        
         

         function getStyle(obj,attr){
             if(obj.currentStyle){
                 return obj.currentStyle[attr];
             } else{
                 return getComputedStyle(obj)[attr];
             }
         }

         function getRandom( max, min){
             return Math.floor( Math.random()*( max - min + 1) + min );
         }
    }
    </script>
    <style>
        *{
            padding: 0px;
            margin: 0px;
        }
        #start{
            background: url(images/background.jpg) no-repeat;
            margin: 50px auto;
            position: relative;
            width: 800px;
            height: 500px;
            overflow: hidden;
            display: block;
        }

        #start span{
            background: pink;
            color: white;
            position: absolute;
            top: 400px;
            left: 700px;
            cursor: pointer;
            padding: 15px;
        }

        #content{
            background: #cccccc;
            margin: 50px auto;
            position: relative;
            width: 440px;
            height: 440px;
            display: none;
        }
        #content p{
            position: absolute;
            right: 5px;
            top: -20px;
        }

        #content #rect{
            width: 440px;
            height: 440px;
            position: relative;;
        }

        #content img{
            border: 1px white solid;
            width: 98px;
            height: 98px;
            margin: 5px;
            position: absolute;
        }

        #time{
            width: 440px;
            background: red;
            height: 30px;
            position: absolute;
            bottom: -30px;
        }

        #fail{
            background: black;
            margin: 50px auto;
            width: 440px;
            height: 440px;
            display: none;
        }

        #fail p {
            margin: 50px auto;
            font-size: 120px;
            color:white;
            cursor: pointer;
        }

        #success{
            background: red;
            margin: 50px auto;
            width: 440px;
            height: 440px;
            display: none;
        }

        #success p {
            margin: 50px auto;
            font-size: 120px;
            color:white;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id = "start">
        <span>start</span>
    </div>

    <div id = "content"  off = "0">
        <p>Score: <span id = "score">0</span>point</p>
        <div id = "time"></div>
        <div id="rect"></div>

    </div>

    <div id = "fail">
        <p>Failure!</p>
    </div>

    <div id = "success">
        <p>Success</p>
    </div>
</body>
</html>

 

posted @ 2015-05-01 22:12  mayufo  阅读(322)  评论(0编辑  收藏  举报