⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plane.java

📁 一款Java开发的打飞机小游戏
💻 JAVA
字号:
import java.util.Vector;

/**
 * 英雄飞机类
 * @author fantasyer
 * @version 1.0
 */
class Plane
{
    //飞机属性

    //飞机的xy坐标、图片宽度和高度、速度、生命值、类型
    int x, y, speed, life, kind;
    //得分
    static int score;
    //飞机图片的高度和宽度
    int width, height;
    //子弹的类型和子弹的等级
    int bulletType, bulletLevel;
    //是否显示
    boolean isVisible;
    //是否无敌
    boolean unbeatable;

    /**
     * 初始化飞机的相关属性
     */
    Plane()
    {
        kind = Utility.HERO;
        width = height = Utility.getSize(kind);
        x = (Utility.GAME_WIDTH-width)/2;
        y = Utility.GAME_HEIGHT-5;
        speed = Utility.HERO_SPEED;
        life = Utility.HERO_HP;
        bulletType = Utility.BULLET_2;
        bulletLevel = 1;
        isVisible = true;
        unbeatable = true;
    }

    /**
     * 控制飞机的移动
     * @param dir 飞机移动的方向
     */
    public void move(int dir)
    {
        if (dir==Utility.MOVE_LEFT)
        {
            x -= speed;
        }
        else if (dir==Utility.MOVE_RIGHT)
        {
            x += speed;
        }
        else if (dir==Utility.MOVE_DOWN)
        {
            y += speed;
        }
        else if (dir==Utility.MOVE_UP)
        {
            y -= speed;
        }
    }

