Java飞机大战游戏(需求分析+代码+图片)

Java飞机大战游戏(需求分析+代码+图片)

shoot射击游戏项目一

1.需求分析:

运行项目,看结果:

A:小敌机,大敌机,蜜蜂,--------敌人

英雄机发射子弹

B:

子弹击中小敌机----玩家得分 1分

子弹击中大敌机----玩家得分 5分

子弹击中小蜜蜂-----玩家得 1生命或者火力值30

C:

英雄机的火力值变为0 的时候,就变成单倍火力

火力值变为0 的时候,变为双倍火力;依此减少2

D:碰撞

敌人与英雄机发发生碰撞,碰撞之后,英雄机的生命值减少,变位0的时候,游戏结束

2.计数分析

设计类:

A:找对象:6个对象

英雄机,小敌机,大敌机,蜜蜂,子弹,天空

B:抽类

Hero/Airplane/BIgAirplane/Bee/Bullet/Sky

C:设计成员变量和方法

shoot射击游戏项目二

1.需求分析:

A:设计一个父类、超类:并且让6个对象继承超类,测试

B:给超累添加构造方法;让六个对像分别调用超类

C: 设置对象数组,进行测试

D:在六各子类,派生类中重写

E:画窗体

2.技术分析:

重写和重载:

重写:(Override)

发生在父子类中,方法名形同,参数列表相同,方法体不同;遵循“运行期绑定”,看对象的类型来调用方法;

重载:(Overload)

发生在一个类中,方法名相同,参数列表不同,方法体不同:遵循“编译器绑定”,看参数,引用类型绑定法; shoot射击游戏项目三

A:给类中添加修饰符

B:给6个派生类中添加图片属性

1):6个类种添加Static

2)在父类中添加静态方法Loadlmage()添加图片

3):六个派生类中static代码块调用Loadlmage()方法

2:技术实现:

修饰符

y/n public protected default private同一个类 y y y y 同一个包中不同类 y y y 不同包类 y y 不同胞中的类 y Shoot射击游戏四

1.需求分析

A:将窗体大小设置成常量

B:画对象:

想画对象先获取图片,针对每个对象能够获取到图片,

获取到图片的行为事共有的,设计到父类中;

每个对象得到图片的行为是不一样的,设计了抽象的方法----getImage();

在不同状态下,得到不同的图片;

状态:设计到父类中,设计常量:Life DEAD; REMOVE

默认状态:state=LIFE

获取图片的同时,需不需要判断当前的装态???? y

每个对象都需要判断。设计到超类,父类中;

而每个对象判断行为都是不一样的,设计普通方法即可;

-----FlyObject:isLife()/isDead()/isRemove()

C:在6个子类中重写getImage()方法

Sky:直接返回即可子弹Bullet:如果是存活的返回images即可 如果是over的删除即可英雄机:如果是存活,返回imgaes[0]/images[1]小敌机:如多存活,返回images[0] 如果over,images[1]—images[4]进行切换,切换完毕,到了images[4]后进行删除

D:得到不同状态下的图片,进行开始画出来;

画对象的行为是共有的,所以涉及到超类中;

每个对象画的方式都是一样的,所以设计为【普通方法】

E:测试,调用即可

设计规则:

将所有子类所共有的行为和属性,可以设计到超累中;抽共性所有子类的行为都是一样的,设计为普通方法;所有子类的行为都是不一样的—设计成抽象方法 Shoot射击游戏五

1.需求分析

A:敌人入场

产生敌人:在ShootMain类中nextOne()

需要定时加载敌人----enterAction()实现敌人入场;

每400毫秒,获取到敌人,扩容,将敌人添加到数组最后一位

英雄机中发射子弹,hero类设计有一个方法来实现子弹的发射----shoot()

run()方法中,子弹发射shootAction()

每400毫秒。获取到子弹数组,扩容,将子弹数组添加到

C:飞行物移动

D:英雄机随鼠标移动

在hero()中设计方法:moveto()实现英雄机的移动在ShootMain中建立监听机制,检测鼠标移动

E:删除越界飞行物

在Flyobject中设计一个方法outOfBounds()—检测是否越界在run()方法中,写一个方法outOfBountAction()删除飞行物越界遍历敌人,子弹数组,如果对象不越界,那么将存放到不越界的数组中,将不越界的数组复制到敌人,子弹数组

F:设计接口

击中小敌机+大敌机-----得1 分 或者3分击中蜜蜂----随机得生命或者活力值 Shoot射击游戏六

子弹与敌人碰撞:

设计到父类中,hit()方法,实现检测子弹与敌人大声碰撞在父类中设计一个goDead()实现飞行物over在Hero类种设计实现addLife(),addDoubleFire()通过AirPlane和BigAirplane中的接口来实现玩家得分通过Bee中的接口来实现玩家获得奖励 代码实现

子弹:

