实习项目:雷霆战机

1、项目需求分析:

游戏状态state:

start准备状态

running运行状态

pause暂停状态

gameover游戏结束状态

英雄机:一个,走步行为(即两张图片的切换)

与鼠标一起移动的行为,鼠标位于英雄机的中心位置。

射击行为:子弹为单倍火力或双倍火力

碰撞行为:与敌机碰撞

减命行为:每次碰撞,生命值+1

敌机: 随时间产生很多架敌机。

走步行为:(向下移动)

碰撞行为:与子弹碰撞,敌机消失

小蜜蜂:随时间产生很多个

走步行为:(斜着向下移动)

是一种奖励:可能是+命奖励,+双倍火力奖励

子弹:随时间而数量在变化

走步行为:向上移动

需要注意的:

敌机越界,子弹越界的处理逻辑

2、类型设计

通过需求分析后,可以设计类型:

FlyingObject:飞行物---abstract

属性:

image;

x;开始绘制的横坐标

y; 开始绘制的纵坐标

width;//图片的宽度

height;//图片的高度

step();//走步行为

outOfBounds();越界行为

接口两个

Award:奖励接口

常量来模拟不同奖励

int DOUBLE_FIRE = 0 //默认为单倍火力

int LIFE = 1;// //默认奖励为一条命

int getType();//获取奖励的类型

Enemy:敌人接口

int getScore();//获取分数

Hero:英雄机类型

属性:

images--存储两张图片

life:----生命初始值

double_fire

step()--重写此方法:两张图片进行切换

moveTo(int x,int y);--跟着鼠标移动

shoot():产生单排或者是双排子弹

hit(FlyingObject objs):是否与其他飞行物进行碰撞

addLife():增加命

substractLife():减命

Airplane:敌机

speed:每次移动的像素点

step():----重写此方法

Bee:小蜜蜂

xSpeed:每次在x轴上行走的像素点

ySpeed:每次在y轴上行走的像素点

step():----重写此方法

Bullet:子弹

speed:每次在y轴上行走的像素点

step():----重写此方法

游戏面板类型:

ShootGame:

hero:一个英雄机对象

objects:很多个需要被击打的飞行物,(敌机,蜜蜂)

bullets:一堆子弹

加载静态资源:即所有的图片

hero0

hero1

background

airplane

bee

bullet

gameover

pause

start

3、程序编写

(1):写主类:ShootGame--->**JPanel**

提供main方法,创建窗口,面板等数据

加载所有的静态资源

重写绘制功能paint方法

绘制背景图片

(2):定义FlyingObject

添加了image,x,y,width,height属性

添加了step(),outOfBounds()方法

(3):定义接口

1)Award:奖励接口

添加DOUBLE_FIRE和LIFE两个常量

添加getType()方法

2)Enemy:敌人接口

添加getScore()方法

(4):定义Hero类型 ---extends FlyingObject

添加了images,double_fire,life三个独有属性

添加了构造器,给八个属性初始化

重写outOfBounds方法,设置成永不越界,返回false

重写step()方法,模拟英雄机飞行,即两张图片的交换

(5)在ShootGame中

添加定时器Timer,在action方法内

设置定时器任务,

10毫米开始执行任务,每隔10毫秒再次执行任务

(6)在Hero类型中:

添加了moveTo(int x,int y)

计算英雄机的位置与鼠标的关系

(7) 在ShootGame中:

action方法中添加了 鼠标监听事件

在监听事件中,重写了

mouseMoved()方法

(8) 定义类型Bullet

添加了独有的属性speed, 即移动像素

添加了构造器,给属性初始化

注意:构造器添加两个参数(因为子弹的位置与英雄机有关系)

step()--重写此方法,每次向上移动3像素

outOfBounds():重写此方法,考虑子弹越界情况

(9)在Hero类中,

添加shoot()方法,作用是英雄机产生单排子弹,或者是双排子弹。

(10)在ShootGame类中

添加了两个属性:

objects:所有飞行物的一个数组,用来存储敌机和蜜蜂

bullets:子弹数组,用来存储所有的子弹

在定时器中调用了方法

