一、简介

  还记得许多年前的春天,你本人一同“自慰”。

  那就联手写个打飞机游戏吧:

jQuery 1 jQuery 2 jQuery 3

 

二、HTML内容

  HTML 基础知识戳那

  HTML内容把须要的图形能源以相应标签格式写出即可,分为以下几有个别:

    •   背景图片
    •   自身战机的图样
    •   子弹的图纸
    •   敌机的图形
    •   敌机挂了的图片
    •       计算分数的职位留给

jQuery 4jQuery 5

<base href="http://images.cnblogs.com/cnblogs_com/suoning/860380/" />

<div class="bg">
    <div class="me-plan"></div>
    <div id="play_num"></div>
    <div class="bullet">
        <img src="o_cartridge.png">
    </div>
    <div class="x">
        <img class="lift" src="o_plain1.png">
        <img class="die" src="o_die1.png">
    </div>
    <div class="x2">
        <img class="lift" src="o_plain2.png">
        <img class="die" src="o_die2.png">
    </div>
</div>

HTML代码

 

三、CSS布局

  CSS基础知识戳那

  CSS代码块只需把HTML代码块的图形进度简单布局,分以下几有个别:

    •   背景图片的宽与高、居中、边框、超出边界隐藏、relative相对定位
    •   自个儿战机的宽与高、absolute相对父级定位与z-index优先级最高
    •   自身战机暗中同意隐藏,游戏开首则滑出
    •   子弹、敌机的absolute相对父级定位
    •   子弹、敌机的默许隐藏,游戏开首则经过仿制显示
    •   敌机与世长辞的图片定位与隐藏
    •   分数的字体大小设置及固定

jQuery 6jQuery 7

<base href="http://images.cnblogs.com/cnblogs_com/suoning/860380/" />

<style>
        .bg {
            background-image: url("o_bg.jpg");
            height: 500px;
            width: 300px;
            position: relative;
            margin-left: 40%;
            margin-top: 5%;
            overflow: hidden;
            border: 1px;
        }

        .me-plan {
            width: 99px;
            height: 112px;
            background-image: url("o_me.png");
            position: absolute;
            top: 80%;
            left: 35%;
            display: none;
            z-index: 666;
        }

        .bullet {
            position: absolute;
            display: none;
            left: -10px;
        }

        .x, .x2 {
            position: absolute;
            display: none;
        }

        .lift {
            position: absolute;
            top: -110px;
        }

        .die {
            display: none;
        }

        #play_num {
            font-size: 30px;
        }
    </style>

CSS代码

 

四、jQuery 代码块

  JavaScript基础知识戳那DOM相关戳那jQuery全套戳那

   jQuery代码块是先后的显要实现部分:

    •   本身战机得须求随着鼠标移动
    •   自个儿战机移动的同时子弹也要求同时做相对固定的移位
    •   敌机随机从上到下移动
    •   敌机若与子弹相碰,则炸毁,相应分数扩大

 

① 、程序所需值与预约义

程序在一从头就亟须得到相应的值,以便之后调用

背景的宽与高 :判断自身战机是或不是超越边界,就算当先则一定在边界内某一块;

温馨战机的宽与高:也做超出边界固定的意义,加上这一个值更纯粹;

背景图片相对父元素的距离:那些值也得以说背景图片相对body的离开,因为急需持续赢得鼠标的坐标,来分明自个儿战机的职位,鼠标的坐标减去那几个值就是因素相对父级成分的距离;

还需求预订义一些值:

play_num:游戏的得分,暗中同意定位0;

FD = {}:定义一个”字典”,存放种种敌机的对象与对于标签,用于判断碰撞。

    var dwidth = $('.bg').width();      // 背景的宽与高
    var dheight = $('.bg').height();
    var fwidth = $('.me-plan').width(); // 自己战机的宽与高
    var fheight = $('.me-plan').height();
    var zwidth = $('.bullet').width();  // 子弹的宽与高
    var zheight = $('.bullet').height();
    var t = $('.bg').offset().top;      // 背景相对父元素的距离
    var l = $('.bg').offset().left;
    var FD = {};        // 存放敌的的对象,封装坐标及标签
    var play_num = 0;   // 计算分数

 

② 、鼠标移动事件

  自个儿战机须要持续跟着鼠标走,全体必须定义鼠标移动事件;

  event.clientX与event.clientY分别为鼠标的x和y轴距离;

  判断尽管过量边界,则战机固定地方;

  鼠标地点坐相应处理正是战机的职分(实时)。

$(".me-plan").mousemove(function m(event) {
        /*
         鼠标移动事件
         */
        var x = event.clientX - fwidth / 2;
        var y = event.clientY - fheight / 2;
        MovePlanM(x - l, y - t);
    })

    function MovePlanM(x, y) {
        /*
         战机随鼠标移动
         */
        if (x >= dwidth) {
            x = dwidth - fwidth;
        } else if (y >= dheight) {
            y = dheight - fheight;
        }
        $('.me-plan').css({
            "top": y + "px",
            "left": x + "px",
        });
    }

 

