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


Posted in Javascript onJune 21, 2017

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

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);

      }
  }

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

Javascript 相关文章推荐
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
Nov 28 Javascript
js实现匹配时换色的输入提示特效代码
Aug 17 Javascript
js实现鼠标点击文本框自动选中内容的方法
Aug 20 Javascript
JavaScript计划任务后台运行的方法
Dec 18 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
Jul 26 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
Nov 13 Javascript
Angular4.0动画操作实例详解
May 10 Javascript
javascript异步编程的六种方式总结
May 17 Javascript
jQuery实现图片下载代码
Jul 18 jQuery
Vue 3.0 前瞻Vue Function API新特性体验
Aug 12 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
Oct 31 Javascript
JS自定义右键菜单实现代码解析
Jul 16 Javascript
Angular.JS中指令ng-if的注意事项小结
Jun 21 #Javascript
jquery.validate表单验证插件使用详解
Jun 21 #jQuery
JS实现简单拖拽效果
Jun 21 #Javascript
详解Vue路由开启keep-alive时的注意点
Jun 20 #Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
Jun 20 #jQuery
详解Node.js access_token的获取、存储及更新
Jun 20 #Javascript
详解angular 中的自定义指令之详解API
Jun 20 #Javascript
You might like
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
CodeIgniter框架验证码类库文件与用法示例
2017/03/18 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
一个网马的tips实现分析
2010/11/28 Javascript
为原生js Array增加each方法
2012/04/07 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
python爬取淘宝商品详情页数据
2018/02/23 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
Python celery原理及运行流程解析
2020/06/13 Python
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
教师自荐书
2013/10/08 职场文书
公司会计岗位职责
2014/02/13 职场文书
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
中职生求职信
2014/07/01 职场文书
2014年终个人工作总结
2014/11/07 职场文书
募捐感谢信
2015/01/22 职场文书
户外亲子活动总结
2015/05/08 职场文书
单位接收证明格式
2015/06/18 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
python分分钟绘制精美地图海报
2022/02/15 Python