enterAction():表示所有飞行物进场。(此方法没有定义)

stepAction();

shootAction();

(11) 首先定义enterAction()方法,不写逻辑

定义stepAction()方法,

即objects(敌机和蜜蜂)

bullets

hero

都需要调用自己的step()

定义shootAction():

设计成每400毫米发射一次子弹,

将发射出来的子弹,存入bullets数组中

(12)在paint()中

调用paintBullets(g);方法

(13)定义paintBullets()方法,

绘制所有的子弹

(14)定义敌机类型Airplane

继承FlyingObject,实现Enemy接口

添加属性speed, 每次移动的像素

添加了构造器,给属性初始化

getScore()--重写,获取5分

step()--重写走步逻辑

outOfBounds()--重写越界逻辑

(15)定义蜜蜂类型Bee

继承FlyingObject,实现Award接口

添加了xSpeed,ySpeed,awardType等属性

添加了构造器,给属性初始化

getType():重写,获取奖励类型

step()--重写走步逻辑

outOfBounds()--重写越界逻辑

(16)在ShootGame类中

补全enterAction()功能

调用方法randomOne()随机生成一个敌人或者是蜜蜂

存储在objects数组中

(17)定义randomOne()方法

随机一个0~19的任意一个整数

0~18,生成一个敌机

19 生成蜜蜂

(18)为了看到游戏面板上的敌机或蜜蜂

我们在paint()方法调用

paintFlyingObject(g);

(19)定义完成

paintFlyingObject(Graphics g)

对飞行物进行绘制

(20)在定时器中添加

bangAction();//碰撞行为

(21)定义bangAction();

循环遍历子弹,是否击中飞行物

调用了bang(b)方法

(22)定义bang(b)方法

循环遍历飞行物是否被子弹击中

调用了shootBy(b);

记录被击中的飞行物的下标

备份,然后将飞行物从数组中删除。

然后查看备份的飞行物是哪种类型

敌机类型:

调用getScore方法进行加分

--此时需要定义属性score//总分数

life//总命数

蜜蜂类型:

获取奖励类型:

根据奖励类型,调用相应的方法

双倍火力奖励:调用addDoubleFire()

生命奖励:调用addLife();

(23)在FlyingObject中定义

boolean shootBy(Bullet b)

实现被击中的算法。

(24)在Hero类中定义

addDoubleFire()方法

addLife();

substractLife();

getLife();

setDoubleFire();重置火力值

(25)在绘制paint方法中

添加paintScore()方法

(26)定义paintScore()

对分数和命数进行绘制。

(27)在定时器中添加

outOfBoundsAction()//检查越界行为

(28)定义outOfBoundsAction()方法

将没有越界的对象存入一个新数组

然后将新数组赋值给相应的

bullets/objects;

(29)状态处理:

添加状态属性state

添加四个常量状态:

startgame

running

pausegame

over

(30)在paint()方法中调用

paintState(g)

(31)定义paintState()方法

绘制相应的图片

(32)

修改定时器内的逻辑

添加分支结构,running状态时,执行逻辑

(33)补全鼠标事件

1.点击事件,写出相应逻辑

2.离开事件,写出相应逻辑

3.进入事件,写出相应逻辑

(34)在定时器中添加

checkGameOver()行为。

(35)定义checkGameOver()方法

逻辑为

游戏结束时,修改游戏状态

调用了isGameOver()方法

(36)定义isGameOver()方法

逻辑为:

遍历所有的飞行物,查看是否与英雄机相撞

调用

hero.hit(obj)方法

撞击后,

英雄机减命

重置火力值

从数组中处理掉被撞击的飞行物

当生命值<=0时,游戏结束

(37)在Hero类型中定义

hit()方法

实现hit的逻辑。

