射击游戏的需求:
1.所参与的角色:英雄机、子弹、小敌机、大敌机、小蜜蜂、天空
2.角色间的关系:
  1)英雄机发射子弹(单倍火力、双倍火力)
  2)子弹射击敌人(小敌机、大敌机、小蜜蜂),若击中了:
        2.1)子弹直接消失、敌人先爆破再消失
        2.2)若击中的是小敌机,则玩家得1分
       2.3)若击中的是大敌机,则玩家得3分
       2.4)若击中的是小蜜蜂,则英雄机得奖励(1条命或40火力值)
  3)敌人(小敌机、大敌机、小蜜蜂)和英雄机撞,若撞上了:
       3.1)敌人先爆破再消失
       3.2)英雄机减1条命,并且,清空火力值----命数为0时游戏结束
  4)英雄机、子弹、小敌机、大敌机、小蜜蜂都在天空上飞

射击游戏的设计步骤:
1、首先明确六个对象所应该具备的属性和行为

Hero

属性:

宽、高、x坐标、y坐标、火力、生命

行为:

  • 英雄机随着鼠标移动
  • 英雄机发射子弹

Airplane

属性:

宽、高、x坐标、y坐标

行为:

  • 小敌机与英雄机碰撞
  • 小敌机移动

2、创建六个类以及六个类对应的构造方法 

3、创建一个FlyingObject的超类,6个对象类继承超类

  • 将共有的属性和行为抽到超类中
  • 在超类中创建两个构造方法,6个对象类分别super调用
  • 在6个对象类中重写step()移动方法

4、画窗口:------Word类---CV大法

5、设计Images图片工具类

6、画对象:

1)想画对象,需要去获取对象的图片,每个对象都得获取图片, 意味着获取图片行为为共有行为,所以设计在超类FlyingObject中, 每个对象获取图片的行为都是不一样的,所以设计为抽象方法 ---在FlyingObject中设计抽象方法getImage()用于获取对象的图片

2)获取图片时需要考虑对象的状态,因为在不同的状态下获取的图片也是不同的, 每个对象都有状态,意味着状态为共有属性,所以设计在超类FlyingObject中, 状态一般都设计为常量,同时设计变量state表示当前状态 ----在FlyingObject中设计LIVE、DEAD、REMOVE状态常量,state变量表示当前状态 状态常量有了,在获取图片时还需要去判断状态,每个对象都得判断状态, 意味着判断状态行为为共有行为,所以设计在超类FlyingObject中, 每个对象判断状态的行为都是一样的,所以设计为普通方法 ----在FlyingObject中设计isLive()、isDead()、isRemove()来判断对象的状态

3)重写getImage()获取图片行为:

3.1)天空Sky: 直接返回sky图片即可

3.2)英雄机Hero: 直接返回heros[0]和heros[1]的来回切换

3.3)子弹Bullet:

3.3.1)若活着的,直接返回bullet图片即可
            3.3.2)若死了的,直接删除(不返回图片)

3.4)小敌机Airplane:

3.4.1)若活着的,直接返回airs[0]图片即可

3.4.2)若死了的,依次返回airs[1]到airs[4]爆破图,4后删除(不返回图片)

3.5)大敌机BigAirplane:

3.5.1)若活着的,直接返回bairs[0]图片即可

3.5.2)若死了的,依次返回bairs[1]到bairs[4]爆破图,4后删除(不返回图片)

3.6)小蜜蜂Bee:

3.6.1)若活着的,直接返回bees[0]图片即可

3.6.2)若死了的,依次返回bees[1]到bees[4]爆破图,4后删除(不返回图片)

4)图片有了则可以开画了 ----在world类中重写paint()画方法

7、敌人入场

1)敌人是由窗口产生的,所以在World类中创建nextOne()生成敌人对象

2)敌人入场为定时发生的,所以在run()中调用enterAction()实现敌人入场 在enterAction()中: 每400毫秒,获取敌人对象obj,enemies扩容,将obj装到enemies最后一个元素上

