• 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;
        }
    }
  • 相关阅读:
    LeetCode653. 两数之和 IV
    DFS
    DFS hdu 1016
    nyist 58 最小步数 BFS
    闭路电视监控系统
    闭路监控
    闭路电视
    恋爱的犀牛
    http://blog.163.com/db_teacher/blog/static/194540298201110723712407/
    2013=12=3 数据库实验七 数据控制实验(完整性部分)
  • 原文地址:https://www.cnblogs.com/caozong/p/5721663.html
Copyright © 2020-2023  润新知