java雷霆战机项目收获_java实习项目_雷霆战机相关推荐

  1. java项目介绍项目收获_java项目收获总结

    作为培训,项目的好坏对培训质量的影响十分大,常常是决定性的作用.下面是YJBYS小编整理的java项目收获总结范文,希望对你有帮助! 2017年java项目收获总结一 从二十几天前的项目需求分析,到数 ...

  2. github java开源项目经验_Java 开源项目 GitHub 趋势周报 20201230

    [关注获取更多精选开源图书] 大家好!我是超级机器人 UltraBot,今天给大家推送本周 Java 开源项目 GitHub 趋势周报,本周更新开源项目 64. brettwooldridge / H ...

  3. java取路径含中文_java获取项目路径中文乱码

    以下内容转自:http://blog.csdn.net/dream_broken/article/details/31762807# 项目的文件名称推荐都是英文名称,但是有时不可避免使用了中文,获取项 ...

  4. java web 项目启动_Java web项目启动Tomcat报错解决方案

    点击运行项目时显示 A Java Exception has occurred. 'Starting Tomcat v9.0 Server at localhost' has oncountered ...

  5. java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法

    很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接 ...

  6. java web添加背景图片_java web项目中如何插入背景图片

    对于java可视化界面插入背景图片这个倒是轻而易举,只需要background-inage:url(图片路径就行),而对于与web项目中,我开始时也是采用这种方法,但是不尽然,代码如下: 效果如下: ...

  7. java课程设计纸牌游戏_java练习项目之纸牌游戏实例源码

    java应用练习项目之纸牌游戏实例源码.java纸牌项目练习题目要求: 定义纸牌的花色 定义纸牌的大小2A 花色与数字组成一张牌 组成一整副纸牌 构造玩家 发牌 题目 : 创建一副扑克牌,这副牌是标准 ...

  8. java开源项目源代码_java开源项目源代码

    java开源项目 源代码 http://www.codase.com/ http://java-source.net/ https://www.dev.java.net/ 名称 摘要 种类 appfu ...

  9. java数据访问层实例_java实际项目先写哪一层?java三层架构是什么?

    在写java实际项目的时候,我们都是要有思维逻辑的,哪一层先写哪一层后写,这些都要考虑清楚,那么接下来,我们就来给大家讲解一下这方面的内容. 这没有标准,一般是controller-service-d ...

  10. 获取java项目路径_Java获取项目路径

    Java获取项目路径 1. 利用System获取System.getProperty("user.dir"); //输出: E:\IDEA\canye365-crawler-dem ...

最新文章

  1. 六边形溯源追踪算法编程思想与代码
  2. IMX6ULL的GPIO操作方法
  3. | 一文读懂迁移学习(附学习工具包)
  4. JQuery 中选择多选择框,和单选框,实现获取相应选择的值
  5. nsqlookupd:高性能消息中间件 NSQ 解析
  6. 元宵节,程序员用 Python 送你一盏 3D 花灯
  7. bash linux .ee,Linux下Bash shell学习笔记.md
  8. qt菜单栏按钮点击事件_如何用Axure画出Web后台产品的菜单栏组件
  9. nacos心跳机制重复发送原理
  10. Matlab视频系列教程-小木讲matlab-前12讲
  11. GitHub使用教程详解(上)——官网操作指南[翻译]
  12. java集成kettle教程(附示例代码)
  13. ## 第一节课第一串代码
  14. ILOM escalation mode下的管理命令用法几输出
  15. 打开excel很慢的解决方法
  16. 服务器ie浏览器总是未响应,win7电脑IE浏览器总是未响应怎么办 IE浏览器无响应原因解决方法...
  17. 2021年山东省安全员C证考试题库及山东省安全员C证考试报名
  18. pytorch迁移学习载入部分权重
  19. 词法分析器设计与实现
  20. 【C语言】世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

热门文章

  1. VmWare配置网络桥接模式,实现虚拟机联网。
  2. JavaScript学习笔记(25) JavaScript.then()这个方法是什么意思?
  3. java100以内依个_使用Java多线程实现任务分发
  4. 排列组合—— 球盒问题
  5. Keil5改黑色炫酷背景
  6. [日常] 修改编辑word中的页眉页脚
  7. Freebase SPARQL 查询模板
  8. 运营方法论——增长黑客
  9. B站李沐讲论文笔记Transformer
  10. 画江湖:李星云像换了一个人,他到底经历了什么?