package cn.tedu.shoot;import java.awt.image.BufferedImage;/** * 子弹 * @author Administrator * */public class Bullet extends FlyingObject{private static BufferedImage images;//静态代码块static {images = loadImage("bullet.png");}private int speed;//速度/**构造方法*/public Bullet(int x, int y){super(8, 14, x, y);speed = 2;}/**子弹的移动*/public void step(){this.y -= speed;}/**重写getImage()方法获取到图片*/@Overridepublic BufferedImage getImage() {if (isLife()) {return images;}else if(isDead()){state = REMOVE;//修改状态为删除状态}return null;}/**检测是否越界*/@Overridepublic boolean outOfBounds() {return this.y 0) {//双倍火力Bullet[] bs = new Bullet[2];bs[0] = new Bullet(this.x + xStep * 1, this.y - yStep);bs[1] = new Bullet(this.x + xStep * 3, this.y - yStep);doubleFire -= 2;return bs;}else{Bullet[] bs = new Bullet[1];bs[0] = new Bullet(this.x + xStep * 2, this.y - yStep);return bs;}}public void addDoubleFire(){doubleFire += 10;}public void addLife(){life++;}/**获得生命*/public int getLife(){return life;}/**减少生命*/public void substractLife(){life--;}/**清空火力*/public void clearDoubleFire(){doubleFire = 0;}}

蜜蜂:

package cn.tedu.shoot;import java.awt.image.BufferedImage;import java.util.Random;/** * 蜜蜂: * * @author 小二郎 * */public class Bee extends FlyingObject implements Award{private static BufferedImage[] images;// 静态代码块static {images = new BufferedImage[5];for (int i = 0; i < images.length; i++) {images[i] = loadImage("bee" + i + ".png");}}private int xSpeed;// x坐标的速度private int ySpeed;// y坐标的速度private int awardType;// 获取奖励的类型public Bee() {super(29, 39);xSpeed = 1;ySpeed = 2;Random rand = new Random();awardType = rand.nextInt(2);// 0 1}public void step() {x += xSpeed;y += ySpeed;if (x < 0 || x >= ShootMain.SCREEN_WIDTH - this.width) {xSpeed *= -1;}}// 得到图片int index = 1;@Overridepublic BufferedImage getImage() {// 10Mif (isLife()) {return images[0];} else if (isDead()) {// 图片的切换BufferedImage img = images[index++];if (index == images.length) {state = REMOVE;}return img;}return null;}@Overridepublic int getAwardType() {// TODO Auto-generated method stubreturn awardType;}}

天空:

package cn.tedu.shoot;import java.awt.Graphics;import java.awt.image.BufferedImage;/** * 天空: * * @author Administrator * */public class Sky extends FlyingObject {private static BufferedImage images;// 静态代码块static {images = loadImage("background.png");}private int speed;// 速度public int y1;// 第二张图片的坐标/** 构造方法 */public Sky() {super(ShootMain.SCREEN_WIDTH, ShootMain.SCREEN_HEIGHT, 0, 0);speed = 1;y1 = -ShootMain.SCREEN_HEIGHT;}/** 天空移动 */public void step() {y += speed;y1 += speed;if (y >= ShootMain.SCREEN_HEIGHT) {y = -ShootMain.SCREEN_HEIGHT;}if (y1 >= ShootMain.SCREEN_HEIGHT) {y1 = -ShootMain.SCREEN_HEIGHT;}}@Overridepublic BufferedImage getImage() {return images;}/** 重写父类中的方法 */@Overridepublic void paintObject(Graphics g) {g.drawImage(getImage(), x, y, null);g.drawImage(getImage(), x, y1, null);}}

飞行物得父类

package cn.tedu.shoot;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.util.Random;import javax.imageio.ImageIO;/** * 父类:飞行物 * * @author 小二郎 * */public abstract class FlyingObject {// 成员变量protected int width;// 宽protected int height;// 高protected int x;// x坐标protected int y;// y坐标// 设计三种状态public static final int LIFE = 0;// 存活public static final int DEAD = 1;// overpublic static final int REMOVE = 2;// 删除public int state = LIFE;// 当前状态为存活/** 提供敌人(小敌机+大敌机+蜜蜂) */public FlyingObject(int width, int height) {this.width = width;this.height = height;Random rand = new Random();// 小敌机出现的位置this.x = rand.nextInt(ShootMain.SCREEN_WIDTH - this.width);this.y = -this.height;}/** 提供英雄机+子弹+天空的构造方法 */public FlyingObject(int width, int height, int x, int y) {this.width = width;this.height = height;this.x = x;this.y = y;}/** 移动的方法 */public void step() {}/** 读取图片 */public static BufferedImage loadImage(String fileName) {try {// 同包之内的图片读取BufferedImage img = ImageIO.read(FlyingObject.class.getResource(fileName));return img;} catch (Exception e) {e.printStackTrace();throw new RuntimeException();}}/** 获取图片 */public abstract BufferedImage getImage();/** 画图片 g:画笔 */public void paintObject(Graphics g) {g.drawImage(this.getImage(), this.x, this.y, null);}/** 判断当前状态是不是存活的 */public boolean isLife() {return state == LIFE;}/** 判断当前状态是不是over的 */public boolean isDead() {return state == DEAD;}/** 判断当前状态是不是删除的 */public boolean isRemove() {return state == REMOVE;}/** 检测越界的方法 */public boolean outOfBounds() {return this.y >= ShootMain.SCREEN_HEIGHT;}/* 实现子弹与敌人发生碰撞 other:子弹敌人 */public boolean hit(FlyingObject other) {int x1 = this.x - other.width;int y1 = this.y - other.height;int x2 = this.x + this.width;int y2 = this.y + this.height;int x = other.x;int y = other.y;return x >= x1 && x = y1 && y

比丘资源网 » Java飞机大战游戏(需求分析+代码+图片)

发表回复

提供最优质的资源集合

立即查看 了解详情