在进行编写程序时,进行一个方法前写好方法的作用,这样查看也比较方便
一下是具体代码类,,图片自己找
//测试类
package day1_16;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PlaneGame extends JPanel{
// 定义两个常量设置窗口的宽高
public static final int WIDTH=380;
public static final int HEIGHT=670;
// 加载背景图片
public static BufferedImage bg;
// 加载爱心
public static BufferedImage life;
// 加载Boss血条
public static BufferedImage Bosslife;
// 定义一个变量来统计敌机的死亡数
int number=0;
// 定义一个变量来统计敌机打中英雄机的子弹个数
int bulletBossNumer=0;
// 定义一个变量来统计分数
int score=0;
// 定义一个变量来统计打中boss的子弹
int bossBlutteNumber=0;
public static int state=0;//标记游戏状态
public static final int RUNNING=1;
public static final int START=0;
public static final int STOP=3;
public static final int GAMEOVER=4;
public static final int WIN=5;
public static BufferedImage skill;
public static BufferedImage start;
public static BufferedImage stop;
public static BufferedImage gameover;
public static BufferedImage win;
public static BufferedImage parachute;
public static BufferedImage shield;
static{
try{
bg=ImageIO.read(PlaneGame.class.getResource("background.png"));
life=ImageIO.read(PlaneGame.class.getResource("life.png"));
Bosslife=ImageIO.read(PlaneGame.class.getResource("Bosslife.png"));
start=ImageIO.read(PlaneGame.class.getResource("start.png"));
stop=ImageIO.read(PlaneGame.class.getResource("stop.png"));
gameover=ImageIO.read(PlaneGame.class.getResource("gameover.png"));
win=ImageIO.read(PlaneGame.class.getResource("win.png"));
parachute=ImageIO.read(PlaneGame.class.getResource("parachute.png"));
skill=ImageIO.read(PlaneGame.class.getResource("skill.png"));
shield=ImageIO.read(PlaneGame.class.getResource("shield.png"));
}catch(Exception e){
System.out.println("图片加载失败.........");
}
}
// 定义一个数组接受飞行器
AirCraft[] AirC={};
// 定义一个变量接受英雄机
Hero hero=new Hero();
// 定义一个数组接受Boss
Boss[] boss={};
// 定义一个数组接受子弹
Bullet[] bullet={};
// 定义一个数组接受Boss子弹
AirCraft[] bulletBosses={};
//画小敌机的子弹
smallBullet[] smallBul={};
Skill[] skills={};//大招数组
Shield hd=new Shield();//护盾
boolean shields=false;//标记护盾是否生成
int createIndex=0;
// 创造飞行器
public void createAirCraft(){
if(createIndex++%50==0){
AirC=Arrays.copyOf(AirC, AirC.length+1);
AirC[AirC.length-1]=nextAirCraft();
}
}
// 设置蜜蜂和敌机的比例
public AirCraft nextAirCraft(){
int type=(int)(Math.random()*6);
if(type==0){
return new Parachute();
}
if(type==1){
return new Bee();
}
return new AirPlane();
}
// 英雄机发射子弹
int shootIndex=0;
public void shootBullet(){
if(shootIndex++%20==0){
Bullet[] b=hero.shoot();
for(int i=0;i<b.length;i++){
bullet=Arrays.copyOf(bullet, bullet.length+1);
bullet[bullet.length-1]=b[i];
}}
}
//英雄机发射一次skill大招
public void competeSkills(){
Skill[] s=hero.doSkill();
skills=Arrays.copyOf(skills, skills.length+s.length);
System.arraycopy(s, 0,
skills, skills.length-s.length,s.length);
}
//敌机发射一次子弹
int indexSmall=0;
public void competeSmallBul(){
if(score>=100&&indexSmall++%40==0){
for(int i=0;i<AirC.length;i++){
AirCraft f=AirC[i];
if(f instanceof AirPlane){
AirPlane sm=(AirPlane)f;
smallBullet[] s=sm.shoot();
smallBul=Arrays.copyOf(smallBul, smallBul.length+s.length);
System.arraycopy(s, 0,
smallBul, smallBul.length-s.length,s.length);
}
}
}
}
// 创造一个Boss
public void creatBoss(){
if( boss.length==0 && number>30){
boss=Arrays.copyOf(boss, boss.length+1);
boss[boss.length-1]=new Boss();
}
}
// Boss发射子弹
int shootBossIndex=0;
public void shootBulletsFromBoss(){
if(shootBossIndex++%20==0){
for(int i=0;i<boss.length;i++){
AirCraft b=boss[i].shoot();
bulletBosses=Arrays.copyOf(bulletBosses, bulletBosses.length+1);
bulletBosses[bulletBosses.length-1]=b;
}}
}
// 画背景,飞行器,英雄机,子弹
public void paint(Graphics g){
super.paint(g);
g.drawImage(bg, 0, 0, null);
for(int i=0;i<AirC.length;i++){
AirCraft ac=AirC[i];
g.drawImage(ac.image, ac.x, ac.y, null);
}
g.drawImage(hero.image, hero.x, hero.y, null);
for(int i=0;i<bullet.length;i++){
Bullet b=bullet[i];
g.drawImage(b.image, b.x, b.y,null);
}
for(int i=0;i<smallBul.length;i++){
smallBullet sm=smallBul[i];
g.drawImage(sm.image, sm.x, sm.y,null);
}
if(boss.length!=0){
for(int i=0;i<boss.length;i++){
Boss Bo=boss[i];
g.drawImage(Bo.image, Bo.x, Bo.y,null);
}}
for(int i=0;i<bulletBosses.length;i++){
AirCraft b=bulletBosses[i];
g.drawImage(b.image, b.x, b.y,null);
}
//画大招
for(int i=0;i<skills.length;i++){
Skill s=skills[i];
g.drawImage(s.image, s.x,s.y,null);
}
//画开始,暂停,结束
if(state==START){
g.drawImage(start,WIDTH/3,bg.getHeight()/3,null);
}
if(state==STOP){
g.drawImage(stop,WIDTH/3, bg.getHeight()/3,null);
}
if(state==GAMEOVER){
g.drawImage(gameover,WIDTH/3, bg.getHeight()/3,null);
}
if(state==WIN){
g.drawImage(win,WIDTH/3, bg.getHeight()/3,null);
}
//画护盾
hd.x=hero.x-15;
hd.y=hero.y;
if(shields){
g.drawImage(shield, hd.x,hd.y,null);
}
g.drawString("分数:"+score, 20, 20);
g.drawString("生命值:", 20, 40);
g.drawString("大招个数:"+skillNum,20,80);
for(int i=0;i<hero.life;i++){
g.drawImage(life,70+i*20 ,28,null);
}
g.drawString("火力:"+bullet.length, 20, 60);
if(boss.length!=0){
for(int i=0;i<boss.length;i++){
g.drawString("Boss生命值:", 20,100);
for(int j=0;j<boss[i].life;j++){
g.drawImage(Bosslife,95+j*10 ,108,null);
}
}}
}
// 让飞行器,英雄机,Boss,各种子弹走一步
public void stepAction(){
for(int i=0;i<AirC.length;i++){
AirCraft ac=AirC[i];
ac.step();
}
hero.step();
for(int i=0;i<bullet.length;i++){
Bullet b=bullet[i];
b.step();
}
//大招走
for(int i=0;i<skills.length;i++){
Skill s=skills[i];
s.step();
}
if(boss.length!=0){
for(int i=0;i<boss.length;i++){
Boss Bo=boss[i];
Bo.step();
}}
for(int i=0;i<bulletBosses.length;i++){
AirCraft b=bulletBosses[i];
b.step();
}
for(int i=0;i<smallBul.length;i++){
smallBullet sm=smallBul[i];
sm.step();
}
}
// 检查飞行器是否有越界
public void checkOutAir(){
AirCraft[] temp=new AirCraft[AirC.length];
int index=0;
for(int i=0;i<AirC.length;i++){
AirCraft ac=AirC[i];
if(ac.y<=PlaneGame.HEIGHT){
temp[index++]=ac;
}
if(ac.y>PlaneGame.HEIGHT){
score-=2;
}
}
AirC=Arrays.copyOf(temp, index);
}
// 检查子弹是否有越界
public void checkOutBullet(){
Bullet[] temp=new Bullet[bullet.length];
int index=0;
for(int i=0;i<bullet.length;i++){
Bullet b=bullet[i];
if(b.y>-b.height){
temp[index++]=b;
}
}
bullet=Arrays.copyOf(temp, index);
//检查小敌机的子弹越界
smallBullet[] type=new smallBullet[smallBul.length];
int indexBul=0;
for(int i=0;i<smallBul.length;i++){
smallBullet sm=smallBul[i];
if(sm.y>-sm.height){
type[indexBul++]=sm;
}
}
smallBul=Arrays.copyOf(type, indexBul);
//检查大招越界
Skill[] s=new Skill[skills.length];
int checkIndexSkill=0;
for(int i=0;i<skills.length;i++){
Skill skil=skills[i];
if(skil.y>-skil.height){
s[checkIndexSkill++]=skil;
}
}
skills=Arrays.copyOf(s, checkIndexSkill);
}
// 遍历子弹,进行消灭
public void shootAir(){
int AirIndex=-1;
for(int i=0;i<bullet.length;i++){
Bullet b=bullet[i];
AirIndex=i;
shootBeePlane(b,AirIndex);
shootBoss(b);
}
}
// 消灭碰撞的飞行器和敌机,消灭蜜蜂,子弹加倍
int skillNum=0;
int killNum=0;
public void shootBeePlane(Bullet b,int airIndex){
int shootIndex=-1;
for(int i=0;i<AirC.length;i++){
AirCraft ac=AirC[i];
if(ac.shootBy(b)){
shootIndex=i;
killNum++;
if(ac instanceof Award ){//奖励
Award a=(Award)ac;
//随机获取火力值跟生命
if(a.getType()==Award.DOUBLE_FIRE){
hero.doubleFire+=10;
}
if(a.getType()==Award.LIFE){
hero.life++;
}
}
if(ac.code().equals("airplane")){
number+=1;
score+=6;
}
if(ac.code().equals("parachute")){
Skills d=(Skills)ac;//System.out.println("大招");
if(d.getIndex()==Skills.BIG_SKILL&&skillNum!=1){
skillNum=1;
MouseAdapter mad=new MouseAdapter(){
//点击鼠标开始游戏,将游戏状态改成开始
public void mouseClicked(MouseEvent e){
if(skillNum==1){
competeSkills();
skillNum=0;
}
}
};
this.addMouseMotionListener(mad);
this.addMouseListener(mad);
}
if(d.getIndex()==Skills.SHIELD&&shields==false){
//System.out.println("大招");
shields=true;
hero.life+=Shield.LIFE;
}
}
break;
}
}
if(shootIndex!=-1){
if(killNum%40==0){//没击败40个敌机再加20分
score+=20;
//System.out.println("加20分"+score);
}
AirC[shootIndex]=AirC[AirC.length-1];
AirC=Arrays.copyOf(AirC, AirC.length-1);
bullet[airIndex]=bullet[bullet.length-1];
bullet=Arrays.copyOf(bullet, bullet.length-1);
}
}
//大招跟飞行物的碰撞,加分
public void skillAction(){
for(int i=0;i<skills.length;i++){
Skill b=skills[i];
int skillIndex=-1;
for(int j=0;j<AirC.length;j++){
AirCraft flying=AirC[j];
if(flying.shootBy(b)){
skillIndex=j;
break;
}
}
if(skillIndex!=-1){
score+=10;
AirCraft f=AirC[skillIndex];
AirC[skillIndex]=AirC[AirC.length-1];
AirC=Arrays.copyOf(AirC, AirC.length-1);
}
}
}
//大招与BOSS相撞
public void skillActions(){
int skillIndexs=-1;
for(int i=0;i<skills.length;i++){
Skill b=skills[i];
int skillIndex=-1;
//System.out.println("减分");
for(int j=0;j<boss.length;j++){
Boss bosses=boss[j];
//System.out.println("减分");
if(bosses.shootBy(b)){
//System.out.println("减分");
skillIndex=j;
skillIndexs=i;
break;
}
}
if(skillIndex!=-1){
score+=10;
Boss f=boss[skillIndex];
f.life-=1;
skills[skillIndexs]=skills[skills.length-1];
skills=Arrays.copyOf(skills, skills.length-1);
}
}
}
//敌机跟英雄机相撞减分
int live=3;
public void bangAir(){
int indexFlying=-1;
for(int j=0;j<AirC.length;j++){
AirCraft flying=AirC[j];
if(hero.shootBy(flying)){
hero.life-=1;
indexFlying=j;
break;
}
}
if(indexFlying!=-1){
AirCraft f=AirC[indexFlying];
//护盾生成且碰到的是敌机或者boss机的导弹则消失
if(!(f instanceof Parachute)&&shields){
//hero.life-=Shield.LIFE;
live-=3;
}
AirC[indexFlying]=AirC[AirC.length-1];
AirC=Arrays.copyOf(AirC, AirC.length-1);
}
}
int num=0;
//英雄机撞上敌机发出的子弹减分,撞上20个该子弹生命值减1
public void bangSmallBul(){
int indexFlying=-1;
for(int j=0;j<smallBul.length;j++){
AirCraft flying=smallBul[j];
if(hero.shootBy(flying)){
indexFlying=j;
num++;
//System.out.println("碰到的敌机子弹数量"+num);
break;
}
}
if(indexFlying!=-1){
AirCraft f=smallBul[indexFlying];
//护盾生成且碰到的是敌机或者boss机的导弹则消失
if(f instanceof smallBullet){
score-=2;
if(num%10==0){
hero.life--;
}
}
smallBul[indexFlying]=smallBul[smallBul.length-1];
smallBul=Arrays.copyOf(smallBul, smallBul.length-1);
}
}
//护盾消失
public void lossShield(){
if(live==0){
shields=false;
}
}
// 消灭Boss,每碰到10个英雄机的子弹,Boss生命值减1。
public void shootBoss(Bullet b){
int shootIndex=-1;
for(int i=0;i<boss.length;i++){
Boss bosses=boss[i];
if(bosses.shootBy(b)){
shootIndex=i;
bossBlutteNumber=bossBlutteNumber+1;
if(bossBlutteNumber==10){
bosses.life-=1;
System.out.println("boss的生命值+"+bosses.life);
bossBlutteNumber=0;
number=0;
}
if(bosses.life<=0){
boss[i]=null;
boss=Arrays.copyOf(boss, boss.length-1);
state=WIN;
}
}}
if(shootIndex!=-1){
bullet[bullet.length-1]=bullet[shootIndex];
bullet=Arrays.copyOf(bullet, bullet.length-1);
}
}
// 检查boss子弹是否有越界
public void checkOutBossBullet(){
AirCraft[] temp=new AirCraft[bulletBosses.length];
int index=0;
for(int i=0;i<bulletBosses.length;i++){
AirCraft b=bulletBosses[i];
if(b.y<PlaneGame.HEIGHT){
temp[index++]=b;
}
}
bulletBosses=Arrays.copyOf(temp, index);
}
// 遍历boss子弹,进行伤害英雄机
public void shootBossAir(){
int AirIndex=-1;
for(int i=0;i<bulletBosses.length;i++){
AirCraft b=bulletBosses[i];
if(hero.shootBy(b)){
if(b.code().equals("bulletBoss")){
score-=1;
bulletBossNumer+=1;
if(bulletBossNumer==10){
hero.life-=1;
bulletBossNumer=0;
}
AirIndex=i;
}
if(b.code().equals("BossBigbullet")){
hero.life-=1;
AirIndex=i;
if(shields){
live-=3;
}
}
}
if(AirIndex!=-1){
bulletBosses[AirIndex]=bulletBosses[bulletBosses.length-1];
bulletBosses=Arrays.copyOf(bulletBosses, bulletBosses.length-1);
}}
}
//is_liFe为true则将游戏状态改为finish,且出现结束图片并结算游戏分数
//此状态为完成任务后的状态
public void checkGameOver(){
if(hero.life==0){
//System.out.println("结束");
state=GAMEOVER;
}
}
// //检查游戏是否失败,即英雄机没有生命值
// public boolean is_Life(){
// return boss.life<=0;//英雄没有生命值
// }
// 设置框架和屏幕
public static void main(String[] args) {
JFrame frame=new JFrame();
PlaneGame game=new PlaneGame();
frame.add(game);
frame.setVisible(true);
frame.setSize(WIDTH, HEIGHT);
frame.setDefaultCloseOperation(3);
frame.setLocationRelativeTo(null);
game.action();
}
//清空屏幕
public void empty(){
AirC=new AirCraft[0];
bullet=new Bullet[0];//子弹数组,用来存放发出的子弹
skills=new Skill[0];//大招数组
skillNum=0;
bulletBosses=new AirCraft[0];//清空boss机的子弹
boss=new Boss[0];//清空boss
//hero=new Hero();//新建英雄机
smallBul=new smallBullet[0];
shields=false;
}
// 游戏运行
int indexWin=0;
Timer timer=new Timer();
public void action(){
MouseAdapter mad=new MouseAdapter(){
//设置鼠标移动,让鼠标进入界面就指向英雄机
public void mouseMoved(MouseEvent e){
if(state==RUNNING){
int x=e.getX();
int y=e.getY();
hero.move(x, y);
}
}
//点击鼠标开始游戏,将游戏状态改成开始
public void mouseClicked(MouseEvent e){
if(state==START){
score=0;
state=RUNNING;
}
if(state==GAMEOVER||state==WIN){
state=START;
hero=new Hero();
}
}
//鼠标出去将游戏状态改为暂停
public void mouseExited(MouseEvent e) {
if(state==RUNNING){
state=STOP;
}
}
//鼠标进入游戏状态改为运行
public void mouseEntered(MouseEvent e) {
if(state==STOP){
state=RUNNING;
}
}
};
this.addMouseMotionListener(mad);
this.addMouseListener(mad);
timer.schedule(new TimerTask(){
public void run(){
if(state==RUNNING){
createAirCraft();//创造飞行器
shootBullet();//英雄机发射子弹
bangAir();//敌机跟英雄机相撞减分
creatBoss();//创造一个Boss
shootBulletsFromBoss();//Boss发射子弹
stepAction();//让飞行器,英雄机,Boss,各种子弹走一步
checkOutAir();//检查飞行器是否有越界
checkOutBullet();// 检查子弹是否有越界
shootAir();//遍历子弹,进行消灭
checkOutBossBullet();// 检查boss子弹是否有越界
shootBossAir();// 遍历boss子弹,进行伤害英雄机
skillAction();//大招伤害boss
skillActions();//大招伤害boss
lossShield();//判断,让护盾消失
checkGameOver();//检查游戏是否失败
competeSmallBul();//敌机发射一次子弹
bangSmallBul();//英雄机碰到敌机发出的子弹减5分
}
if(state==GAMEOVER||state==START||state==WIN){
empty();
}
repaint();
}
},0, 10);
}
}
首先建立几个实体类
AirCraft 飞机总类
package day1_16;
import java.awt.image.BufferedImage;
public abstract class AirCraft {
public int x;
public int y;
public int width;
public int height;
public BufferedImage image;
public abstract void step();
public abstract String code();
public Boolean shootBy(Bullet b){
int x1=this.x-b.width;
int x2=this.x+this.width;
int y1=this.y-b.height;
int y2=this.y+this.height;
int bx=b.x;
int by=b.y;
return bx>x1&&bx<x2&&by>y1&&by<y2;
}
public Boolean shootBy(AirCraft b){
int x1=this.x-b.width;
int x2=this.x+this.width;
int y1=this.y-b.height;
int y2=this.y+this.height;
int bx=b.x;
int by=b.y;
return bx>x1&&bx<x2&&by>y1&&by<y2;
}
}
//敌机类
package day1_16;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class AirPlane extends AirCraft {
public static BufferedImage plane;
static{
try{
plane=ImageIO.read(AirPlane.class.getResource("airplane.png"));
}catch(Exception e){
System.out.println("敌机图片加载失败.........");
}
}
public int speed;
public AirPlane() {
speed=3;
image=plane;
width=image.getWidth();
height=image.getHeight();
x=(int)(Math.random()*(PlaneGame.WIDTH-width));
y=-height;
}
public void step() {
y+=speed;
}
public String code(){
return "airplane";
}
public smallBullet[] shoot(){
smallBullet[] smallbullets=new smallBullet[1];
smallbullets[0]=new smallBullet(this.x+this.width/2-10,this.y+45);
return smallbullets;
}
}
//奖励蜜蜂类
package day1_16;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Bee extends AirCraft implements Award {
public static BufferedImage bee;
static{
try{
bee=ImageIO.read(Bee.class.getResource("bee.png"));
}catch(Exception e){
System.out.println("蜜蜂图片加载失败...........");
}
}
public int xSpeed;
public int ySpeed;
public Bee() {
image=bee;
width=image.getWidth();
height=image.getHeight();
x=(int)(Math.random()*(PlaneGame.WIDTH-width));
y=-height;
xSpeed=3;
ySpeed=2;
}
public void step() {
x+=xSpeed;
y+=ySpeed;
if(x<0||x>PlaneGame.WIDTH-width){
xSpeed=-xSpeed;
}
}
public String code(){
return "bee";
}
@Override
public int getType() {
int index=(int)(Math.random()*7);
if(index==0){
return Award.LIFE;
}
return Award.DOUBLE_FIRE;
}
}
boss机类
package day1_16;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Boss extends AirCraft {
public static BufferedImage boss;
static{
try{
boss=ImageIO.read(Boss.class.getResource("boss.png"));
}catch(Exception e){
System.out.println("Boss图片加载失败........");
}
}
public int speed;
public int life;
public int doubleBossFire;
public Boss() {
image=boss;
width=image.getWidth();
height=image.getHeight();
x=(int)(Math.random()*(PlaneGame.WIDTH-width));
y=20;
speed=1;
life=15;
doubleBossFire=0;
}
@Override
public void step() {
x-=speed;
if(x<0||x>PlaneGame.WIDTH-width){
speed=-speed;
}
}
public AirCraft shoot(){
if(life>5){
doubleBossFire=(int)(Math.random()*5);
if(doubleBossFire!=0){
AirCraft bulletboss=new bulletBoss(this.x+this.width/2-25,this.y+this.height);
return bulletboss;
}
AirCraft bulletboss1=new BossBigbullet(this.x+this.width/2-25,this.y+this.height);
return bulletboss1;
}
doubleBossFire=(int)(Math.random()*3);
if(doubleBossFire!=0){
AirCraft bulletboss=new bulletBoss(this.x+this.width/2-25,this.y+this.height);
return bulletboss;
}
AirCraft bulletboss1=new BossBigbullet(this.x+this.width/2-25,this.y+this.height);
return bulletboss1;
}
@Override
public String code() {
return "boss";
}
}
//boss机子弹类
package day1_16;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class BossBigbullet extends AirCraft{
public static BufferedImage BossBigbullet;
static {
try {
BossBigbullet = ImageIO.read(Bullet.class.getResource("BossBigBullet.png"));
} catch (Exception e) {
System.out.println("Boss大招图片加载失败..........");
}
}
public int speed;
public BossBigbullet() {
super();
}
public BossBigbullet(int x, int y) {
speed = 2;
image=BossBigbullet;
width=image.getHeight();
height=image.getHeight();
this.x=x;
this.y=y;
}
@Override
public void step() {
y+=speed;
}
@Override
public String code() {
return "BossBigbullet";
}
}
//boss小子弹
package day1_16;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class bulletBoss extends AirCraft {
public static BufferedImage bulletBoss;
static {
try {
bulletBoss = ImageIO.read(Bullet.class.getResource("Bossbullet.png"));
} catch (Exception e) {
System.out.println("Boss子弹图片加载失败..........");
}
}
public int speed;
public bulletBoss() {
super();
// TODO Auto-generated constructor stub
}
public bulletBoss(int x, int y) {
speed = 3;
image=bulletBoss;
width=image.getHeight();
height=image.getHeight();
this.x=x;
this.y=y;
}
@Override
public void step() {
y+=speed;
}
@Override
public String code() {
// TODO Auto-generated method stub
return "bulletBoss";
}
}
//英雄机子弹类
package day1_16;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Bullet extends AirCraft {
public static BufferedImage bullet;
static {
try {
bullet = ImageIO.read(Bullet.class.getResource("bullet.png"));
} catch (Exception e) {
System.out.println("子弹图片加载失败..........");
}
}
public int speed;
public Bullet() {
super();
// TODO Auto-generated constructor stub
}
public Bullet(int x, int y) {
speed = 3;
image=bullet;
width=image.getHeight();
height=image.getHeight();
this.x=x;
this.y=y;
}
@Override
public void step() {
y-=speed;
}
@Override
public String code() {
// TODO Auto-generated method stub
return "bullet";
}
}
//英雄机类
package day1_16;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Hero extends AirCraft {
public static BufferedImage[] hero=new BufferedImage[2];
static{
try{
for(int i=0;i<hero.length;i++){
hero[i]=ImageIO.read(Hero.class.getResource("hero/hero"+i+".png"));
}
}catch(Exception e){
System.out.println("英雄机图片加载失败.............");
}
}
public int life;
public int doubleFire;
public Hero() {
image=hero[0];
width=image.getWidth();
height=image.getHeight();
x=(PlaneGame.WIDTH-width)/2;
y=PlaneGame.HEIGHT-2*height;
life=3;
doubleFire=0;
}
int index=0;
int stepIndex=0;
public void step() {
if(stepIndex++%20==0){
image=hero[index++%hero.length];
}
}
public Bullet[] shoot(){
if(doubleFire==0){
Bullet[] bullets=new Bullet[1];
bullets[0]=new Bullet(this.x+this.width/2-4,this.y-20);
return bullets;
}
Bullet[] bullets=new Bullet[2];
bullets[0]=new Bullet(this.x+this.width/4-4,this.y-20);
bullets[1]=new Bullet(this.x+3*this.width/3-4,this.y-20);
doubleFire-=1;
return bullets;
}
//英雄机发射大招,发四倍火力
public Skill[] doSkill(){
Skill[] skills=new Skill[4];
skills[0]=new Skill(this.x,this.y-20);
skills[1]=new Skill(this.x+(this.width/3),this.y-20);
skills[2]=new Skill(this.x+(2*this.width/3),this.y-20);
skills[3]=new Skill(this.x-(PlaneGame.skill.getWidth()),this.y-20);
return skills;
}
@Override
public String code() {
// TODO Auto-generated method stub
return "hero";
}
public void move(int x, int y) {
this.x=x-this.width/2;
this.y=y-this.width/2;
}
}
//奖励子弹类
package day1_16;
public class Parachute extends AirCraft implements Skills{
int xSpeed;
int ySpeed;
public Parachute() {
super();
xSpeed=2;
ySpeed=3;
image=PlaneGame.parachute;
width=image.getWidth();
height=image.getHeight();
y=-height;
x=(int)(Math.random()*(PlaneGame.WIDTH-width));
// TODO Auto-generated constructor stub
}
@Override
public void step() {
y+=ySpeed;
x+=xSpeed;
if(x<0||x>PlaneGame.WIDTH-width){
xSpeed=-xSpeed;
}
}
@Override
public int getIndex() {
int type=(int)(Math.random()*2+1);
if(type==Skills.BIG_SKILL){
return Skills.BIG_SKILL;
}
return Skills.SHIELD;
}
@Override
public String code() {
// TODO Auto-generated method stub
return "parachute";
}
}
//护盾
package day1_16;
public class Shield extends AirCraft{
public static final int LIFE=1;
public Shield() {
super();
// TODO Auto-generated constructor stub
}
public Shield(int x,int y) {
super();
image=PlaneGame.shield;
width=image.getWidth();
height=image.getHeight();
this.x=x;
this.y=y;
}
@Override
public void step() {
}
// @Override
// public int getType() {
// // TODO Auto-generated method stub
// return Award.LIFE;
// }
@Override
public String code() {
// TODO Auto-generated method stub
return "shield";
}
}
//大招
package day1_16;
public class Skill extends AirCraft{
public int speed;
public Skill() {
super();
// TODO Auto-generated constructor stub
}
public Skill(int x,int y) {
image=PlaneGame.skill;
width=image.getWidth();
height=image.getHeight();
this.x=x;
this.y=y;
speed=3;
}
@Override
public void step() {
y-=speed;
}
@Override
public String code() {
// TODO Auto-generated method stub
return "skill";
}
}
//英雄机小子弹
package day1_16;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class smallBullet extends AirCraft {
public static BufferedImage bullet;
static {
try {
bullet = ImageIO.read(Bullet.class.getResource("smallBullet.png"));
} catch (Exception e) {
System.out.println("子弹图片加载失败..........");
}
}
public int speed;
public smallBullet() {
super();
// TODO Auto-generated constructor stub
}
public smallBullet(int x, int y) {
speed =4;
image=bullet;
width=image.getHeight();
height=image.getHeight();
this.x=x;
this.y=y;
}
@Override
public void step() {
y+=speed;
}
@Override
public String code() {
// TODO Auto-generated method stub
return "smallbullet";
}
}
//两个奖励接口
//奖励活力值跟生命
package day1_16;
//奖励接口
public interface Award {
int LIFE=0;
int DOUBLE_FIRE=1;
int getType();//返回奖励类型方法
}
package day1_16;
//奖励护盾跟加生命
public interface Skills {
int BIG_SKILL=1;
int SHIELD=2;
int getIndex();
}
