飞机Demo

1.设计了6个对象类,设计World类并测试

1.给6个对象类添加构造方法,并测试

1.设计小敌机数组、大敌机数组、小蜜蜂数组、子弹数组,并测试
2.设计FlyingObject超类,6个对象类继承超类
3.在FlyingObject中设计两个构造方法,6个对象类分别super()调用

1.将小敌机数组、大敌机数组、小蜜蜂数组,统一组合为FlyingObject数组,并测试
2.在6个对象类中重写step()移动方法
3.画窗口:------Word类—CV大法
1)import JFrame+JPanel
2)设计World类继承JPanel
3)main中代码:Ctrl C/V
4)frame.setSize()中的参数修改为400,700

1.给类中成员添加访问控制修饰符
2.设计Images图片工具类

1.设计窗口的宽和高为常量,适当地方做修改
2.画对象:
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()画方法

1.敌人入场:
1)敌人是由窗口产生的,所以在World类中创建nextOne()生成敌人对象
2)敌人入场为定时发生的,所以在run()中调用enterAction()实现敌人入场
在enterAction()中:
每400毫秒,获取敌人对象obj,enemies扩容,将obj装到enemies最后一个元素上
注意:在run()中调用enterAction()之后,需调用repaint()来重画
2.子弹入场:
1)子弹是由英雄机发射出来的,所以在Hero类中创建shoot()生成子弹对象
2)子弹入场为定时发生的,所以在run()中调用shootAction()实现子弹入场
在shootAction()中:
每300毫秒,获取子弹数组对象bs,bullets扩容,将bs追加到bullets的末尾

1.飞行物移动:
1)飞行物移动为对象所共有的行为,所以在FlyingObject中设计抽象方法step(),派生类重写
2)飞行物移动为定时发生的,所以在run()中调用stepAction()实现飞行物移动
在stepAction()中:
天空动,遍历敌人敌人动,遍历子弹子弹动
2.英雄机移动(随着鼠标动):
1)英雄机移动为英雄机的行为,所以在Hero中设计moveTo()英雄机移动
2)英雄机移动为事件触发的,所以在侦听器中重写mouseMoved()鼠标移动事件
在mouseMoved()中:
获取鼠标的x和y坐标,调用moveTo()实现英雄机移动
3.删除越界的敌人和子弹:
1)在FlyingObject中设计isOutOfBounds()检测敌人是否越界
在Bullet中重写isOutOfBounds()检测子弹是否越界
2)删除越界敌人和子弹是定时发生的,所以在run()中调用outOfBoundsAction()删除越界敌人和子弹
在outOfBoundsAction()中:
遍历所有敌人,判断若敌人出界了,则将出界元素替换为最后一个元素,enemies缩容
遍历所有子弹,判断若子弹出界了,则将出界元素替换为最后一个元素,bullets缩容
4.设计EnemyScore得分接口,Airplane和BigAirplane实现接口
设计EnemyAward奖励接口,Bee实现接口

1.子弹与敌人的碰撞:
1)在FlyingObject中设计isHit()检测碰撞、goDead()飞行物去死
在Hero中设计addLife()增命、addFire()增火力
2)子弹与敌人的碰撞为定时发生的,所以在run()中调用bulletBangAction()实现子弹与敌人的碰撞
在bulletBangAction()中:
遍历子弹得子弹,遍历敌人得敌人,判断若都活着并且还撞上了:
子弹去死、敌人去死
判断若被撞敌人为EnemyScore,则玩家得分
判断若被撞敌人为EnemyAward,则获取奖励类型,英雄机得奖励
2.画分和画命:
1)在Hero中设计getLife()获取英雄机的命数
2)在World类的paint()中: 画分和画命

1.英雄机与敌人的碰撞:
1)借用FlyingObject的isHit()检测碰撞、goDead()飞行物去死
在Hero中设计subtractLife()减命、clearFire()清空火力值
2)英雄机与敌人碰撞为定时发生的,所以在run()中调用heroBangAction()实现英雄机与敌人的碰撞
在heroBangAction()中:
遍历敌人得敌人,判断若都活着并且还撞上了:
敌人去死、英雄机减命、英雄机清空火力值
2.检测游戏结束:
1)借用Hero的getLife()获取命数
2)检测游戏结束为定时发生的,所以在run()中调用checkGameOverAction()检测游戏结束
在checkGameOverAction()中:
判断若英雄机的命数<=0,表示游戏结束了,则将当前状态修改为游戏结束状态
3.画状态:
1)在World中设计START、RUNNING、PAUSE、GAME_OVER状态常量,state变量表示当前状态
在Images中设计start、pause、gameover状态图,static块中初始化
在World类的paint()中: 设计在不同状态下画不同的图
2)设计那一堆action,为仅在运行状态下执行
设计英雄机随着鼠标移动,为仅在运行状态下执行
3)重写mouseClicked()鼠标点击事件:
启动状态变运行状态,游戏结束状态先清理现场再变启动状态
重写mouseExited()鼠标移出事件:
运行状态变暂停状态
重写mouseEntered()鼠标移入事件:
暂停状态变运行状态