    /**
     * 返回Boss发出的子弹
     * @return Object[]  发出的子弹数组
     */
    public Object[] getBullets()
    {
        Vector v = new Vector();
        if (bulletType==Utility.BULLET_2) //散弹
        {
            if (bulletLevel==1)
            {
                v.add(new Bullet(x+width/2-8, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
            }
            else if (bulletLevel==2)
            {
                v.add(new Bullet(x+width/2-8, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
                v.add(new Bullet(x+width/2-8, y+3, 30, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
                v.add(new Bullet(x+width/2-8, y+3, 330, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
            }
            else if (bulletLevel==3)
            {
                v.add(new Bullet(x+width/2-8, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
                v.add(new Bullet(x+width/2-8, y+3, 30, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
                v.add(new Bullet(x+width/2-8, y+3, 330, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
                v.add(new Bullet(x+width/2-8, y+3, 60, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
                v.add(new Bullet(x+width/2-8, y+3, 300, 20, 40, Utility.UP_MOVE,Utility.BULLET_2));
            }
        }
        else if (bulletType==Utility.BULLET_3) //垂直子弹
        {
            if (bulletLevel==1)
            {
                v.add(new Bullet(x+width/2-10, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
            }
            else if (bulletLevel==2)
            {
                v.add(new Bullet(x+width/2-20, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
                v.add(new Bullet(x+width/2, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
            }
            else if (bulletLevel==3)
            {
                v.add(new Bullet(x+width/2-20, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
                v.add(new Bullet(x+width/2, y+3, 0, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
                v.add(new Bullet(x, y-height/2, 270, 20, 40, Utility.UP_MOVE,Utility.BULLET_3));
                v.add(new Bullet(x+width, y-height/2, 90, 20, 40,Utility.UP_MOVE, Utility.BULLET_3));
            }
        }

        return v.toArray();
    }

    /**
     * 运动区域的边界检测
     */
    public void checkEdge()
    {
        if (x<0)
        {
            x = 0;
        }
        else if (x>(Utility.GAME_WIDTH-width))
        {
            x = Utility.GAME_WIDTH-width;
        }

        if (y<0)
        {
            y = 0;
        }
        else if (y>(Utility.GAME_HEIGHT-height))
        {
            y = Utility.GAME_HEIGHT-height;
        }
    }

    /**
     * 判断飞机和左上角为(x,y),宽width,高height的矩形是否相撞
     * @param x 矩形左上角x坐标
     * @param y 矩形左上角y坐标
     * @param width 矩形的宽度
     * @param height 矩形的高度
     * @return boolean 如果相撞返回true,否则返回false
     */
    public boolean isHit(int x, int y, int width, int height)
    {
        if ((x>=this.x+this.width)||(x+width<=this.x)||(y>=this.y+this.height)||(y+height<=this.y))
        {
            return false;
        }
        else
        {
            return true;
        }
    }

    /**
     * 判断飞机和圆心为(x,y),半径为r的圆型是否相撞(这里假设飞机的长度和宽度一样)
     * @param x 圆心的x坐标
     * @param y 圆心的y坐标
     * @param r 圆的半径
     * @return boolean 如果相撞返回true,否则返回false
     */
    public boolean isHit(int x, int y, int r)
    {
        double xcenter = this.x+width/2;
        double ycenter = this.y+height/2;

        double dis = (xcenter-x)*(xcenter-x)+(ycenter-y)*(ycenter-y);
        if (dis<(r+width/2)*(r+width/2))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    /**
     * 设置奖品类型
     * @param kind 英雄吃到的奖品类型
     */
    public void setAward(int kind)
    {
        if (kind==Utility.AWARD_1)
        {
            setBulletType(Utility.BULLET_2);
        }
        else if (kind==Utility.AWARD_2)
        {
            setBulletType(Utility.BULLET_3);
        }
        else if (kind==Utility.AWARD_3)
        {
            addLife(10);
        }
    }

    /**
     * 设置英雄的子弹类型
     * @param kind 英雄的子弹类型
     */
    public void setBulletType(int kind)
    {
        if (kind==bulletType) //如果相同,增加子弹的等级,最多到3级
        {
            if (bulletLevel==3)
            {
                return;
            }
            else
            {
                bulletLevel++;
            }
        }
        else //如果不同,修改子弹的类型,等级为一
        {
            bulletType = kind;
            bulletLevel = 1;
        }
    }

    /**
     * 获取子弹的类型
     * @return int 英雄当前子弹的类型
     */
    public int getBulletType()
    {
        return bulletType;
    }

    public boolean getVisible()
    {
        return isVisible;
    }

    public void setVisible(boolean value)
    {
        isVisible = value;
    }

    /**
     * 增加分数
     * @param value 分数增加的量
     */
    public void addScore(int value)
    {
        score += value;
    }

    public int getScore()
    {
        return score;
    }

    public int getLife()
    {
        return life;
    }

    /**
     * 降低生命值属性
     * @param value 生命值降低的量
     */
    public void desLife(int value)
    {
        //如果是无敌模式,则不掉生命值,比如飞机刚出生时
        if(unbeatable)
        {
            return;
        }
        life -= value;
        if (life<=0)
        {
            life = 0;
        }
    }

    /**
     * 增加生命值属性(不过还没有奖品能增加生命值)
     * @param value 生命值增加的量
     */
    public void addLife(int value)
    {
        life += value;
        if (life>=Utility.HERO_HP)
        {
            life = Utility.HERO_HP;
        }
    }

    /**
     * 设置飞机的生命值
     */
    public void setLife(int value)
    {
        life = value;
    }


    /**
     * 设置飞机是否无敌
     * @param value 飞机是否处于无敌状态
     */
    public void setUnbeatable(boolean value)
    {
        unbeatable = value;
    }

    /**
     * 获取
     * @return boolean 如果为真,则飞机处于无敌状态
     */
    public boolean getUnbeatable()
    {
        return unbeatable;
    }

    /**
     * 设置飞机的位置在默认的起始位置
     */
    public void setDefaultLocation()
    {
        x = (Utility.GAME_WIDTH-width)/2;
        y = Utility.GAME_HEIGHT-5;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -