zoukankan      html  css  js  c++  java
  • JS+html实现简单的飞机大战

    摘要:通过原生的js+html实现简单的飞机大战小游戏效果,如图所示:

    实现代码如下:

    1.自己的飞机实现

    飞机html:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>打飞机</title>
        <style>
            #bg {
                position: relative;
                width: 530px;
                height: 600px;
                margin-left: auto;
                margin-right: auto;
                margin-top: 100px;
                background: url("game_images/bg.png") no-repeat 0 -9399px;
            }
    
            #myPlane {
                position: absolute;
                width: 60px;
                height: 60px;
                background:url('game_images/my_air.gif') no-repeat;
                top: 530px;
                left: 235px;
                overflow: visible;
            }
            .enemyPlane{
                position: absolute;
                width: 47px;
                height: 72px;
                background:url("game_images/d_j_1.gif") no-repeat;
                top: 3px;
                left: 240px;
                overflow: visible;
            }
            .bullets{
                position: absolute;
                width: 9px;
                height: 37px;
                background:url("game_images/my_ari_1.gif") no-repeat;
            }
        </style>
    </head>
    <body>
    <div id="bg">
        <div id="myPlane"></div>
        <!--<div class="enemyPlane"></div>-->
    
    </div>
    <button onclick="bgStopMove()">停止</button>
    <!--<button onclick="bgStartMove()">启动</button>-->
    
    </body>
    <script type="text/javascript" src="EnemyPlane.js"></script>
    <script type="text/javascript" src="bullets.js"></script>
    <script type="text/javascript" src="jquery-2.1.1.min.js"></script>
    <script>
        bgStartMove();
        //敌机控制
        var enemy_controller;
        //背景图的相关设置:
        var bg_coordinate = -100;
        var bg_move_controller;
        //用户飞机的相关设置
        var move_speed = 11;
        var myPlane_style_left = initialDOMPosition("myPlane","left");
        var myPlane_style_top = initialDOMPosition("myPlane","top");
    
        function bgMove() {
            if (bg_coordinate > -1) {
                bg_coordinate = -9399;
            }
            bg_coordinate += 1;
            document.getElementById("bg").setAttribute("style", "background: red url('game_images/bg.png') no-repeat 0 " + bg_coordinate + "px;")
        }
        function bgStartMove() {
            bg_move_controller = setInterval(bgMove, 30);
        }
        function bgStopMove() {
            clearInterval(bg_move_controller);
        }
        function initialDOMPosition(DOMId,leftOrTop) {
            var myDiv = document.getElementById(DOMId);
            //获取指定DOM的style:
            var myPlaneStyle = document.defaultView.getComputedStyle(myDiv, null);
            var Position;
            if (leftOrTop == "left") {
                Position = myPlaneStyle.left;
            }
            else if (leftOrTop == "top") {
                Position = myPlaneStyle.top;
            }
            Position = Position.substring(0, Position.length - 2);
            Position = parseInt(Position);//将字符串转化为整型;
            return Position;
        }
        function shoot(){
            var planeLeft = initialDOMPosition("myPlane","left");
            var planeTop = initialDOMPosition("myPlane","top");
            var myBullet = new bullets(planeLeft,planeTop);
        }
    
        document.onkeydown = function () {
            var key = event.keyCode;
            switch (key) {
                case 32://发子弹
                    shoot();
                    break;
                case 38://
                    myPlaneMoveTop();
                    break;
                case 40://
                    myPlaneMoveDown();
                    break;
                case 37://
                    myPlaneMoveLeft();
                    break;
                case 39://
                    myPlayMoveRight();
                    break;
            }
            //方向键:上:38;下:40;左:37;右:39;
            //空格:32
    
        };
        function myPlaneMoveDown(){
            if(myPlane_style_top < 540){
                myPlane_style_top += move_speed;
                document.getElementById("myPlane").setAttribute("style","top:"+myPlane_style_top+"px;left:"+myPlane_style_left+"px;");
            }
        }
        function myPlaneMoveTop(){
            if(myPlane_style_top > 3){
                myPlane_style_top -= move_speed;
                document.getElementById("myPlane").setAttribute("style","top:"+myPlane_style_top+"px;left:"+myPlane_style_left+"px;");
            }
        }
        function myPlaneMoveLeft() {
            //向左移动不能超过bg的边界;
            if (myPlane_style_left > 1) {
                myPlane_style_left -= move_speed;
                document.getElementById("myPlane").setAttribute("style", "left:" + myPlane_style_left + "px;top:"+myPlane_style_top+"px;");
            }
        }
        function myPlayMoveRight() {
            //向左移动不能超过bg的边界;
            //相对于图片左边的坐标,所以坐标是:530 - 60;
            if (myPlane_style_left < 470) {
                myPlane_style_left += move_speed;
                document.getElementById("myPlane").setAttribute("style", "left:" + myPlane_style_left + "px;top:"+myPlane_style_top+"px;");
            }
        }
    
        //敌机的自动调用
        enemy_controller = setInterval(springEnemy,3000);
        function springEnemy(){
            var count = parseInt((Math.random() * 10)/2);
            for (var i=0;i<count;i++){
                var enemy = new EnemyPlane();
            }
        }
    </script>
    </html>
    
    index控制HTML:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body><style type="text/css">
        #bg{
            background-color: blueviolet;width: 500px; height: 500px;border: red 1px solid;
    
        }
        #m{border:rebeccapurple 1px solid;background-color: red;width: 50px; height: 50px;}
    </style>
    <div id="bg">
        <div id="m"></div>
    </div>
    <div id="send"></div>
    <input type="button" value="开始"  onclick="startinterval()">
    <input type="button" value="结束"  onclick="closeinterval()">
    
    <script type="text/javascript">
    //    document.onkeydown =function (){
    //        var ke=event.keyCode;
    //        alert(ke);
    //    }
    var  i=0;
    var top_1=0;
    var endsetinterval;
        function getid()
    {
    //    i+=1document.getElementById("send"
    top_1+=5;
    
    
            document.getElementById("m").setAttribute("style","margin-top:"+top_1+"px;");
        }
    //    setTimeout(getid,1000);
    
    function  startinterval(){
    
        endsetinterval=setInterval(getid,1000);
    
    };
        function  closeinterval(){
            clearInterval(endsetinterval);
        }
    </script>
    </body>
    </html>

    2.敌机的飞机 JS代码

    /**
     * Created by mac on 2016-07-22.
     */
    /**
     * 使用闭包函数法不能实现相关功能。
     */
    (function (window) {
        //enemyType敌机1(d_j_1.gif):0,
        //敌机3(d_j_3.gif):1
        var enemy_top;
        var enemy_index;
        var EnemyPlane2 = function (enemyType) {
            enemy_index = enemyIndex;
            this.init(enemyType);
            enemy_top = this.initialEnemyTop();
            this.startMove();
        };
        EnemyPlane2.prototype.initialEnemyTop = function () {
    
            var Postion = $("#bg #" + enemy_index).css("top");
            Postion = Postion.substring(0, Postion.length - 2);
            Postion = parseInt(Postion);
            return Postion;
        };
        EnemyPlane2.prototype.init = function (enemyType) {
            var enemy = "<div class='enemyPlane' id='" + enemy_index + "'></div>";
            $("#bg").append(enemy);
            //Math.random();//生成一个0到1的随机数;
            //parseInt();//取整
            //$("#bg div:eq(0)").css("width"="72px");单个参数的用法
            var enemy_left = parseInt(Math.random() * (530 - 64));
            switch (enemyType) {
                case 0:
                    $("#bg #" + enemy_index).css({
                        "width": "47px",
                        "height": "72px",
                        "background": "url('./game_images/d_j_1.gif') no-repeat",
                        "left": enemy_left + "px"
                    });
                    break;
                case 1:
                    $("#bg #" + enemy_index).css({
                        "width": "64px",
                        "height": "56px",
                        "background": "url('./game_images/d_j_3.gif') no-repeat",
                        "left": enemy_left + "px"
                    });
                    break
            }
        };
        EnemyPlane2.prototype.startMove = function () {
            var planeHeight = $("#bg #" + enemy_index).css("height");
            planeHeight = planeHeight.substring(0, planeHeight.length - 2);
            planeHeight = parseInt(planeHeight);
            if ((enemy_top + planeHeight) > 598) {
                $("#bg #" + enemy_index).remove();//与empty()的区别在于是否将本身删除。它们的子元素都会被删除
    
            }
            else {
                //enemy_top += 3;
                //$("#bg #"+enemy_index).css("top",enemy_top + "px");
                $("#bg #" + enemy_index).animate({"top": (600 - planeHeight) + "px"}, 4000, function () {
                    $("#bg #" + enemy_index).hide();
                    $("#bg #" + enemy_index).remove();
                });
            }
        };
        window.EnemyPlane2 = EnemyPlane2;
    })(window);
    /**
     * 通过类的思想,实现飞机的控制;
     * @param enemyType
     * @constructor
     */
    function EnemyPlane() {
        var enemy_top;
        var enemy_type;
        var enemyId;
        init();
        function initialEnemyTop() {
            var Postion = $("#bg #e" + enemyId).css("top");
            Postion = Postion.substring(0, Postion.length - 2);
            Postion = parseInt(Postion);
            return Postion;
        }
    
        function init() {
            //随机生成飞机类型;
            enemy_type = (parseInt(Math.random() * 10) > 5) ? 0 : 1;
            //随机生成飞机id
            enemyId = parseInt(Math.random() * 10000);
            //向#bg中添加飞机;
            var enemy = "<div class='enemyPlane' id='e" + enemyId + "'></div>";
            $("#bg").append(enemy);
            //获取敌机的值;
            enemy_top = initialEnemyTop();
            //Math.random();//生成一个0到1的随机数;
            //parseInt();//取整
            //$("#bg div:eq(0)").css("width"="72px");单个参数的用法
            //随机生成敌机开始时的Left值
            var enemy_left = parseInt(Math.random() * (530 - 64));
            //根据随机出来的飞机类型,对飞机属性进行设置;
            switch (enemy_type) {
                case 0:
                    $("#bg #e" + enemyId).css({
                        "width": "47px",
                        "height": "72px",
                        "background": "url('./game_images/d_j_1.gif') no-repeat",
                        "left": enemy_left + "px"
                    });
                    break;
                case 1:
                    $("#bg #e" + enemyId).css({
                        "width": "64px",
                        "height": "56px",
                        "background": "url('./game_images/d_j_3.gif') no-repeat",
                        "left": enemy_left + "px"
                    });
                    break;
            }
            //敌机开始移动
            startMove();
        }
    
        //敌机开始移动
        function startMove() {
            //获取敌机的高度
            var planeHeight = $("#bg #e" + enemyId).css("height");
            planeHeight = planeHeight.substring(0, planeHeight.length - 2);
            planeHeight = parseInt(planeHeight);
            //获取敌机的宽度
            var planeWidth = $("#bg #e" + enemyId).css("width");
            planeWidth = planeWidth.substring(0, planeWidth.length - 2);
            planeWidth = parseInt(planeWidth);
            //随机获取敌机的Left(只有飞机走折线时采用)
            var planeLeft = parseInt(Math.random() * (530 - planeWidth));
            //随机敌机是走折线,还是走直线;
            if (parseInt(Math.random() * 10) > 5) {
                $("#bg #e" + enemyId).animate({"top": (600 - planeHeight) + "px"}, 3000, function () {
                    var planeHeight1 = $("#bg #e" + enemyId).css("top");
                    planeHeight1 = planeHeight1.substring(0, planeHeight1.length - 2);
                    planeHeight1 = parseInt(planeHeight1);
                    enemyDismiss();
                });
            }
            else {
                //走折线时,第一次位置变化
                $("#bg #e" + enemyId).animate({"top": (300 - planeHeight) + "px", "left": "1px"}, 1500, 'linear');
                //第二次位置变化
                $("#bg #e" + enemyId).animate({
                    "top": (600 - planeHeight) + "px",
                    "left": planeLeft + "px"
                }, 1500, 'linear', function () {
                    //销毁敌机
                    enemyDismiss();
                });
            }
        }
    
        //销毁敌机
        function enemyDismiss() {
            $("#bg #e" + enemyId).hide();
            $("#bg #e" + enemyId).remove();
        }
    
        function getEnemyPosition() {
            var position_top = $("#bg #e" + enemyId).css("top");
            var position_left = $("#bg #e" + enemyId).css("left");
            var position = {"top": position_top, "left": position_left};
            return position;
        }

    3.子弹实现 JS

    /**
     * Created by mac on 2016-07-22.
     */
    /**
     * 使用闭包函数法不能实现相关功能。
     */
    (function (window) {
        //enemyType敌机1(d_j_1.gif):0,
        //敌机3(d_j_3.gif):1
        var enemy_top;
        var enemy_index;
        var EnemyPlane2 = function (enemyType) {
            enemy_index = enemyIndex;
            this.init(enemyType);
            enemy_top = this.initialEnemyTop();
            this.startMove();
        };
        EnemyPlane2.prototype.initialEnemyTop = function () {
    
            var Postion = $("#bg #" + enemy_index).css("top");
            Postion = Postion.substring(0, Postion.length - 2);
            Postion = parseInt(Postion);
            return Postion;
        };
        EnemyPlane2.prototype.init = function (enemyType) {
            var enemy = "<div class='enemyPlane' id='" + enemy_index + "'></div>";
            $("#bg").append(enemy);
            //Math.random();//生成一个0到1的随机数;
            //parseInt();//取整
            //$("#bg div:eq(0)").css("width"="72px");单个参数的用法
            var enemy_left = parseInt(Math.random() * (530 - 64));
            switch (enemyType) {
                case 0:
                    $("#bg #" + enemy_index).css({
                        "width": "47px",
                        "height": "72px",
                        "background": "url('./game_images/d_j_1.gif') no-repeat",
                        "left": enemy_left + "px"
                    });
                    break;
                case 1:
                    $("#bg #" + enemy_index).css({
                        "width": "64px",
                        "height": "56px",
                        "background": "url('./game_images/d_j_3.gif') no-repeat",
                        "left": enemy_left + "px"
                    });
                    break
            }
        };
        EnemyPlane2.prototype.startMove = function () {
            var planeHeight = $("#bg #" + enemy_index).css("height");
            planeHeight = planeHeight.substring(0, planeHeight.length - 2);
            planeHeight = parseInt(planeHeight);
            if ((enemy_top + planeHeight) > 598) {
                $("#bg #" + enemy_index).remove();//与empty()的区别在于是否将本身删除。它们的子元素都会被删除
    
            }
            else {
                //enemy_top += 3;
                //$("#bg #"+enemy_index).css("top",enemy_top + "px");
                $("#bg #" + enemy_index).animate({"top": (600 - planeHeight) + "px"}, 4000, function () {
                    $("#bg #" + enemy_index).hide();
                    $("#bg #" + enemy_index).remove();
                });
            }
        };
        window.EnemyPlane2 = EnemyPlane2;
    })(window);
    /**
     * 通过类的思想,实现飞机的控制;
     * @param enemyType
     * @constructor
     */
    function EnemyPlane() {
        var enemy_top;
        var enemy_type;
        var enemyId;
        init();
        function initialEnemyTop() {
            var Postion = $("#bg #e" + enemyId).css("top");
            Postion = Postion.substring(0, Postion.length - 2);
            Postion = parseInt(Postion);
            return Postion;
        }
    
        function init() {
            //随机生成飞机类型;
            enemy_type = (parseInt(Math.random() * 10) > 5) ? 0 : 1;
            //随机生成飞机id
            enemyId = parseInt(Math.random() * 10000);
            //向#bg中添加飞机;
            var enemy = "<div class='enemyPlane' id='e" + enemyId + "'></div>";
            $("#bg").append(enemy);
            //获取敌机的值;
            enemy_top = initialEnemyTop();
            //Math.random();//生成一个0到1的随机数;
            //parseInt();//取整
            //$("#bg div:eq(0)").css("width"="72px");单个参数的用法
            //随机生成敌机开始时的Left值
            var enemy_left = parseInt(Math.random() * (530 - 64));
            //根据随机出来的飞机类型,对飞机属性进行设置;
            switch (enemy_type) {
                case 0:
                    $("#bg #e" + enemyId).css({
                        "width": "47px",
                        "height": "72px",
                        "background": "url('./game_images/d_j_1.gif') no-repeat",
                        "left": enemy_left + "px"
                    });
                    break;
                case 1:
                    $("#bg #e" + enemyId).css({
                        "width": "64px",
                        "height": "56px",
                        "background": "url('./game_images/d_j_3.gif') no-repeat",
                        "left": enemy_left + "px"
                    });
                    break;
            }
            //敌机开始移动
            startMove();
        }
    
        //敌机开始移动
        function startMove() {
            //获取敌机的高度
            var planeHeight = $("#bg #e" + enemyId).css("height");
            planeHeight = planeHeight.substring(0, planeHeight.length - 2);
            planeHeight = parseInt(planeHeight);
            //获取敌机的宽度
            var planeWidth = $("#bg #e" + enemyId).css("width");
            planeWidth = planeWidth.substring(0, planeWidth.length - 2);
            planeWidth = parseInt(planeWidth);
            //随机获取敌机的Left(只有飞机走折线时采用)
            var planeLeft = parseInt(Math.random() * (530 - planeWidth));
            //随机敌机是走折线,还是走直线;
            if (parseInt(Math.random() * 10) > 5) {
                $("#bg #e" + enemyId).animate({"top": (600 - planeHeight) + "px"}, 3000, function () {
                    var planeHeight1 = $("#bg #e" + enemyId).css("top");
                    planeHeight1 = planeHeight1.substring(0, planeHeight1.length - 2);
                    planeHeight1 = parseInt(planeHeight1);
                    enemyDismiss();
                });
            }
            else {
                //走折线时,第一次位置变化
                $("#bg #e" + enemyId).animate({"top": (300 - planeHeight) + "px", "left": "1px"}, 1500, 'linear');
                //第二次位置变化
                $("#bg #e" + enemyId).animate({
                    "top": (600 - planeHeight) + "px",
                    "left": planeLeft + "px"
                }, 1500, 'linear', function () {
                    //销毁敌机
                    enemyDismiss();
                });
            }
        }
    
        //销毁敌机
        function enemyDismiss() {
            $("#bg #e" + enemyId).hide();
            $("#bg #e" + enemyId).remove();
        }
    
        function getEnemyPosition() {
            var position_top = $("#bg #e" + enemyId).css("top");
            var position_left = $("#bg #e" + enemyId).css("left");
            var position = {"top": position_top, "left": position_left};
            return position;
        }
    }
  • 相关阅读:
    课堂作业04 2017.10.27
    课程作业 03 动手动脑 2017.10.20
    课程作业 03 2017.10.20
    HDU 3974 Assign the task
    POJ 2155 Matrix
    POJ 2481 Cows
    HDU 3038 How Many Answers Are Wrong
    CS Academy Array Removal
    POJ_1330 Nearest Common Ancestors LCA
    CF Round 427 D. Palindromic characteristics
  • 原文地址:https://www.cnblogs.com/caozong/p/5721663.html
Copyright © 2011-2022 走看看