注意:在run()中调用enterAction()之后,需调用repaint()来重画

8、子弹入场

1)子弹是由英雄机发射出来的,所以在Hero类中创建shoot()生成子弹对象

2)子弹入场为定时发生的,所以在run()中调用shootAction()实现子弹入场 在shootAction()中: 每300毫秒,获取子弹数组对象bs,bullets扩容,将bs追加到bullets的末尾

9、飞行物移动

1)飞行物移动为对象所共有的行为,所以在FlyingObject中设计抽象方法step(),派生类重写

2)飞行物移动为定时发生的,所以在run()中调用stepAction()实现飞行物移动 在stepAction()中: 天空动,遍历敌人敌人动,遍历子弹子弹动

10、英雄机移动(随着鼠标动)

1)英雄机移动为英雄机的行为,所以在Hero中设计moveTo()英雄机移动

2)英雄机移动为事件触发的,所以在侦听器中重写mouseMoved()鼠标移动事件 在mouseMoved()中: 获取鼠标的x和y坐标,调用moveTo()实现英雄机移动

11、删除越界的敌人和子弹

1)在FlyingObject中设计isOutOfBounds()检测敌人是否越界 在Bullet中重写isOutOfBounds()检测子弹是否越界

2)删除越界敌人和子弹是定时发生的,所以在run()中调用outOfBoundsAction()删除越界敌人和子弹 在outOfBoundsAction()中: 遍历所有敌人,判断若敌人出界了,则将出界元素替换为最后一个元素,enemies缩容 遍历所有子弹,判断若子弹出界了,则将出界元素替换为最后一个元素,bullets缩容 4

12、设计EnemyScore得分接口,Airplane和BigAirplane实现接口 设计EnemyAward奖励接口,Bee实现接口

13、子弹与敌人的碰撞

1)在FlyingObject中设计isHit()检测碰撞、goDead()飞行物去死 在Hero中设计addLife()增命、addFire()增火力

2)子弹与敌人的碰撞为定时发生的,所以在run()中调用bulletBangAction()实现子弹与敌人的碰撞 在bulletBangAction()中: 遍历子弹得子弹,遍历敌人得敌人,判断若都活着并且还撞上了: 子弹去死、敌人去死 判断若被撞敌人为EnemyScore,则玩家得分 判断若被撞敌人为EnemyAward,则获取奖励类型,英雄机得奖励

14、画分和画命

1)在Hero中设计getLife()获取英雄机的命数

2)在World类的paint()中: 画分和画命

15、英雄机与敌人的碰撞

1)借用FlyingObject的isHit()检测碰撞、goDead()飞行物去死 在Hero中设计subtractLife()减命、clearFire()清空火力值

2)英雄机与敌人碰撞为定时发生的,所以在run()中调用heroBangAction()实现英雄机与敌人的碰撞 在heroBangAction()中: 遍历敌人得敌人,判断若都活着并且还撞上了: 敌人去死、英雄机减命、英雄机清空火力值

16、检测游戏结束

1)借用Hero的getLife()获取命数

2)检测游戏结束为定时发生的,所以在run()中调用checkGameOverAction()检测游戏结束 在checkGameOverAction()中: 判断若英雄机的命数<=0,表示游戏结束了,则将当前状态修改为游戏结束状态

17、画状态

1)在World中设计START、RUNNING、PAUSE、GAME_OVER状态常量,state变量表示当前状态 在Images中设计start、pause、gameover状态图,static块中初始化 在World类的paint()中: 设计在不同状态下画不同的图

2)设计那一堆action,为仅在运行状态下执行 设计英雄机随着鼠标移动,为仅在运行状态下执行

3)重写mouseClicked()鼠标点击事件: 启动状态变运行状态,游戏结束状态先清理现场再变启动状态 重写mouseExited()鼠标移出事件: 运行状态变暂停状态 重写mouseEntered()鼠标移入事件: 暂停状态变运行状态

