JAVA课程设计-飞机大战

1.Gitee部分

项目git地址:https://gitee.com/alpha-beta2001/java-code/tree/master/PlaneWar
 提交记录:https://gitee.com/alpha-beta2001/java-code/commits/master

2.程序功能流程图

3.项目包设计

 

 

 

 

4.关键UML图

5.程序运行截图

 

 (项目已打包为exe文件)

6.部分项目代码

 鼠标监听部分:

  @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        
        //开始游戏判定区域
        if((e.getX()>145&&e.getX()<330&&e.getY()>350&&e.getY()<800))
        {
            if(this.bFrame.nPanel.plane.hp != 0) {
                this.bFrame.nPanel.isStart = true;
                this.bFrame.nPanel.hasBullet = true;
                this.bFrame.nPanel.hasEnemy = true;
                //this.bFrame.nPanel.plane.hasPlane = true;
                this.change = false;
            }
            
        }
        
        //主界面选择
        if(this.change == true)
        {
            //飞机选择
            if((e.getX()>0&&e.getX()<120&&e.getY()>560&&e.getY()<773))
            {
                if(this.bFrame.nPanel.plane.choose>1)
                {
                    this.bFrame.nPanel.plane.choose--;
//                    this.bFrame.nPanel.bts.get(this.bFrame.nPanel.i).choose--;
                    if(this.bFrame.nPanel.hasBullet == true)
                    System.out.println(this.bFrame.nPanel.bts.get(this.bFrame.nPanel.j).choose);
                }
            }
            else if((e.getX()>360&&e.getX()<480&&e.getY()>560&&e.getY()<773))
            {
                if(this.bFrame.nPanel.plane.choose<4)
                {
                    this.bFrame.nPanel.plane.choose++;
//                    this.bFrame.nPanel.bts.get(this.bFrame.nPanel.i).choose++;
//                    this.bFrame.nPanel.bts.get(this.bFrame.nPanel.i).ChooseType();
                    if(this.bFrame.nPanel.hasBullet == true)
                    System.out.println(this.bFrame.nPanel.bts.get(this.bFrame.nPanel.j).choose);
                }
            }
            
            //背景选择
            if((e.getX()>0&&e.getX()<120&&e.getY()>350&&e.getY()<413))
            {
                if(this.bFrame.nPanel.back.flag>1)
                {
                    this.bFrame.nPanel.back.flag--;
                }
            }
            if((e.getX()>360&&e.getX()<480&&e.getY()>350&&e.getY()<413))
            {
                if(this.bFrame.nPanel.back.flag<7)
                {
                    this.bFrame.nPanel.back.flag++;
                }
            }
        }
        
        //死亡对话框
        if(this.bFrame.nPanel.isDead == true)
        {
            //返回开始界面
            if((e.getX()>67&&e.getX()<405&&e.getY()>500&&e.getY()<606))
            {    
                this.bFrame.nPanel.isStart = false;
                this.bFrame.nPanel.isDead = false;
                this.bFrame.nPanel.hasBullet = false;
                this.bFrame.nPanel.bts.clear();
                this.bFrame.nPanel.hasEnemy = false;
                this.bFrame.nPanel.ens.clear();
                this.bFrame.nPanel.plane.hasPlane = true;
                this.bFrame.nPanel.plane.hp = 100;
                this.bFrame.nPanel.plane.i = 0;
                this.bFrame.nPanel.plane.mode = 1;
                this.bFrame.nPanel.plane.count = 0;
                this.change = true;
                

            }
        }
    }

 

  背景滚动部分:

    public void drawBack(Graphics g)
    {
        g.drawImage(this.Bg, 0, top-800, 480,800,null);
        g.drawImage(this.Bg, 0, top,480,800,null);
        time++;
        if(time == 10000) 
        {
            time = 0;
        }
        if(time%10==0) 
        {
           
            top++;
            if(top>=800)
            {
                top = 0;
            }
        }
    }

让背景每10毫秒下移1个像素

 道具绘制部分:

    public void drawItem(Graphics g)
    {
        g.drawImage(this.Image[index], x, y, width, height, null);
        
        if(this.bPanel.time%rspeed==0) //图片翻转速度
        {
            index++;
            if(index == this.Image.length)
            {
                index = 0;
            }
        }
        if(this.bPanel.time%speed==0) //下落速度
        {
            y++;
            if(y>=BFrame.pageHeigh)
            {
                this.bPanel.its.remove(this);
            }
        }
    }

 一些判定节点设置:

    public Boolean isStart = false; //控制开始动画
    public Boolean isDead = false;  //控制死亡动画
    public Boolean hasBullet = false; //控制子弹绘制
    public Boolean hasEnemy = false;  //控制敌机绘制

    public boolean hasPlane = true; //控制飞机绘制    

    public boolean change = true; //是否允许选择飞机或地图

    //道具元素控制
    public boolean hpUp = false;
    public boolean modeUp = false;
    public boolean planeChange = false;

 

7.改进与感想

1.内部成员使用public修饰,不够安全

2.没有成功实现一种飞机对应一种子弹类型

3.背景音乐没有成功实现循环播放,只有一些简单的打击音效

4.敌机路径单一

5.绘制不同子弹的代码较为繁琐

6.飞机在HP=0时瞬间吃到血包会触发伪两命bug

7.可以尝试使用数据库记录每个用户的分数,加入多人对战模式

8.可以尝试使用键盘操控

 

posted @ 2021-01-28 23:23  阿尔法个贝塔  阅读(313)  评论(0编辑  收藏  举报