射击游戏重新做:
1)设计FlyingObject、EnemyScore、EnemyAward、Images---------设计属性、构造方法
2)设计6个对象类,继承、实现--------------------------------设计属性、构造方法
3)设计World类(先设计窗口中的对象)、画窗口、画对象、完成功能

飞机和蜜蜂之间的战争(库奇)相关推荐

  1. 曾经的王者,英勇投弹手库奇中单攻略

    曾经的王者,英勇投弹手库奇中单攻略作者:超鬼偶像发布时间:2013-07-10最近更新:2013-07-102433131水晶:+0攻略评分: 5.6326人参与评分 攻略速成 出门装备+NOTES ...

  2. 程序员之间的战争 战场是用户电脑

    今天看到刘韧老大写的 "日俄"在我机器打起来了,便想起来写这样一篇文字. 尽管现在流氓软件与查杀工具之间的斗争被看做一些公司之间的争斗,目的是商业的利益.但我却愿意从另外一个角度来 ...

  3. GBK和UTF-8之间的战争,websphere6.1乱码解决方案

    战争,折磨的都是码农... 1.Tomcat默认编码,ISO8859_1, 2.websphere6.1我自定义编码GBK 3.旧项目编码GBK, 4.新项目编码utf-8 这是背景 旧项目发出请求, ...

  4. 程序员之间的战争,某宁测试和开发干架,鼠标线勒脖子都来了

    程序员的职业也细分为很多种,有开发,测试等等,在这下面又会根据应用场景等细分为不同的职位.了解互联网行业的人可能知道,测试和开发虽然都属于程序员职业,但二者往往会有利益冲突.开发负责写代码,而测试负责 ...

  5. 程序员之间的战争,某宁测试和开发干架,鼠标线勒脖子都来了!

    程序员的职业也细分为很多种,有开发,测试等等,在这下面又会根据应用场景等细分为不同的职位.了解互联网行业的人可能知道,测试和开发虽然都属于程序员职业,但二者往往会有利益冲突.开发负责写代码,而测试负责 ...

  6. 爬虫与反爬虫之间的战争

    编者:本文来自携程酒店研发部研发经理崔广宇在第三期[携程技术微分享]上的分享,以下为整理的内容概要.墙裂建议点击视频回放,"现场"围观段子手攻城狮大崔,如何高智商&高情商地 ...

  7. 领域应用 | 完备的娱乐行业知识图谱库如何建成?爱奇艺知识图谱落地实践

    转载公众号 | 爱奇艺技术产品团队 2012年5月16日,谷歌首次正式提出了知识图谱的概念,希望利用结构化知识,来增强搜索引擎,提高搜索质量和用户体验. 也就是说,从诞生之日起,知识图谱就和搜索引擎密 ...

  8. SAP WM 共用同一个仓库号的2个存储地点之间转库

    SAP WM 共用同一个仓库号的2个存储地点之间转库 工厂代码NMDC下2个存储地点0001和0002,对应的Warehouse Number都是NM1. 本文展示的是如果在存储地点0001和0002 ...

  9. Bankless:OpenSea 和 Blur 之间的市场战争才刚刚开始

    作者:Donovan Choy 来源:Bankless 编译:DeFi 之道 OpenSea 多年来的市场主导地位几乎是绝对的,这使得 Blur 的惊人崛起更加令人印象深刻.这个新兴的 NFT 市场仍 ...

最新文章

  1. qt udp多线程收发过程_! udp多线程的有关问题
  2. 服务器同时装mysql和sqlserver_Centos创建syslog服务器
  3. Takeown--夺取文件or文件夹所有权
  4. django框架中的模型
  5. 如何把极坐标化为直角坐标_2019高考100题之063(极坐标)
  6. structs中国际化小结
  7. 利用curl去hack他人博客
  8. Spark环境搭建(下)——Spark安装
  9. IDL where函数与array_indices函数
  10. python 打开文件夹与开启文件的几种方式
  11. Ring3与Ring0的通信
  12. python异常大总结
  13. “你公众号被封了!”
  14. 教你如何在社会上“混”
  15. 计算机科学与技术3d仿真设计,三维仿真
  16. 如何利用python解方程_如何用python解方程
  17. Dubbo 入门教程与实战(一)上
  18. 如何计算石英晶振的匹配电容
  19. 蛊惑者马云发家史(曾推毛氏运动唐僧团队)一
  20. PTA - 数据库合集38

热门文章

  1. GRS认证跟TC证有何区别
  2. [sdm660 android9.0]摄像头调试
  3. 国外流行的五款免费在线图片编辑器评测
  4. 大数据专业来袭!前京东大学大数据院长亲自为你授课!
  5. 用户和用户组变成了数字
  6. birthday中文是什么_birthday什么意思中文翻译
  7. 专门为麻醉科和手术室开发的:手术麻醉系统源码,系统稳定,功能完整,支持二次开发
  8. 【AI】AI学习目录汇总
  9. 机械阻抗法与频响分析
  10. 让阿宅不再寂寞的聊天机器人