飞机大战游戏设计步骤相关推荐

  1. Python实验,用pygame做飞机大战游戏设计

    飞机大战游戏设计 摘 要:根据课程要求,以及面向对象程序设计的编程思想,在Windows操作系统环境下,运用PyCharm编译程序,以Python语言为开发语言,最终实现飞机大战游戏相应的游戏操作功能 ...

  2. 【java毕业设计】基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码)——飞机大战游戏

    基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Eclipse的飞机大战游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. ...

  3. 基于python的飞机大战游戏设计与实现

    基于python的飞机大战游戏设计与实现,采用MySQL+pygame+Tkinter实现飞机大战游戏,主要功能有注册+登录+游戏初始化(开始游戏+游戏操作说明+版权信息)+游戏主界面[设置敌机种类并 ...

  4. python飞机大战功能模块图_基于Python的飞机大战游戏设计

    第 2 3 卷 第 1 期 2019年 3 月 扬 州 职 业 大 学 学 报 Journal of Yangzhou Polytechnic College Vol .23 No . 1 Mar . ...

  5. 基于IntelliJ IDEA的飞机大战游戏设计与实现

    目 录 1 引言 1 1.1 项目背景 1 2 国内外研究现状 3 1.3 项目主要工作 4 1.4 本文组织结构 6 2 开发平台与开发技术 7 1 IntelliJ IDEA简介 7 2. 2 I ...

  6. java飞机大战爆炸效果_Java飞机大战游戏设计与实现

    1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...

  7. java飞机大战编程_[源码和文档分享]Java飞机大战游戏设计与实现

    1 概述 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程中的一些窗口类库. ...

  8. 怎么用java做全民飞机大战_Java飞机大战游戏设计与实现

    1 概述 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程中的一些窗口类库. ...

  9. 飞机大战java代码_[源码和文档分享]Java飞机大战游戏设计与实现

    1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...

最新文章

  1. 遍历Repeater与ItemDataBound事件发现的几个问题。
  2. 菜单与工具条的同步 APP_STANDARD.SYNCHRONIZE
  3. Crazepony的理念
  4. jenkins 下载插件 一直失败_Jenkins安装与插件下载
  5. Java并发编程—schedule方法和scheduleAtFixedRate方法的区别
  6. 直接裂开!京东二面被问SpringBoot整合MongoDB,我不会啊
  7. 带父节点的平衡二叉树_Python算法系列—深度优先遍历算法【二叉树】
  8. Qt之问题: Unknown module(s) in QT: multimedia
  9. 【二分法】计蒜客:气球消消乐
  10. 名企面试官精讲典型编程题之C#篇
  11. 上验证cudnn是否安装成功_ubuntu18.04 安装cuda、cudnn、tensorflow和pytorch其实很简单...
  12. 程序员累了怎么办-兄弟连IT教育
  13. 2019年11月~2020年7月CCF会议列表-计算机视觉计算机图形学
  14. Python查找中国城市、省份
  15. java date 最小值_Java_Math/Date
  16. HDB3码编码规则通俗易懂讲解
  17. PS2汉化2 - 自制程序的运行与调试
  18. 关于打游戏ping值不稳定问题的解决经历(疑难篇)
  19. php8最新版本特性,PHP8 了解新特性
  20. 万能通用!权限系统就该这么设计!

热门文章

  1. 语义分割Backbone学习
  2. 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅
  3. 网络小说垂直搜索引擎
  4. CANopen学习笔记
  5. MrPeak大牛的 一键调试iOS Push
  6. harbor仓库的构建及简单使用(修订版)
  7. Father-Child
  8. blas daxpy dcopy函数的使用
  9. cas318488-02-7/分子式:C36H26N4O4/分子量:578.62/齐岳卟啉作为配体用于合成mof材料
  10. awk初中高级应用实例