3、随机值

   每一趟敌机出现的x轴地方是例外的,全部必要写二个无限制数函数;

  能够以做为出现敌机的体系,小飞机与大飞机。

function Randmon() {
        /*
         用于随机生成x轴与敌机型号
         */
        var num_one = Math.random();
        var num_two = num_one * 100;
        if (num_two < 80) {
            num_two += 100;
        }
        num_stree = Math.round(Math.abs(num_two));
        return num_stree
    }

 

4、敌机类

  三回能够出现贰个之上敌机,而敌机属性都类似,所有需求写三个类;

  三个参数,分别为x轴,y轴,还有敌机的档次;

  通过仿制再插入对应标签实现多个敌机;

  通过定时器使y轴自加,使敌机不断向下移动;

  判断借使超出背景,则甘休定时器,删除相应标签;

  把指标都出席FD字典中;

  注意:定时器为单独函数,不属于类,所以供给选拔继承。

function FoePlan(x, y, BB) {
        /*
         克隆及移动敌机
         */
        this.x = x;
        this.y = y;
        this.BB = BB;
        this.Clone = function () {
            var objj = $(this.BB).first().clone(true).appendTo(".bg").css("display", "block");
            var s2 = setInterval(MovePlanFirst, 100);

            function MovePlanFirst() {
                FoePlan.call(this, x, y, BB);     // 类的继承
                var dic = [this.x, this.y, objj];
                FD[this] = dic;
                RemovePlan(this.y, s2, objj);
                y += 20;
                objj.css({
                    "top": this.y + "px",
                    "left": this.x + "px",
                })
            }
        }
    }

    function RemovePlan(y, s2, objj) {
        /*
         用于删除出镜的敌机
         */
        if (y > 600) {
            clearInterval(s2);
            $(objj).remove();
        }
    }

 

伍 、子弹相关

  八个参数,分别为本人战机x轴与y轴坐标,用于跟着战机相对移动;

  定时器让y轴坐标自减,对应的子弹会向来稳中有升;

  子弹超出边界则删除定时器与相应标签;

  循环读取FD字典,获得各种敌机的坐标,判断碰撞则爆炸效果,并脱离;

  假设击落敌机对应分数扩张;

  击落敌机删除相应标签与FD中的值。

function MoveBullet(x, y) {
        /*
         克隆及移动子弹、判断子弹是否射到敌机
         */
        var obj = $('.bullet').first().clone(true).appendTo(".bg").css("display", "block");
        var s1 = setInterval(function () {
            for (var item in FD) {      // 判断子弹是否射到敌机
                var xx = FD[item][0];
                var yy = FD[item][1];
                var objj = FD[item][2];
                var flag = false;

                if ((xx < x) && (x < (xx + 60)) && (yy < y) && ( y < (yy + 60))) {
                    $(objj).children().first().css("display", "none");
                    $(objj).children().last().css("display", "block").fadeOut("1600").fadeTo("slow", 0);
                    play_num += 10;
                    $('#play_num').text(play_num);
                }
                if (flag) {
                    $(objj).remove();
                    flag = false;
                }
            }
            RemoveBullet(y, s1, obj);
            y -= 20;
            obj.css({
                "top": (y) + "px",
                "left": x + "px",
            })
        }, 100);
    }

    function RemoveBullet(y, s1, obj) {
        /*
         删除超出边界的子弹
         */
        if (y < 0) {
            clearInterval(s1);
            $(obj).remove();
        }
    }

 

陆 、运行程序

  页面加载成功则初阶运维游戏;

  定时器获取本身战机的坐标,并传给子弹,让子弹不断开炮;

  定时器获取随机值,并传给敌机类,让敌机不断涌现。

    $(function () {
        /*
         页面加载完成初始化开始游戏
         */
        $(".me-plan").slideDown("900");
        setInterval(function () {
            var x = $(".me-plan").position().left + fwidth / 2;
            var y = $(".me-plan").position().top;
            MoveBullet(x, y);
        }, 200);
        setInterval(function () {
            var n = Randmon();
            if (n > 130) {
                var shape = '.x';
            } else {
                var shape = '.x2';
            }
            var obj = new FoePlan(n, 0, shape);
            obj.Clone();
        }, 1500);

    });

 

 ⑤ 、完整代码

 注:访问代码里图片路径需加前缀:

http://images.cnblogs.com/cnblogs_com/suoning/860380/ + 图片名字

jQuery 8jQuery 9

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>外挂版打飞机 Nick Suo</title>
    <base href="http://images.cnblogs.com/cnblogs_com/suoning/860380/"/>
    <style>
        .bg {
            background-image: url("o_bg.jpg");
            height: 500px;
            width: 300px;
            position: relative;
            margin-left: 40%;
            margin-top: 5%;
            overflow: hidden;
            border: 1px;
        }

        .me-plan {
            width: 99px;
            height: 112px;
            background-image: url("o_me.png");
            position: absolute;
            top: 80%;
            left: 35%;
            display: none;
            z-index: 666;
        }

        .bullet {
            position: absolute;
            display: none;
            left: -10px;
        }

        .x, .x2 {
            position: absolute;
            display: none;
        }

        .lift {
            position: absolute;
            top: -110px;
        }

        .die {
            display: none;
        }

        #play_num {
            font-size: 30px;
        }
    </style>
