欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript用200行代码制作打飞机小游戏实例

程序员文章站 2022-03-21 15:02:07
我去,我的图片分数被这个录屏软件的水印盖上了,扎心。 这个程序的文件以及代码全部上传到了github 程序下载链接传送门 这是自己第一次通过js写的小游...

我去,我的图片分数被这个录屏软件的水印盖上了,扎心。

JavaScript用200行代码制作打飞机小游戏实例

这个程序的文件以及代码全部上传到了github

程序下载链接传送门

这是自己第一次通过js写的小游戏,那个时候对象的原理跟结构体的概念不是特别的清晰,所以没用对象来写,所以直接导致后期我对这个程序进行修改的时候出现问题,太过于复杂了,我终于了解什么叫做牵一发动全身了。所以这个程序教会我一定一定要用对象的思想处理以后的问题,尤其是这种带属性明显的东西。

当然你要问我图片怎么来的我只能说都是我自己画的所以这可是原创的原创。

JavaScript用200行代码制作打飞机小游戏实例

代码部分我是通过一个大的函数直接进行所有的封装,当然写这个的时候的我完完全全对jquery么有一丁点认识,所以自己写了渐隐渐现的函数。所以开始的代码很简单。

window.onload = function(){
  var base = new base();
  var start = document.getelementbyid('start');
  start.onclick = function(){
    base.fadehide('start');
    getid('path').style.display='block';
    base.fadeshow('path');
    base.createbullteandmoveplain();

  }

}

这就是开始接入的函数。渐隐渐现的函数是这个。

   this. fadehide = function (name){
      var   i = 1;
      var odiv = document.getelementbyid(name);
      function show(){  
        odiv.style.opacity = i;
        i-=0.1; 
         if(i<0){odiv.style.display = 'none';clearinterval(t);
         }
      }
       var t = setinterval(show,10);
       return this;
    }

    this.fadeshow = function (name){
      var i = 0;
      var odiv = document.getelementbyid(name);
      function show(){  
        odiv.style.opacity = i;
        i+=0.1; 
         if(i>1){clearinterval(t);}
      }
       var t = setinterval(show,100);  
      return this;
    }

剩下的代码,懒得解释了,里面有注释。

    //生成子弹
      this.createbullteandmoveplain = function (){
      var arr= [];
      var bulletnum=[];
      var way = path.getelementsbyclassname('way');
      var play =document.getelementbyid('bullet');
      var flag =0;
      var score=0;

      //获取按键
      document.onkeydown = function(evt){
        var ev = evt||event;
        //left keycode is 39
        //right keycode is 37
        switch(ev.keycode){
          case 39:
          flag=(flag+1)%5;
          break;
          case 37:
          if(flag==0){
          flag=math.abs(flag-4);
          }else if(flag>0){
            flag=(flag-1)%5;
          }
          break;
        }

      //移动飞机
          function moveplain (){
            var plain = document.getelementbyid('player');
            switch(flag){
            case 0:player.style.left='0px';break;
            case 1: player.style.left='100px';break;
            case 2: player.style.left='200px';break;
            case 3: player.style.left='300px';break;
            case 4:player.style.left='400px';break;

          }
          }
          moveplain();
      }


      function createbulltes(){


        //生成敌人
          var newenemy = document.createelement('img');
          newenemy.src = 'img/enemy.png';
          newenemy.style.position='absolute';
          newenemy.style.zindex='5';
          var enemytop=0;
          var sign=0;
          var randomnum = math.random()*5;
          sign=math.floor(randomnum);
          newenemy.style.top='0px';
          switch(sign){
            case 0:newenemy.style.left='0px';break;
              case 1: newenemy.style.left='100px';break;
              case 2: newenemy.style.left='200px';break;
              case 3: newenemy.style.left='300px';break;
              case 4:newenemy.style.left='400px';break;

          }way[0].appendchild(newenemy);
          arr.unshift(newenemy);
      //生成子弹    
          var bullet = document.getelementbyid('bullet');
          var newbullet = document.createelement('img');
          var plain = document.getelementbyid('player');
          newbullet.classname='bullet';
          newbullet.style.position='absolute';
          newbullet.style.top='560px';  
          newbullet.src='img/bullet.png';
          newbullet.style.zindex='4';      
          var bullettop=0;


          switch(flag){
            case 0: newbullet.style.left='45px';player.style.left='0px';;break;
            case 1: newbullet.style.left='145px';player.style.left='100px';;break;
            case 2: newbullet.style.left='245px';player.style.left='200px';break;
            case 3: newbullet.style.left='345px';player.style.left='300px';break;
            case 4: newbullet.style.left='445px';player.style.left='400px';break;

          }way[2].appendchild(newbullet);
          bulletnum.unshift(newbullet);
        //分数图片
          function scoreup(score){
            var imgs = document.getelementsbyclassname('score');
            var imgsnum=score.tostring().split('');

            for(var i=0; i<imgsnum.length; i++){

              imgs[4-i].src='img/'+imgsnum[i]+'.png';  
            }

        }

        //判定触碰
        function decide(){
        for(var i = 0;i<arr.length; i++){
          for(var j=0; j<bulletnum.length; j++)
        if(arr[i].offsetleft==(bulletnum[j].offsetleft-45)&&((arr[i].offsettop+98)>bulletnum[j].offsettop-10&&(arr[i].offsettop+98)<bulletnum[j].offsettop+10)){
          score++;
          scoreup(score);
          arr[i].parentnode.removechild(arr[i]);
            bulletnum[j].parentnode.removechild(bulletnum[j]);    
            }
          }
          var player=document.getelementbyid('player');
          for(var i=0; arr.length; i++){
            if(arr[i].offsetleft==player.offsetleft&&(arr[i].offsettop+70)==player.offsettop){
              alert('game over');location.reload();
            }
          }
        }

        //放在一起的移动
          function bulletmove (){
                  bullettop=newbullet.offsettop;
                    enemytop=newenemy.offsettop;
                //    alert('buller:'+newbullet.offsetleft);
                  //  alert(newenemy.offsetleft);
                function move (){
                  bullettop-=6;
                  enemytop+=1;
                  newbullet.style.top=bullettop+'px';
                  newenemy.style.top=enemytop+'px';
                   decide();
                  if(bullettop==0&&enemytop==560){
                        newbullet.style.opacity='0';
                          newenemy.style.opacity='0';

                          clearinterval(t);
                          }else if(bullettop==0){
                          newbullet.parentnode.removechild(newbullet);  
                          bulletnum.pop();
                          }else if(enemytop==560){
                          newenemy.parentnode.removechild(newenemy);arr.pop();
                          }


                }

                    var t = setinterval(move,20);  
          }  
                bulletmove();

          }

          var s=setinterval(createbulltes,3000);

      }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。