原生JavaScript开发仿微信打飞机小游戏

今天闲来无事,于是就打算教一个初学JavaScript的女童鞋写点东西,因此为了兼顾趣味性与简易程度,果断想到了微信的打飞机小游戏。。

本来想用html5做的,但是毕竟人家才初学,连jquery都还不会,所以最终还是决定用原生的javascript。虽说相对于园内的高手们而言代码算不上优雅,效率算不上高,不过对于初学者来练手还是足以。。

三个文件,main.js(主函数),entity.js(实体类与工厂类),util.js(工具类),基本原理就是把位置信息保存在对象里面,然后在setInterval里面统一对所有对象进行更新显示。程序所用到的飞机与子弹图片都是从微信上截屏得来的。

先上图:

原生JavaScript开发仿微信打飞机小游戏

原生JavaScript开发仿微信打飞机小游戏

再上代码:
 
index.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>打飞机</title>
<script type="text/javascript" src="https://www.linuxidc.com/js/util.js"></script>
<script type="text/javascript" src="https://www.linuxidc.com/js/entity.js"></script>
<script type="text/javascript" src="https://www.linuxidc.com/js/main.js"></script>
<script type="text/javascript">

window.onload=function(){
    Main.init();
    Util.g("startBtn").onclick=function(){
        Main.start();
        this.style.display="none";
    }
}
</script>
</head>
<body>
<div>
    <div>积分:<span>0</span></div>
    <button
       
       >
    点击开始
    </button>

</div>
</body>
</html>

main.js:

// JavaScript Document
var Main={
    init:function(){
        Util.init();
    },
    _totalEnemies:8,
    start:function(){
        //初始化敌机
        enemyPlaneFactory.creatEnemyPlane(this._totalEnemies);
       
        //初始化自己
        selfPlane.init();
       
        //初始化子弹
        bulletFactory.creatBullet(100);
        //开始渲染画面
        this._render();
        //开始射击子弹
        this._startShoot();
       
        //初始化键盘事件响应
        this._initEvent();
    },
   
    //渲染定时器
    _render_t:null,
    _render:function(){
        this._render_t=setInterval(function(){
            var enemys=enemyPlaneFactory.enemys;
            for(var i in enemys){
                var enemy=enemys[i];
                enemy.move(0,enemy.speed);
               
                if(enemy.x+enemy.e.width>selfPlane.x+10
                    &&enemy.x<selfPlane.x+selfPlane.e.width-10
                    &&enemy.y+enemy.e.height>selfPlane.y+selfPlane.e.height/2
                    &&enemy.y<selfPlane.y+selfPlane.e.height){
                        enemy.isDied=true;
                        clearInterval(Main._render_t);
                        clearInterval(Main._startShoot_t);
                        var b=window.confirm("对不起,您已经挂了,是否重玩?")
                        if(b){
                            window.location.reload();
                        }
                }
               
                if(enemy.y>Util.windowHeight||enemy.isDied){
                    enemy.restore();
                }
            }
           
            var bullets=bulletFactory.bullets;
            for(var i in bullets){
                var bullet=bullets[i];
                bullet.move(0,-bullet.speed);
               
                for(var i in enemys){
                    var enemy=enemys[i];
                    //判断子弹是否击中敌机,如果击中则隐藏子弹,杀死敌机,增加积分..
                    if(bullet.y>10
                        &&bullet.x>enemy.x
                        &&bullet.x<enemy.x+enemy.e.width
                        &&bullet.y<enemy.y+enemy.e.height){
                            enemy.isDied=true;
                            bullet.e.style.top=-bullet.e.height;
                            selfPlane.score+=50;
                            Util.scoreSpan.innerHTML=selfPlane.score+"";
                    }
                }
            }
           
           
        },1000/15);
    },
    //射击定时器
    _startShoot_t:null,
    _startShoot:function(){
        var i=0;
        var bullets=bulletFactory.bullets;
        var bulletsCount=bullets.length;
        this._startShoot_t=setInterval(function(){
            if(i>=bulletsCount){
                i=0;
            }
            var bullet=bullets[i];
            bullet.moveTo(selfPlane.x+selfPlane.e.width/2-bullet.e.width/2,selfPlane.y-bullet.e.height-3);
            i++;
        },300);
    },
    keyMove:10,
    _initEvent:function(){
        window.onkeydown=function(e){
            /*
            37:左
            38:上
            39:右
            40:下
            */
            var keynum;
            var left=37,up=38,right=39,down=40;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/34863e9053c2568b11d1cf5038eabc28.html