游戏界面使用JFrame和JPanel构建。背景图通过BG类绘制。英雄机和敌机在界面上显示并移动。子弹从英雄机发射并在屏幕上移动。游戏有四种状态:READY、RUNNING、PAUSE、GAMEOVER。状态通过鼠标点击进行切换:点击开始游戏(从READY变为RUNNING)。点击重新开始游戏(从GAMEOVER变为READY)。鼠标移出窗口时游戏暂停(从RUNNING变为PAUSE)。鼠标移入窗口时游戏继续(从PAUSE变为RUNNING)。开局默认玩家生命值为3,分数为0。每隔一定时间随机生成敌机(小飞机、大飞机、小飞碟)。敌机在屏幕上移动,并与英雄机进行碰撞检测。英雄机可以发射子弹。子弹在屏幕上移动,并与敌机进行碰撞检测。英雄机与敌机发生碰撞时,英雄机会损失一条生命值。子弹与敌机发生碰撞时,敌机会被摧毁,玩家的分增加。当子弹与奖励机发生碰撞时,奖励机会被摧毁,玩家随机获得两张奖励(生命值加1、双倍子弹)。在屏幕左上角显示当前的生命值和得分。生命值减少到0时,游戏进入结束状态。再次点击,重新开始游戏。
1.图片素材(百度网盘分享)
链接:https://pan.baidu.com/s/10QiTcddI_Zxw5jbn8fmOpA?pwd=huan
提取码:huan
2.主页面world.java
package plane.gzeu;import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;public class World extends JPanel {//ImageIcon类:保存图片的路径----->读取图片
// ImageIcon icon = new ImageIcon("images\\background.png");
// BG bg = new BG(0,0,420,700,2);
// Airplane airplane = new Airplane(100,200,300,620,2);
// Bee bee = new Bee(200,100,200,700,2);BG bg = new BG();EnemyPlane [] planes;Hero hero;int index; //用来控制敌机的数量Bullet[] bullets; //创建子弹的数组int life; //英雄机的生命值int score; //分数//定义游戏的四种状态:准备,运行,暂停,结束(常量)public static final int READY = 0;public static final int RUNNING = 1;public static final int PAUSE = 2;public static final int GAMEOVER = 3;//游戏的初始状态int state = READY;// Airplane [] airPlanes = new Airplane[10];
// Bigairplane [] bigAirPlanes = new Bigairplane[10];
// Bee [] bee = new Bee[10];
// Bom [] bom = new Bom[4];
// Bullet [] bullets = new Bullet[3];
// Hero [] hero =new Hero[2];//初始化方法public void init(){bg = new BG();hero = new Hero();planes = new EnemyPlane[0]; //默认一个敌机都没有bullets = new Bullet[0]; //默认一个子弹都没有index = 0; //默认从0开始life = 3; //默认3条命score = 0; //分数为0}public World() {init();// for(int i=0;i<planes.length;i++){
// if(i%2==0){
// planes[i]=new Airplane();
// }
// else if(i%5==0 && i%2!=0){
// planes[i] = new Bee();
// }
// else {
// planes[i] = new Bigairplane();
// }
// }
// for(int i =0;i<airPlanes.length;i++){
// airPlanes[i] = new Airplane();
// bigAirPlanes[i]=new BigAirPlane();
// bee[i]=new Bee();
// bom[i]=new Bom();
// bullets[i]=new Bullet();
// hero[i]=new Hero();}//生成敌机的方法public void createPlane(){if(index%16==0){int n = (int)(Math.random()*10);EnemyPlane plane;switch (n){case 9 :plane = new Bee(); //10%生成小飞碟break;case 8 :case 7 :plane = new Bigairplane(); //20%生成大飞机break;default:plane = new Airplane(); //70%生成小飞机}//将敌机存入数组中之前,要先对数组进行扩容处理planes = Arrays.copyOf(planes,planes.length+1);//将生存的敌机放入数组的最后一个位置planes[planes.length-1] = plane;}}// for(int i =0;i<bigAirPlanes.length;i++){
// bigAirPlanes[i]=new Bigairplane();
// }
// }//绘制图片printing@Overridepublic void paint(Graphics g) { //paint挂载到当前类,当前类实例化(创建对象)时自动调用
// super.paint(g);
// icon.paintIcon(this,g,0,y1++); //绘制背景,默认第一个绘制
// bg.icon.paintIcon(this,g,(int)bg.x,(int)bg.y);
// bg.move();
// airplane.icon.paintIcon(this,g,(int)airplane.x,(int)airplane.y);
// bee.icon.paintIcon(this,g,(int)bee.x,(int)bee.y);bg.painting(g);hero.painting(g);for(int i=0;i<planes.length;i++){planes[i].painting(g);}for(int i=0;i<bullets.length;i++){bullets[i].painting(g);}g.setColor(new Color(255,255,255));//设置字体g.setFont(new Font("微软雅黑",Font.BOLD,20));g.drawString("生命值"+life,20,20);g.drawString("分数"+score,20,40);if(state==READY){Images.start.paintIcon(this,g,0,0);}if(state==PAUSE){