</head>
<body>
<div class="bg">
    <div class="me-plan"></div>
    <div id="play_num"></div>
    <div class="bullet">
        <img src="o_cartridge.png">
    </div>
    <div class="x">
        <img class="lift" src="o_plain1.png">
        <img class="die" src="o_die1.png">
    </div>
    <div class="x2">
        <img class="lift" src="o_plain2.png">
        <img class="die" src="o_die2.png">
    </div>
</div>


<script src="../jquery-1.12.4.js"></script>
<script>
    /*
     build time: Jul 28,2016 23:59
     author: Nick Suo
     email: 630571017@qq.com
     */
    var dwidth = $('.bg').width();      // 背景的宽与高
    var dheight = $('.bg').height();
    var fwidth = $('.me-plan').width(); // 自己战机的宽与高
    var fheight = $('.me-plan').height();
    var zwidth = $('.bullet').width();  // 子弹的宽与高
    var zheight = $('.bullet').height();
    var t = $('.bg').offset().top;      // 背景相对父元素的距离
    var l = $('.bg').offset().left;
    var FD = {};        // 存放敌的的对象,封装坐标及标签
    var play_num = 0;   // 计算分数


    $(".me-plan").mousemove(function m(event) {
        /*
         鼠标移动事件
         */
        var x = event.clientX - fwidth / 2;
        var y = event.clientY - fheight / 2;
        MovePlanM(x - l, y - t);
    })

    function MovePlanM(x, y) {
        /*
         战机随鼠标移动
         */
        if (x >= dwidth) {
            x = dwidth - fwidth;
        } else if (y >= dheight) {
            y = dheight - fheight;
        }
        $('.me-plan').css({
            "top": y + "px",
            "left": x + "px",
        });
    }

    $(function () {
        /*
         页面加载完成初始化开始游戏
         */
        $(".me-plan").slideDown("900");
        setInterval(function () {
            var x = $(".me-plan").position().left + fwidth / 2;
            var y = $(".me-plan").position().top;
            MoveBullet(x, y);
        }, 200);
        setInterval(function () {
            var n = Randmon();
            if (n > 130) {
                var shape = '.x';
            } else {
                var shape = '.x2';
            }
            var obj = new FoePlan(n, 0, shape);
            obj.Clone();
        }, 1500);

    });

    function MoveBullet(x, y) {
        /*
         克隆及移动子弹、判断子弹是否射到敌机
         */
        var obj = $('.bullet').first().clone(true).appendTo(".bg").css("display", "block");
        var s1 = setInterval(function () {
            for (var item in FD) {      // 判断子弹是否射到敌机
                var xx = FD[item][0];
                var yy = FD[item][1];
                var objj = FD[item][2];
                var flag = false;

                if ((xx < x) && (x < (xx + 60)) && (yy < y) && ( y < (yy + 60))) {
                    $(objj).children().first().css("display", "none");
                    $(objj).children().last().css("display", "block").fadeOut("1600").fadeTo("slow", 0);
                    play_num += 10;
                    $('#play_num').text(play_num);
                }
                if (flag) {
                    $(objj).remove();
                    flag = false;
                }
            }
            RemoveBullet(y, s1, obj);
            y -= 20;
            obj.css({
                "top": (y) + "px",
                "left": x + "px",
            })
        }, 100);
    }

    function RemoveBullet(y, s1, obj) {
        /*
         删除超出边界的子弹
         */
        if (y < 0) {
            clearInterval(s1);
            $(obj).remove();
        }
    }

    function FoePlan(x, y, BB) {
        /*
         克隆及移动敌机
         */
        this.x = x;
        this.y = y;
        this.BB = BB;
        this.Clone = function () {
            var objj = $(this.BB).first().clone(true).appendTo(".bg").css("display", "block");
            var s2 = setInterval(MovePlanFirst, 100);

            function MovePlanFirst() {
                FoePlan.call(this, x, y, BB);     // 类的继承
                var dic = [this.x, this.y, objj];
                FD[this] = dic;
                RemovePlan(this.y, s2, objj);
                y += 20;
                objj.css({
                    "top": this.y + "px",
                    "left": this.x + "px",
                })
            }
        }
    }

    function RemovePlan(y, s2, objj) {
        /*
         用于删除出镜的敌机
         */
        if (y > 600) {
            clearInterval(s2);
            $(objj).remove();
        }
    }

    function Randmon() {
        /*
         用于随机生成x轴与敌机型号
         */
        var num_one = Math.random();
        var num_two = num_one * 100;
        if (num_two < 80) {
            num_two += 100;
        }
        num_stree = Math.round(Math.abs(num_two));
        return num_stree
    }

</script>
</body>
</html>

View Code

 

不停更新中…

相关文章

网站地图xml地图