打地鼠游戏电脑版

 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++差远了啊。当然它也有它的优势哈!继续努力中,我也是菜鸟把具体代码放到附件中了供大家参考,一起努力啊!

 

你可能感兴趣的:(js,html5,css3,打地鼠)