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

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


打飞机

这个程序的文件以及代码全部上传到了github
程序下载链接传送门
这是自己第一次通过js写的小游戏,那个时候对象的原理跟结构体的概念不是特别的清晰,所以没用对象来写,所以直接导致后期我对这个程序进行修改的时候出现问题,太过于复杂了,我终于了解什么叫做牵一发动全身了。所以这个程序教会我一定一定要用对象的思想处理以后的问题,尤其是这种带属性明显的东西。
当然你要问我图片怎么来的我只能说都是我自己画的所以这可是原创的原创。

所用到的图片

代码部分我是通过一个大的函数直接进行所有的封装,当然写这个的时候的我完完全全对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的知识已经忘得差不多了。作为一个大学生,还是要时常复习,以前学习过的知识。要不慢慢地就不知道还给谁了,

顺便提一句余华的《活着》把我看感动了,那种真心的感动。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,047评论 25 707
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • Redis 分区 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。 分区的优势 ...
    陈小陌丿阅读 5,540评论 0 4
  • 端午节假期的第一天,在学校门口随意摆摊的小贩那里买了一只本应该是蜜枣粽的蜜豆粽子(老板拿错了)和两颗我期待它流油却...
    何微然阅读 365评论 0 0
  • 思维导图
    文魁大脑高子星阅读 426评论 0 0