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

    这是JS版本的飞机大战,和C#版本的思路相同,就是语言上有差别,用来巩固知识。可以将代码直接引入到HTML中就可以看到效果

    //编写背景对象
    function Background(width,height,X,Y){
        // 背景的宽度
        this.width=width;
        // 背景的高度
        this.height=height;
        // 背景的水平坐标
        this.X=X;
        // 背景的垂直坐标
        this.Y=Y;
        // 创建背景函数将背景存放在 draw属性上
        this.draw=(function(X,Y,width,height){
            var a=document.createElement("div");
            a.style.cssText="position:fixed;top:"+Y+"px;left:"+X+"px;"
            +width+"px;height:"+height+"px;background-color:aqua;";
            return a;
        })(this.X,this.Y,this.width,this.height);
        // 创建背景函数的绘制方法
        this.drawing=function(){
            document.body.appendChild(this.draw);
        }
    }
    //创建我方飞机对象
    function MyPlane(width,height,X,Y){
        // 背景的宽度
        this.width=width;
        // 背景的高度
        this.height=height;
        // 背景的水平坐标
        this.X=X;
        // 背景的垂直坐标
        this.Y=Y;
        // 创建我方飞机函数将背景存放在 draw属性上
        this.draw=(function(X,Y,width,height){
            var a=document.createElement("div");
            a.style.cssText="position:fixed;top:"+Y+"px;left:"+X+"px;"
            +width+"px;height:"+height+"px;background-color:aqua;";
            return a;
        })(this.X,this.Y,this.width,this.height);
        // 创建我方飞机函数的绘制方法
        this.drawing=function(){
            document.body.appendChild(this.draw);
        }
        // 创建飞机移动函数,同时进行边缘判断
        this.move=function(x,y){
            if(x>=620&&x<=1030){
                this.X = x;
            }
            if(y>=170&&y<=730){
                this.Y = y;
            }
            this.draw.style.cssText="position:fixed;top:"
            +(this.Y-this.height/2)+"px;left:"+(this.X-this.width/2)+
            "px;"+width+"px;height:"+height+"px;background-color:red;";
        }    
    }
    //创建子弹对象
    function MyZidan(width,height,X,Y,speed){
        //子弹的宽度
        this.width=width;
        //子弹的高度
        this.height=height;
        //子弹的水平坐标
        this.X=X;
        //子弹的垂直坐标
        this.Y=Y;
        //子弹的速度
        this.speed=speed;
        //将子弹dom存放在dram上
        this.draw=(function(X,Y,width,height){
            var a=document.createElement("div");
            a.style.cssText="position:fixed;top:"+Y+"px;left:"+X+"px;"
            +width+"px;height:"+height+"px;background-color:aqua;";
            return a;
        })(this.X,this.Y,this.width,this.height);
        //创建子弹函数的绘制方法
        this.drawing=function(){
            document.body.appendChild(this.draw);
        }
        //子弹移动函数
        this.move=function(){
            this.Y=this.Y-this.speed;
            this.draw.style.cssText="position:fixed;top:"
            +(this.Y-this.height/2)+"px;left:"+(this.X-this.width/2)+
            "px;"+width+"px;height:"+height+"px;background-color:red;";
        }
        //子弹删除函数
        this.remove=function(){
            document.body.removeChild(this.draw);
        }
    }
    //创建敌人飞机对象
    function EnemyPlane(width,height,X,Y,speed){
        //敌人飞机的宽度
        this.width=width;
        //敌人飞机的长度
        this.height=height;
        //敌人飞机的水平坐标
        this.X=X;
        //敌人飞机的垂直坐标
        this.Y=Y;
        //敌人飞机的速度
        this.speed=speed;
        //将敌人飞机dom存放在dram上
        this.draw=(function(width,height,X,Y){
            var a=document.createElement("div");
            a.style.cssText="position:fixed;top:"+Y+"px;left:"+X+"px;"
            +width+"px;height:"+height+"px;background-color:blue;";
            return a;
        })(this.width,this.height,this.X,this.Y);
        //创建敌人飞机函数的绘制方法
        this.drawing=function(){
            document.body.appendChild(this.draw);
        }
        //敌人飞机移动函数
        this.move=function(){
            this.Y=this.Y+this.speed;
            this.draw.style.cssText="position:fixed;top:"
            +(this.Y-this.height/2)+"px;left:"+(this.X-this.width/2)+
            "px;"+width+"px;height:"+height+"px;background-color:blue;";
        }
        //敌人飞机删除函数
        this.remove=function(){
            document.body.removeChild(this.draw);
        }
    }
    //创建单例类
    function SingleObjct(background,myPlane){
        //存放实例化背景对象
        this.background=background;
        //存放实例化我方飞机对象
        this.myPlane=myPlane;
        //存放我方飞机子弹对象列表
        this.myZidan=[];
        //添加子弹对象
        this.addZidan=function(){
            this.myZidan.push(new MyZidan(10,10,this.myPlane.X,this.myPlane.Y-20,2));
        }
        //绘制子弹函数
        this.drawMyZidan=function(){
            for(var i=0;i<this.myZidan.length;i++){
                this.myZidan[i].drawing();
            }
        }
        //子弹移动函数
        this.moveMyZidan=function(){
            for(var i=0;i<this.myZidan.length;i++){
                this.myZidan[i].move();
            }
        }
        //判断子弹是否出界,出界则将对象删除
        this.moveToBorderZidan=function(){
            for(var i=0;i<this.myZidan.length;i++){
                if(this.myZidan[i].Y<=150){
                    this.myZidan[i].remove();
                    this.myZidan.splice(i,1);
                    return;                
                }
            }
        }
        //存放敌人飞机对象列表
        this.ListEnemyPlane=[];
        //添加敌人飞机对象方法
        this.addEnemyPlany=function(X,Y){
            var a=new EnemyPlane(20,20,X,Y,2);
            a.drawing();
            this.ListEnemyPlane.push(a);
        }
        //绘制敌人飞机函数
        this.drawEnemyPlane=function(){
            for(var i=0;i<this.ListEnemyPlane.length;i++){
                this.ListEnemyPlane[i].drawing();
            }
        }
        //移动敌人飞机函数
        this.moveEnemyPlane=function(){
            for(var i=0;i<this.ListEnemyPlane.length;i++){
                this.ListEnemyPlane[i].move();
            }
        }
        //判断敌人飞机是否出界,出界就将其移除
        this.moveToBorderEnemyPlane=function(){
            for(var i=0;i<this.ListEnemyPlane.length;i++){
                if(this.ListEnemyPlane[i].Y>=740){
                    this.ListEnemyPlane[i].remove();
                    this.ListEnemyPlane.splice(i,1);
                }
            }
        }
        //判断子弹和敌人飞机是否向撞
        this.PZJC=function(){
            for(var i=0;i<this.myZidan.length;i++){
                for(var j=0;j<this.ListEnemyPlane.length;j++){
                    if(rectangle(this.myZidan[i].width,this.myZidan[i].height,this.myZidan[i].X,this.myZidan[i].Y,
                        this.ListEnemyPlane[j].width,this.ListEnemyPlane[j].height,
                        this.ListEnemyPlane[j].X,this.ListEnemyPlane[j].Y)){
                        this.myZidan[i].remove();
                        this.myZidan.splice(i,1);
                        this.ListEnemyPlane[j].remove();
                        this.ListEnemyPlane.splice(j,1);
                        return;
                    }
                }
            }
        }
    }
    //窗体加载
    window.onload=function(){
        var singleObjct=new SingleObjct(new Background(450,600,600,150),new MyPlane(40,40,100,100));
        singleObjct.background.drawing();
        singleObjct.myPlane.drawing();
        //鼠标移动事件
        window.onmousemove=function(event){
            singleObjct.myPlane.move(event.clientX,event.clientY);
        }
        //鼠标单击事件
        window.onclick=function(event){
            singleObjct.addZidan();
            singleObjct.drawMyZidan();  
        }
        //间隔时间触发函数,10毫秒触发一次
        var timer = setInterval(function(){               
            singleObjct.moveToBorderZidan();
            singleObjct.moveMyZidan();
            singleObjct.moveToBorderEnemyPlane();
            singleObjct.moveEnemyPlane();
            singleObjct.PZJC();
            if(singleObjct.ListEnemyPlane.length<6){
                singleObjct.addEnemyPlany(getRandomX(),getRandomY());
            }        
    
        },10)
    }
    //随机生成水平坐标
    function getRandomX(){
        return ~~(Math.random()*430+600)
    }
    //随机生成垂直坐标
    function getRandomY(){
        return ~~(Math.random()*200+110)
    }
    //判断矩形重合
    function rectangle(width1,height1,X1,Y1,width2,height2,X2,Y2){
        var rectangleX1=X1+width1/2;
        var rectangleY1=Y1+height1/2;
        var rectangleX2=X2+width2/2;
        var rectangleY2=Y2+height2/2;
        var X=Math.abs(rectangleX1-rectangleX2);
        var Y=Math.abs(rectangleY1-rectangleY2);
        if(2*X<width1+width2&&2*Y<height1+height2){
            return true;
        }
        return false;
    }

  • 相关阅读:
    字符串初始化、查找字符+获取字符
    冒泡排序
    JAVA中值类型和引用类型的不同?
    二维数组初始化,属性,遍历,输出各元素总和。
    数组定义属性遍历循环,输出最大数
    for穷举,叠代练习
    HTML--Boby部分之<a>标签
    HTML--Boby内标签之多行文本及下拉框
    HTML--Boby部分Input之重置
    HTML--Boby部分Input之上传文件
  • 原文地址:https://www.cnblogs.com/niaofei123/p/14002026.html
Copyright © 2011-2022 走看看