首页 > 编程语言 > 详细

JAVA课程设计-飞机大战

时间:2020-01-09 15:00:01      阅读:163      评论:0      收藏:0      [点我收藏+]

JAVA课程设计-飞机大战

1.团队名称、团队成员介绍

1.1 团队名称:做个飞机哦

1.2团队成员介绍:

余俊良(组长):编写博客、游戏主界面设计与实现、英雄机与子弹类的实现、场景设计
林祥涛:游戏音效设计、玩家类编码与设计、小Boss类设计、ppt设计
高凯:画uml类图、积分榜设计、游戏道具定义实现、游戏状态设计

2.项目git地址

https://gitee.com/net_201821123052/Planewar.git

3.项目git提交记录截图

技术分享图片

4.前期调查及游戏介绍

玩家通过控制飞机发射子弹击中不同的敌机获取积分,击中快速移动的浮标获得奖励(获得双倍子弹奖励、生命值增加)。游戏过程伴随着背景音乐,而且击中敌机或生命耗尽后会产生相应音效。与敌机相撞则扣除生命值1点,直到生命值为0,游戏结束,玩法简单有趣,锻炼反应能力。

5.项目功能架构图、主要功能流程图

技术分享图片

6.面向对象设计包图、类图

包图

技术分享图片

类图

技术分享图片

7.项目运行截图

主界面显示

技术分享图片

英雄机

技术分享图片技术分享图片技术分享图片

普通敌机

技术分享图片

精英机

技术分享图片

小boss

技术分享图片

切换飞机

技术分享图片

双倍子弹模式

技术分享图片

排行榜

技术分享图片

奖励

技术分享图片

游戏结束

技术分享图片

8.项目关键代码

8.1鼠标事件

使用鼠标事件监听MouseAdapter对鼠标进行监听,当鼠标移动时获取鼠标的坐标,点击时开启游戏,鼠标移出窗体后游戏暂停,移入则继续。

        MouseAdapter m = new MouseAdapter() {
            // 鼠标移动事件
            public void mouseMoved(MouseEvent e) {// 鼠标坐标获取
                if (Running == state) {
                    hero.moveTo(e.getX(), e.getY());
                }
            }

            // 鼠标点击事件
            public void mouseClicked(MouseEvent e) {
                if (Start == state) {// 点击开始游戏
                    state = Running;
                } else if (Over == state) {// 游戏结束后点击重新开始
                    state = Start;
                    score = 0;// 积分,飞行物重置
                    hero = new Heroplane();
                    flyobj = new ArrayList<AbstractFlyingObject>();
                    bullets = new ArrayList<Bullet>();
                }
            }

            // 鼠标移出事件
            public void mouseExited(MouseEvent e) {
                if (Running == state) {// 移出窗体,游戏暂停
                    state = Pause;
                }
            }

            // 鼠标移入事件
            public void mouseEntered(MouseEvent e) {// 移回窗体,游戏继续
                if (Pause == state) {
                    state = Running;
                }
            }
        };

8.2双缓冲技术消除闪屏

闪屏的出现是因为在while循环中执行线程时每循环一次便会重绘一次,而update()方法即会先清理掉当前的画面再重新绘制新的画面。可以在内存中重新开辟新空间,作为后台图像,本应该在界面上进行清理与重绘现在内存中先实现,生成新画面,最后显示到屏幕上。

private Image offScreenImage = null;// 利用双缓冲技术消除屏幕闪烁
public void update(Graphics g) {
    if (offScreenImage == null) {
        offScreenImage = this.createImage(WIDTH, HEIGHT);
    }
    Graphics gOff = offScreenImage.getGraphics();
    paint(gOff);
    g.drawImage(offScreenImage, 0, 0, null);
}

8.3飞行物显示

通过根据状态不断重绘飞行物来达到动画效果

        Timer timer = new Timer();
        int timeGap = 10;// 设定时间隔
        timer.schedule(new TimerTask() {
            public void run() {
                if (state == Running) {
                    heroBulletEnter();// 英雄子弹的入场
                    enemyEnter();// 敌机的入场
                    enemyStep();// 敌机的移动
                    outBoundDel();// 删除越界(底)的敌机和子弹
                    enemyCrash();// 英雄机子弹与敌人相撞(子弹和敌机退场)
                    checkGame();// 检查游戏是否结束(敌机和英雄机相撞)
                }
                repaint();// 重画
            }
        }, timeGap, timeGap);// timeGap为每一次到下一次的触发间隔

9.项目代码扫描结果及改正

9.1第一次扫描结果

技术分享图片

9.2扫描修正

在所有的覆写方法前增加@Override注释
常量名应当全部大写,单词用下划线隔开
switch块中,每个case都应通过break/default来终止
方法内部单行注释,在被注释语句上方另一行使用//注释,多行注释使用/**/注释

9.3全部修正后结果

技术分享图片

10.项目总结

10.1不足

原先计划能够在完成单人模式的基础上增加联网模式,但是在基本完成单人模式后剩余的时间的确不够去实现联网。设计的敌机类型也不够多,道具类型也可以再增加。

10.2展望

在课设完成后利用课余时间增加网络模式,并在网络中进行线上合作与排行

JAVA课程设计-飞机大战

原文:https://www.cnblogs.com/yujun59/p/12168882.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!