JavaSE期末课程设计——飞机大战(IDEA、eclipse)

前言

声明:该文章只是做技术分享,若侵权请联系我删除。!!
感谢大佬的视频:
https://www.bilibili.com/video/BV1JT4y1n7kD/?vd_source=5f425e0074a7f92921f53ab87712357b

源码:https://space.bilibili.com/565112134

使用技术:Java(JavaSE期末课程设计)
主要内容:用java实现飞机大战

主要内容

1、首页

主要功能:实现小时候玩的一个小游戏,飞机大战,玩家通过上、下、左、右。按键控制我放战斗机发射子弹,击毙敌机,敌机数量较多,需要躲避敌机的炮弹,将敌机击毙即可,上下左右按键均可控制战斗机的行动。敌机是速度较快,需要玩家灵活的控制战斗机,躲避敌机的同时,能够最大限度的击毙敌机,当玩家命中大boss且boss血量小于0时游戏胜利,当我方战斗机血量小于0时,游戏失败、结束。
在这里插入图片描述

2、系统流程图

在这里插入图片描述

3、需求分析

(1)飞机大战游戏需要用到java基础语法和一下基本库的使用。在对该游戏设计开发的时候,首先要有面向对象的思想,在java里面万物皆对象,在对图片进行处理时。只需要加载图片,使图片成为对象,对这个对象进行基本操作就可以完成相应功能

(2)框架搭建,在对游戏处理时,需要对游戏平台进行设计,即创建窗口和游戏面板,在游戏面板上进行对飞机、子弹等图片对象的基本操作。

(3)线程使用,在对飞机对象的操作时,涉及到飞机、子弹的运动,要使用线程模块将对象的运动进行简化和加工,这样可以减少内存的消耗。对图片的处理能力进行了 优化。

(4)对象控制,对象控制可以继承java的keyAapter类,该类可以读取键盘键值,通过if语句对相应按键进行对不同对象运行的处理,通过上下左右按键实现战斗机的上下左右移动。

(5)事件处理和优化,在敌机的运动中,敌机要随机参数运动位置,并且要对出了游戏面板后需要将敌机删除。当子弹和敌机碰撞后要将敌机移除。

(6)java基础,封装、继承:在代码编写时,类的继承尤其重要而且容易出错误,使用@overide该方法是继续过来或者实现的方法,如果加了该注解,它的父类或者实现的接口中没有该方法,则ide会报错。同时,在战斗机中,子弹类可以设置成内部类,变于对象的操作和实现。

(7)游戏面板。创建窗口后,飞机、子弹对象并不是直接添加的窗口对象,因为在游戏过程中,需要不断的更新画面,所以使用JPenl类创建了游戏面板。可以方便的在游戏面板上对图片进行操作,如图片的更新,移除。

(8)碰撞检测:当子弹和敌机或者敌机和玩家的战斗机发射碰撞时,需要做相应处理,使用getRect().intersets()方法很好的对图片对象进行碰撞判断。

4、功能模块设计

在这里插入图片描述

5、效果截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关键代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class PlaneFrame extends JFrame{
	PlanePanle jp;
	//子弹队列
	static List<Shell> list = new ArrayList<Shell>();
	//boss队列
	static List<Boss> bossList = new ArrayList<Boss>();
	//敌方战机队列
	static List<EnemyPlane> enemyList = new ArrayList<>();
	//存放boss子弹对象
	static ArrayList<Shell> bossBulletList=new ArrayList<Shell>();
	//存放敌机子弹
	static ArrayList<Shell> enemyShell = new ArrayList<Shell>();
	static int enemyPlaneCount=0;//敌方的数目
	static int enemyPlaneNumber=5;   //设置敌人最大飞机数目
	static int bossCount;//boss的数量
    static int bossNumber=1;//boss的最大数量
	public static String path=System.getProperty("user.dir")+"\\Resouce";
	public static HashMap<String,BufferedImage> maps = new HashMap<>();
	public void start() {
		File[] file = new File(path).listFiles();
		for(int i=0;i<file.length;i++) {
			try {
				maps.put(file[i].getName(), ImageIO.read(file[i]));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public PlaneFrame() {
		//设置窗口大小
		this.setSize(640,700);
		//设置窗口名称
		this.setTitle("信工16级2班黄通作品--飞机游戏");
		//居中
		this.setLocationRelativeTo(null);
		//设置不可改变大小
		this.setResizable(false);
		//关闭程序,释放资源
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//添加一个适配器
		this.addKeyListener(new MyKeyListener());
		//开始加载图片
		start();
		//添加面板
		jp = new PlanePanle();
		add(jp);
		//设置窗口可见
		setVisible(true);	
	}
	//添加一个适配器
	class MyKeyListener extends KeyAdapter{
		public void keyPressed(KeyEvent e) {
			jp.keyPressed(e);
		}
	}
	public static void main(String[] args) {
		new PlaneFrame();
	}
}

总结

想要看具体效果的同学,可以访问这个链接:
https://www.bilibili.com/video/BV1JT4y1n7kD/?vd_source=5f425e0074a7f92921f53ab87712357b
具体的代码也在该链接下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃雪糕的小布丁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值