Java基础飞机大战小游戏完整代码
先来展示一下代码实现结果图
主函数ShootGame
初始化游戏原始背景图片,游戏人物图片,游戏开始结束图片;构建产生敌人算法;产生英雄机算法;发射子弹算法;判断是否相撞算法(子弹与敌机相撞,英雄机与敌机相撞);击落敌人奖励算法;绘制游戏中人物算法;鼠标控制移动算法;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ShootGame extends JPanel implements MouseMotionListener,MouseListener{
//继承JPanel类
public static final int width = 400;
public static final int height = 600;
//设置对象图片名称(与源文件名称一致)
public static Image background;
public static Image airplane;
public static Image bee;
public static Image bullet;
public static Image gameover;
public static Image hero0;
public static Image hero1;
public static Image pause;
public static Image start;
//定义游戏的四种状态
public static final int START = 0; //开始状态
public static final int RUNNING = 1; //运行状态
public static final int PAUSE = 3; //暂停状态
public static final int GAMEOVER =4; //结束状态
int state =START;
//创建对象-----------------------------------------------------------------------------------------------
Hero hero = new Hero(); //创建英雄机对象
Bullet[] bullets = {}; //子弹(众多),定义子弹数组
FlyingObject[] flyings = {}; //小敌机(众多),定义小敌机数组
//ShootGame无惨构造方法(给创建对象初始化)
/*public ShootGame() {
flyings = new FlyingObject[2];
//多态 夫妇
flyings[0] = new Airplane();//小敌机
flyings[1] = new Bee();//小蜜蜂
bullets = new Bullet[2];
bullets[0] = new Bullet(130,250);
bullets[1] = new Bullet(100,120);
}*/
//静态代码块内容加载
static {
try {
//导入图片文件-----------------------------------------------------------------------------------
//将图片文件赋给图片对象
background = ImageIO.read(new File("image\\background.png"));
airplane = ImageIO.read(new File("image\\airplane.png"));
bee = ImageIO.read(new File("image\\bee.png"));
bullet = ImageIO.read(new File("image\\bullet.png"));
gameover = ImageIO.read(new File("image\\gameover.png"));
hero0 = ImageIO.read(new File("image\\hero0.png"));
hero1 = ImageIO.read(new File("image\\hero1.png"));
pause = ImageIO.read(new File("image\\pause.png"));
start = ImageIO.read(new File("image\\start.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//产生敌人方法-------------------------------------------------------------------------------------------
public FlyingObject nextOne() {
FlyingObject f; //小敌机类型
Random r = new Random(); //随机产生数
int random = r.nextInt(20); //产生[0,20)随机数
if(random > 3) {
f = new Airplane(); //随机数为[4,20) 产生小敌机
}else {
f = new Bee(); //随机数为[0,3] 产生小蜜蜂
}
return f; //返回小敌机
}
int flyingEnterIndex = 0; //敌人对象初始化为0
//把产生的敌人添加到敌人数组中方法------------------------------------------------------------------------
public void enterAction() {
flyingEnterIndex++; //敌人对象自加
if(flyingEnterIndex % 50 == 0) { //50 100...每隔50毫秒执行一次,用于控制敌人出现速度
//1、创建敌人对象
FlyingObject one = nextOne(); //创建敌人对象,赋值给 One
//2.将敌人对象添加到flyings敌人数组中
flyings = Arrays.copyOf(flyings, flyings.length+1); //扩容+1(增加小敌机)
flyings[flyings.length-1] = one; //把产的敌人one赋值(添加)给最后一个数组元素
}
}
//游戏中各个对象的移动方式--------------------------------------------------------------------------------
public void stepAction() {
//敌人的移动(敌人处于敌人数组中,调用数组)
for(int i=0; i |