打地鼠遊戲電腦版

 Html5也學了一個階段了,剛把離線緩存學了一下,就想寫個遊戲,挑了一個簡單的來練練手,打地鼠。

這款遊戲用到了一些html5的東西算是一點小亮點吧,比如說開場動畫了,升級失敗的字,還有離線緩存了,主要算法一般般,對JS的面向對象不是很熟悉,JS不支持繼承要通過構造函數來實現繼承偷懶就沒仔細去研究,所以js代碼自認爲寫的不是很好。寫遊戲嘛用面向對象寫起來應該爽吧!下邊給大家看一下開場動畫的畫面吧!

 

用的是蒙版的原理實現了燈光的效果,用了離線緩存實現的進度條

。再看一下里面的東西吧

 

一些字體什麼的都是用了CSS3的東西看起來很炫啊……地鼠的動作也是用到了CSS3

主要的JS算法流程是:通過一個創建的地鼠的方法來不停的創建地鼠:

 

  1. /* 
  2.         *創建地鼠方法 
  3.         *計數器t是管創建的,計時器ts[i]管地鼠逃生 
  4.         *t2是創建地鼠需要的時間 
  5.         *t1是地鼠逃生在地面待的時間 
  6.         */ 
  7.         function createmouse(){ 
  8.             var hidemouse=document.querySelectorAll('.mouse[data-show^="0"]'); 
  9.             var randomNum = Math.round(Math.random()*(hidemouse.length-1));          
  10.             if(hidemouse.length==0){ 
  11.                 t = setTimeout(createmouse,t2); 
  12.                 return;              
  13.             } 
  14.             hidemouse[randomNum].setAttribute('data-show','1'); 
  15.              
  16.             for(var i=0;i<mouses.length;i++){ 
  17.                 if(hidemouse[randomNum]==mouses[i]){ 
  18.                     tsnum[i]=i; 
  19.                     break
  20.                 } 
  21.             } 
  22.             mouseboolean[i]=true
  23.             (function(i){ts[i]=setTimeout(function(){shibai(i)},t1);})(i); 
  24.             t = setTimeout(createmouse,t2);      
  25.         } 
  26. 通過一個打到地鼠的方法來判斷是否打中地鼠: 
  27. /* 
  28.         *地鼠被揍的方法 
  29.         * 
  30.         */ 
  31.         function disappear(e){           
  32.             if(!suspendnum){ 
  33.                 if(!shengjiboolean){ 
  34.                     if(e.target.className=='mouse'){                     
  35.                         for(var i=0;i<mouses.length;i++){ 
  36.                             if(e.target==mouses[i]){ 
  37.                             tsnum[i]=undefined;                          
  38.                                 break
  39.                             } 
  40.                         } 
  41.                          
  42.                         if(mouseboolean[i]){ 
  43.                             clearTimeout(ts[i]); 
  44.                             e.target.setAttribute('data-show','1_1'); 
  45.                             shengjinumall++; 
  46.                             scores+=score; 
  47.                             mouseboolean[i]=false
  48.                             scoreall.innerHTML='分數:'+scores+'&nbsp;&nbsp;&nbsp;&nbsp;級別:'+jibie+'&nbsp;&nbsp;&nbsp;&nbsp;機會:'+hp; 
  49.                             tall[i]=setTimeout(function(){e.target.setAttribute('data-show','0_1');},220);           
  50.                             if(shengjinumall==shengjinum){t1=1500;t2=3000;score=2000;jibie=2;shengji1();} 
  51.                             else if(shengjinumall==2*shengjinum){t1=1000;t2=2000;score=3000;jibie=3;shengji1();} 
  52.                             else if(shengjinumall==3*shengjinum){t1=900;t2=1500;score=4000;jibie=4;shengji1();} 
  53.                             else if(shengjinumall==4*shengjinum){t1=800;t2=1000;score=5000;jibie=5;shengji1();} 
  54.                             else if(shengjinumall==5*shengjinum){t1=1200;t2=700;score=6000;jibie=6;shengji1();} 
  55.                         }                                                                                
  56.                     } 
  57.                 } 
  58.             } 
  59.         } 
  60.         mousediv.addEventListener('click',function(e){disappear(e);},false); 
  61. 還有一個是沒有打中地鼠的方法: 
  62. /* 
  63.         *地鼠逃生方法 
  64.         *hp地鼠逃生次數 
  65.         */ 
  66.         function shibai(num){ 
  67.             if(hp==1){ 
  68.                 suspendnum=true;                 
  69.                 startnum=false;  
  70.                 hp=0; 
  71.                 mouses[num].setAttribute('data-show','1_2'); 
  72.                 tall[num]=setTimeout(function(){ 
  73.                     mouses[num].setAttribute('data-show','0_2'); 
  74.                     if(musicboolean){jianxiao.play();}                   
  75.                     },220);              
  76.                 scoreall.innerHTML='分數:'+scores+'&nbsp;&nbsp;&nbsp;&nbsp;級別:'+jibie+'&nbsp;&nbsp;&nbsp;&nbsp;機會:'+hp; 
  77.                 cleart(); 
  78.                 tfail=setTimeout(function(){ 
  79.                     if(musicboolean){shibai_bg.play();}                  
  80.                     fail.style.display='block'
  81.                     setTimeout(function(){fail.style.top='300px';},17);                  
  82.                     fail.innerHTML='你輸了!!!分數:'+scores+'  級別:'+jibie+'打死的地鼠:'+shengjinumall;  
  83.                     for(var i=0;i<mouses.length;i++){                        
  84.                         mouses[i].setAttribute('data-show','2'); 
  85.                     }                                                                                        
  86.                 },1000); 
  87.                                                  
  88.             } 
  89.             else if(hp<=3&&hp>1){ 
  90.                 hp--;                
  91.                 mouses[num].setAttribute('data-show','1_2'); 
  92.                 tall[num]=setTimeout(function(){ 
  93.                     mouses[num].setAttribute('data-show','0_2'); 
  94.                     if(musicboolean){jianxiao.play();} 
  95.                 },220); 
  96.                 scoreall.innerHTML='分數:'+scores+'&nbsp;&nbsp;&nbsp;&nbsp;級別:'+jibie+'&nbsp;&nbsp;&nbsp;&nbsp;機會:'+hp; 
  97.                 tsnum[num]=undefined;                
  98.             }            
  99.         } 

 

主要就是這三個方法,當然還有其他很多方法來實現一些邊邊角角,是遊戲完整起來。通過這次遊戲的編寫發現JS真的跟那些專門的後臺語言java,c++差遠了啊。當然它也有它的優勢哈!繼續努力中,我也是菜鳥把具體代碼放到附件中了供大家參考,一起努力啊!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章