整体的思路和博主其他博文java实现贪吃蛇小游戏(源码+注释)和java实现2048小游戏(源码+注释)是一样的,都是利用Frame创建窗体,利用Panel添加组件,提前规划好布局,调用鼠标和键盘监听,引用图片元素。
此处的思路在于不断的刷新敌机集合和子弹集合来实现动态效果。
文章目录
一.工程文件
二.Main.java
主函数,实现类
package ui;
//主函数实现
public class Main {
public static void main(String[] args) {
//创建窗体
GameFrame frame = new GameFrame();
//创建面板
GamePanel panel = new GamePanel(frame);
//调用开始游戏的方法启动游戏
panel.action();
//将面板加入到窗体中
frame.add(panel);
//设置窗体可见
frame.setVisible(true);
}
}
三.GameFrame.java
窗体类,绘制窗体
package ui;
import javax.swing.*;
//创建窗体
public class GameFrame extends JFrame {
//构造方法,初始化窗体属性
public GameFrame(){
//设置标题,来源于JFrame
setTitle("飞机大战");
//设置大小
setSize(512,768);
//设置居中
setLocationRelativeTo(null);
//设置窗体可见
//setVisible(true);
//不允许玩家修改界面大小
setResizable(false);
//设置默认的关闭选项
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
四.GamePanel.java
画布类,用于勾勒元素
package ui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
//自定义游戏面板(创建画布)
public class GamePanel extends JPanel {
//定义背景图
BufferedImage bg;
//构造游戏机
Hero hero = new Hero();
//敌机集合
List<Ep> eps = new ArrayList<Ep>();
//弹药集合
List<Fire> fs = new ArrayList<Fire>();
//定义分数
int score;
//设置游戏开关
Boolean gameover=false;
//设置火力
int power = 1;
//动作函数,描绘场景内飞行物的运动状态
public void action(){
//创建线程(基本模板)
new Thread(){
public void run(){
//无线循环创建
while (true){
//判断如果游戏没有失败,则执行以下操作
if(!gameover){
//敌机进场
epEnter();
//调用敌机移动方法
epMove();