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 相关文章推荐
返回对象在当前级别中是第几个元素的实现代码
Jan 20 Javascript
JS获取并操作iframe中元素的方法
Mar 21 Javascript
JS 两个字符串时间的天数差计算
Aug 25 Javascript
javascript中数组中求最大值示例代码
Dec 18 Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 Javascript
node.js中使用socket.io制作命名空间
Dec 15 Javascript
jQuery Ajax File Upload实例源码
Dec 12 Javascript
JS点击缩略图整屏居中放大图片效果
Jul 04 Javascript
jQuery实现的事件绑定功能基本示例
Oct 11 jQuery
TypeScript基础入门教程之三重斜线指令详解
Oct 22 Javascript
浅谈layui 表单元素的选中问题
Oct 25 Javascript
jQuery+ajax实现用户登录验证
Sep 13 jQuery
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调用数据库的存贮过程!
2006/10/09 PHP
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
Python常用列表数据结构小结
2014/08/06 Python
Python脚本实现代码行数统计代码分享
2015/03/10 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
python 实现矩阵按对角线打印
2019/11/29 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
节约用水标语
2014/06/11 职场文书
政协会议宣传标语
2014/10/09 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
大学四年个人总结
2015/03/03 职场文书
化妆品促销活动总结
2015/05/07 职场文书
一文简单了解MySQL前缀索引
2022/04/03 MySQL
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis