【java毕业设计】基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码)——飞机大战游戏

基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于java+Eclipse的飞机大战游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。
需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦

文章目录:

1、项目简介

  1. 现如今,随着智能手机的兴起与普及,加上4G(the 4th Generation mobile communication ,第四代移动通信技术)网络的深入,越来越多的IT行业开始向手机行业转移重心。而手机行业中游戏方面的利润所占比重较大,并且手机游戏大多数则是由Java语言开发研制的。所以我想顺应时代发展,用学到的Java知识对游戏进行一次深入的了解与创作。

  2. Java语言在我们大学学习中占了很大的比重,其优点甚多:面向对象,可靠,安全,多平台可移植,高性能,多线程等。面向对象是相对于c语言的面向过程来说的,在面向对象编程中,我们用Java去新建一个对象,调用其方法就能实现我们的目标,并不需要了解这个对象的方法的具体实现过程;Java的可靠安全特点体现Java不支持指针,禁止第三方访问,杜绝了外部风险。所以使用Java开发游戏,是一个正确的选择。

  3. 基于Java的飞机大战游戏主要需要我方飞机和敌方飞机,还有子弹,特殊nPC,开始背景,结束背景,以及背景音乐。我方飞机可以随意移动,敌方飞机无规律出现。游戏玩家通过鼠标移动控制飞机移动,我方飞机在游戏开始时就一直能发射子弹,当我方子弹碰到敌方飞机时,敌方飞机消失。当玩家飞机碰到敌方子弹时,生命值减一,直到玩家飞机生命值为一时,游戏结束。基本模块包括:游戏状态控制功能模块、游戏难度的调整模块、游戏界面绘画功能模块、玩家游戏控制功能模块等。本系统结构如下:
    (1)游戏状态控制功能模块:游戏的状态控制包括运行及结束游戏,首先进入游戏的开始页面,在游戏进行时,玩家必须躲避或者击落敌方飞机,玩家飞机的生命值降低为0的时候游 戏就会结束,弹出游戏结束界面
    (2)游戏难度的调整模块:玩家玩的时间越长游戏的难度越高,敌方飞机的数量越多、敌方飞机出现的频率越高,玩家保证飞机的存活的难度越高,操作难度相应也高。
    (3)游戏界面绘画功能模块:左上角会显示玩家飞机当前生命值,游戏时间,当前分数,其他地方用来输出玩家对我方飞机的控制与敌方飞机的动作显示
    (4)玩家游戏控制功能模块: 玩家可以通过控制鼠标或者键盘来控制方飞机(Hero airplane)的移动。


2、资源详情

项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:20825个字
包含内容:整套源码+完整毕业论文+答辩PPT+辅导视频+运行截图


3、关键词:

Java游戏;面向对象;可靠安全;多线程;

4、毕设简介:

提示:以下为毕业设计的简略介绍,项目源码及完整毕业论文下载地址见文末。

引言
1.1 项目背景
90后的我们,童年最开始接触电子游戏是在游戏厅,那时候的飞机大战游戏机前,往往人山人海,绚丽多彩的画面,带感操作让人沉醉不能自拔。再后来,珍珠港(Pearl Harbor),虎虎虎(Tora! Tora! Tora!)等空战电影中激烈的空战和飞机在天空中的英姿让我彻底爱上了空战,所以毕业设计我选择了与飞机战斗有关——基于Java的飞机大战游戏的设计与实现的毕业设计。
省略

1.2 国内外研究现状
省略

在游戏的发展中涉及到了大量的Java技术,某些技术现在已经淘汰,但是也有些技术一直在使用。如Sun公司较早推出了3D技术-- Java3D,是一个高度封装的API,OpenGL和Direct 3D都是基于Java3D的,可以说是最有名的3D Java技术;Jogl函数则是opengl接口对Java的实现;lwjgl函数(light weight Java game library)是将游戏图形(opengl)、音效(openal)、控制输入集合为一,以成为Java界的directx(不是direct3d)而努力;joal函数则是Java对openal的一个绑定,是Java音效的一个解决方案;jinput函数是Java对非标准输入设备(游戏手柄,操纵杆)的解决方案; Project Wonderland是Sun开发的一个3d虚拟世界构建工具等。

由于VR(Virtual Reality)虚拟现实的发展,对游戏的发展影响巨大。科幻电影小说中的科幻游戏玩法有可能成为现实,未来游戏也许不需要鼠标键盘,只需要一个类似VRBox的头盔设备即可完成指令的输入与输出。

1.3 项目主要工作
本次项目的题目——基于Java的飞机大战游戏的设计与实现,主要目的是实现飞机大战这个游戏。期望结果:游戏无BUG,简单易上手,老少皆宜,让玩家“玩不释手”。

从游戏的玩法来说,主要就是我方飞机(Hero airplane)和敌方飞机(Enemy airplane)的对决,首先是游戏的开始界面与结束界面,然后就是我方飞机(Hero airplane)的移动方式(鼠标移动或者键盘移动,我打算选择鼠标移动,因为鼠标移动可以转移到手机上,现在大多数手机都没有键盘,基本靠手指滑动操作),接下来就是我方飞机(Hero airplane)子弹的生成,然后是敌方飞机(Enemy airplane)的出现坐标的选择,然后飞机与子弹防碰撞,飞机与飞机的防碰撞,最后是我方飞机(Hero airplane)与敌方飞机(Enemy airplane)的对战结果。

该游戏要满足以下功能性需求:
(1)游戏状态控制功能
游戏的状态控制包括运行、暂停、恢复及结束游戏,首先是游戏的开始页面,在游戏正在进行时,如果你有其他的事情又不想结束游戏你可以将鼠标移出游戏界面或者鼠标在游戏界面单击即可暂停游戏,当你的其他事情解决后你还可以选择恢复游戏,继续玩下去,当游戏结束时会显示游戏结束界面。

(2)游戏难度的调整
玩家随着玩游戏的时间的增加,敌方飞机的数量会增加,出现的频率会有所提高,移动速度也会提高。

(3)游戏界面绘画功能
在右上角显示游戏时间(游戏难度于时间成正比,即游戏时间越长难度越高),玩家游戏得分,与我方飞机生命值,游戏主屏用来显示玩家对我方飞机(Hero airplane)的控制与敌方飞机(Enemy airplane)的出现及移动的显示。

(4)玩家游戏控制功能
玩家可以通过控制移动鼠标或者键盘来控制友机的移动。

1.4 本文组织结构
本文的组织结构如下:
第一部分介绍了本文的国内外背景。
第二部分介绍了开发游戏项目涉及到的软件平台与开发语言。
第三部分介绍了项目的需求分析。
第四部分介绍了项目各个模块的实现。
第五部分介绍了对软件测试的过程及结果,找到项目的优缺点。

2 开发平台与开发技术
本章主要介绍软件开发平台如何选择。本软件涉及到的开发平台是IntelliJ IDEA,开发技术是Java技术。下面将会介绍一下选择IntelliJ IDEA的理由。

2.1 IntelliJ IDEA简介
IntelliJ IDEA是一个Java的 集成开发环境(IDE),用于开发各种项目的计算机软件。

IntelliJ IDEA特点:
1.编码提示 IDE可以进行代码提示,比如:结合上下文对当前代码进行补充;代码导航,可以快速定义到某个声明过的类;代码错误提示,对于代码错误的地方进行提示并且提供有效的解决方案。
2.内置工具和整合 IDE提供了构建与打包工具,如grunt , bower , gradle , 和 SBT 。它支持各个版本的控制系统,如 GIT , Mercurial , Perforce , and SVN 。可以直接从IDE对SQL Server,ORACLE,PostgreSQL和MySQL数据库进行访问。
3.各种各样的插件系统 IntelliJ IDEA支持插件,通过插件可以对IDE添加额外的功能。无论是从IntelliJ IDEA的插件库网站或通过IDE的内置插件,都可以进行搜索插件和插件的安装。目前的IntelliJ IDEA个人版则拥有1495个可用的插件,其中IDE的旗舰版则拥有1626个可用的内置插件。

2.2 IntelliJ IDEA与Eclipse 的比较
我们大学学习中,对于Java的开发工具一般都是选择 Eclipse,MyEclipse开发工具。Eclipse是Sun公司自己开发的Java开发工具,优点在于简洁没有插件,用户可以根据自己的需求自己寻找安装合适的插件,同时这也是它的缺点,没有提供插件,某些开发就会让人感觉不方便,并且插件都是个人开发,并不是适合所有人。MyEclipse则需要收费(虽然网上有破解版,但是并不提倡,支持正版从你我做起),它实际上是将eclipse和其他常用插件集成在一起的一个庞大开发工具,优势就是常用插件齐全,不用自行下载安装,当然支持自己扩展,劣势就是插件太多导致软件繁重,运行时占用系统太多资源,当然他是收费的(对于学生来说这个是致命的)。

省略

2.3 Java
Java是一个通用计算机编程语言,是并发的,类型,面向对象的。它的目的是让应用程序开发者“一次编写,到处运行”,也就是说Java可以在任何设备上开发,也可以在任何装有Java虚拟机(JVM)设备上运行,而无需再次编译。
Java应用程序通常被编译成字节码可以在任何装有Java虚拟机上(JVM)的计算机体系结构上运行。
省略

3 可行性研究
可行性研究顾名思义,研究其的可行性。可行性研究是项目开发之前的重要阶段。在软件开发实践中,软件开发人员或者用户对市场的了解不充分,对技术的掌握不好,对进行开发的各项风险评估不足等因素,有些问题不能再预期下得到解决,造成不可预估的损失,为了避免盲目的软件开发和不必要的损失,相关人员需要对开发特定软件项目的可行性进行研究,结合资金、时间和环境等各方面的制约条件,对该软件产品是否能够解决存在的问题,是否能够带来预期的效果和价值做出评估。

3.1 技术可行性
现在开发游戏的语言一般都是Java语言,为了保证开发出来的游戏可以在手机、Web浏览器、PC客户端等平台使用,所以就要求开发语言可以在多平台移植,而Java语言刚好符合这个特性。开发工具IntelliJ IDEA可以下载并且可以免费使用,Java的编译工具JDK也可以在Sun官网上直接下载安装,其过程十分简单。

3.2 经济可行性
配置较低的电脑也能进行Java游戏的开发,一台电脑就行,开发成本低。由于Java具有跨平台以及一次编译,到处运行的特点,开发出来的游戏可以放到各大游戏平台上发售,玩家可以在电脑,浏览器,手机等各种平台运行。而且软件维护简单,实用性强,一次开发使用,即可长久使用,当软件满足不了用户需求时,只需对用户的需求进行添加即可。

3.3 操作可行性
本游戏操作简单,在电脑和浏览器上可以用鼠标键盘操作,在手机上可以用手触摸屏幕运行。

3.4 用户使用可行性
本软件操作简单,对用户的要求,不需要多强技术能力。

3.5 法律可行性
信息产业部已将游戏通用引擎研究及示范产品纳入国家“863计划”,这是中国首次将游戏技术纳入国家科技计划当中。

4 需求分析
需求分析是对即将开发的系统确定一个完整的,准确的要求。需求分析的结果是否完美解决了用户的问题,将直接影响到后面的进程,并影响到设计结果是否能让用户接受。软件需求分析对软件系统提出了清楚、准确、全面而具体的要求,是对软件使用者意图不断进行揭示与准确判断的过程,它并不考虑系统的具体实现,而是严密地、完整地描述了软件系统应该做些什么的一种过程。

4.1 系统需求概述
飞机大战主要需要我方飞机和敌方飞机,还有子弹,特殊nPC,开始背景,结束背景,以及背景音乐。我方飞机可以随意移动,敌方飞机无规律出现。游戏玩家通过鼠标移动控制飞机移动,我方飞机在游戏开始时就一直能发射子弹,当我方子弹碰到敌方飞机时,敌方飞机消失。当玩家飞机碰到敌方子弹时,生命值减一,直到玩家飞机生命值为一时,游戏结束。
基于Java的飞机大战游戏的设计与实现有以下几个模块:
(1)游戏状态控制功能模块
(2)游戏难度的调整模块
(3)游戏界面绘画功能模块
(4)玩家游戏控制功能模块

4.2 功能模块设计
4.2.1 游戏状态控制功能模块
游戏的状态控制包括运行及结束游戏,首先进入游戏的开始页面,在游戏进行时,玩家必须躲避或者击落敌方飞机,玩家飞机的生命值降低为0的时候游戏就会结束,弹出游戏结束界面。

4.2.2 游戏难度的调整模块
玩家玩的时间越长游戏的难度越高,敌方飞机的数量越多、敌方飞机出现的频率越高,玩家保证飞机的存活的难度越高,操作难度相应也高。

4.2.3 游戏界面绘画功能模块
左上角会显示玩家飞机当前生命值,游戏时间,当前分数,其他地方用来输出玩家对我方飞机的控制与敌方飞机的动作显示

4.2.4 玩家游戏控制功能模块
玩家可以通过控制鼠标或者键盘来控制方飞机(Hero airplane)的移动。

4.3 游戏难点分析
4.3.1 绘图美化
清新靓丽的游戏界面将给用户带来愉悦的美感。因此,在这个游戏中,主要参考原始的游戏画面,敌我飞机的形象也应该是美丽的。

4.3.2 多线程技术的实现
应用程序线程机制的基石,实现了游戏,游戏的刷架的控制,装上各种角色的资源和背景(如飞机,机友)的要求,以实现整个游戏实现自动控制线程 控制。

4.3.3 防碰撞问题的解决
例如,敌方飞机与玩家飞机防碰撞,敌方飞机与玩家飞机防碰撞,等等。防碰撞检测技术实现在不同情况下,有不同的防碰撞检测方法。

4.3.4 动画的实现
用图片的阵列,动画切片变换形成。图像阵列,千变万化的图像画在画布标,使动画,这是一个图像的形成阵列。使用切片来实现动画,所有的帧都放置在相同的图像中,以达到爆炸的效果。

5 飞机大战功能实现
5.1 模型图

在这里插入图片描述

图1-1 飞机大战游戏的模型图

5.2 软件功能模块
在这里插入图片描述

图1-2 飞机大战游戏的软件功能模块图

5.3 游戏首页的实现
5.3.1 界面实现
飞机大战的界面如图1-3所示。
在这里插入图片描述

图1-3 飞机大战游戏开始界面

5.3.2 流程图
游戏开始的流程图如图1-4所示。
在这里插入图片描述

图1-4 游戏初始化流程图

5.3.3 核心代码

游戏初始化代码如下:
\*
*   写于320日,主要目的:完成游戏的初始化过程
*\
public final void paint(Graphics g) {
      g.setColor(this.bgColor);
      g.fillRect(x, y, width, height);
      g.setColor(this.fgColor);
      g.drawRect(x, y, width, height); 
      this.paintBoxContents(g);
}
private void paintBlock(int x, int y, int blockType, Graphics g) {
      int blockX = this.boardX + (this.blockSize * x);
      IntblockY=this.boardY+(this.blockSize*(y-TetrisConstants.TOP_
      VISIBLE_ROW));
      if(TetrisConstants.BLOCK_EMPTY != blockType) {
            g.setColor(TetrisConstants.COLOR_BLACK);
            g.fillRect(blockX + 1, blockY + 1, this.blockSize - 1, this.
            blockSize - 1);
            this.setColor(blockType, g);
            g.fillRect(blockX, blockY, this.blockSize - 1, this.blockSize - 1);
            } 
else {
            g.setColor(TetrisConstants.COLOR_WHITE);
            g.fillRect(blockX, blockY, this.blockSize, this.blockSize);
            }
      }

5.4 游戏开始模块的实现
5.4.1 界面实现
飞机大战的开始界面如图1-5所示。

在这里插入图片描述

图1-5 飞机大战开始界面

5.4.2 流程图
流程图如图1-6所示。
在这里插入图片描述

图1-6 游戏开始模块程序流程图

5.4.3 核心代码
下面是游戏开始模块的功能代码,如下:

\*
*   写于327日,主要目的:完成游戏的开始界面
*\

private int clearCompletedRows(TetrisPiece piece) {
		TetrisBoard board = this.getBoard();
		for(int i = 0; i < TetrisConstants.FOUR_BLOCKS; i++) {
			int rowY = piece.getBlockY(i);
			if(board.checkRowCompleted(rowY)) {
				this.markRowCompleted(rowY, true);
			}
		}
		int numClearedRows = 0;
		for(int y = TetrisConstants.HEIGHT - 1; y >= 0; y--) { 
			if(numClearedRows > 0) {
				board.dropRow(y, numClearedRows);
			}
			if(this.isRowCompleted(y)) {
				numClearedRows++;
				this.markRowCompleted(y, false);	
			}
		}
		for(int i = 0; i < numClearedRows; i++) {
			board.clearRow(i);
		}
		return numClearedRows;
}

5.5 发射子弹模块的实现
5.5.1 界面实现
发射子弹界面实现如图1-7所示。
在这里插入图片描述

图1-7 发射子弹界面

5.5.2 流程图
流程图如图1-8所示。
在这里插入图片描述

图1-8 发射子弹模块程序流程图

5.5.3 核心代码
发射子弹实现代码如下:

\*
*   写于45日,主要目的:完成游戏的子弹的自动发射
*\

    public void rotate(int pivotX, int pivotY, boolean rotateDirection) {
		if(TetrisConstants.ROTATION_TYPE_TOGGLE == this.rotationType) {
			// 如果翻转类型为TOGGLE
			rotateDirection = this.rotationToggle; //判断翻转方向
			this.rotationToggle = !this.rotationToggle; // 如果与canRotate匹配,
               中心点方块将被使用
		}
		// 重构四个小块,每个都转动
		for(int i = 0; i < TetrisConstants.FOUR_BLOCKS; i++) {
			int blockX = this.getBlockX(i);
			int blockY = this.getBlockY(i);
			//  左旋转:交换x和y坐标,x坐标取反
			//  右旋转:交换x和以坐标,y坐标取反
			int dx = blockY - pivotY;
			int dy = blockX - pivotX;
			if(rotateDirection) {
				// 如向左旋转
				dx *= -1;
			} else {
				// 如向右旋转
				dy *= -1;
			}
			int rotateX = pivotX + dx;
			int rotateY = pivotY + dy;
			this.setBlockCoords(i, rotateX, rotateY);//得到翻转后的新坐标
		}
}
    选中敌机目标后,开始发射子弹。在TetrisBoard.Java中的checkRowCompleted()方法实现了此功能,其代码如下:
    public boolean checkRowCompleted(int rowY) {
		for(int x = 0; x < TetrisConstants.WIDTH; x++) {
			if(TetrisConstants.BLOCK_EMPTY == this.getBlockType(x, rowY)) {
				// 选中目标,发射子弹
				return false;
			}
		}
		return true;
}

当击中敌机后,积分就会有所变化,计算并显示出用户当前的分数。同时等待玩家键入数字,选择游戏难度开始新的游戏。其实现由init()方法控制,其代码如下:

\*
*   写于412日,主要目的:完成游戏的难度选择
*\

private void init() {
	this.board = new TetrisBoard();
	this.gameCanvas = new TetrisCanvas(this);
	this.activePiece = new TetrisPiece();
	this.completedRows = new boolean[TetrisConstants.HEIGHT]; //初始化数组
	this.hiScore = this.openAndReadHiScore();	
		this.nextPieceType = TetrisConstants.UNINITIALIZED;
		this.rand = new Random();
		// 设置exit/pause/resume命令
		this.setuPCommands();
		this.gameCanvas.addCommand(this.exitCommand);
		// 显示title屏
		this.setGameState(TetrisConstants.TITLE_STATE);
}

5.6 积分模块的实现
5.6.1 界面的实现
飞机大战积分模块界面如图1-8所示。
在这里插入图片描述

图1-8 积分模块
5.6.2 核心代码
积分板实现代码如下:

\*
*   写于416日,主要目的:完成游戏的积分模块
*\

public void drawCount(Graphics g){
		g.setColor(Color.white);
		Font font = new Font("宋体", 1, 20);
		g.setFont(font);
		g.drawString("积分:" + this.score, 0, 470);	
}
实现积分的增长:
if (burst != null)
	burst.draw(g_off);
for (int i = 0; i < list.size(); i++) {
	Role chara1 = (Role) list.get(i);
	if (chara1.isDead()) {
		if (chara1 instanceof Enemy)
		{
			chara1.drawBurst(g_off);
			this.battle.score++;
		}
		list.remove(i);
	}
}
全屏爆炸时,计算炸死几个敌人增长分数:
if(GamePanel.skillCount>0){
		for (int i = 0; i < GamePanel.list.size(); i++) {
			Role chara1 = (Role) GamePanel.list.get(i);
			if(!(chara1 instanceof Battle) && chara1.x>0 && chara1.y>0     
          && !(chara1 instanceof BossA)  && !(chara1 instanceof BossB)  
          && !(chara1 instanceof BossC)){
				GamePanel.list.remove(i);
				if(chara1 instanceof Enemy){
					this.score++;
				}
实现积分的输出:
private void gameOver() {
		GamePanel.skillCount = 10;
		if (Key.enter) {
			gameMode = 12;
			stage = 1;
		} else {
			g_off.setColor(Color.white);
			Font font = new Font("黑体", 1, 28);
			g_off.setFont(font);
			FontMetrics fontMetrics = getFontMetrics(font);
			g_off.drawString("Game Over", (450 - fontMetrics
					.stringWidth("Game Over")) / 2, (500 + fontMetrics
					.getHeight()) / 2 - 50);
			String score = "Score: " + this.battle.score;
			g_off.drawString(score, (450 - fontMetrics
					.stringWidth(score)) / 2, (500 + fontMetrics
					.getHeight()) / 2 - 20);
			if (15 <= current % 50)
				g_off.drawString("请按 回车", (450 - fontMetrics
						.stringWidth("请按 回车")) / 2,
						(500 + fontMetrics.getHeight()) / 2 + 100);
		}
	}

5.7 防碰撞逻辑
判断飞机是否中弹的逻辑非常简单就是在绘制飞机与子弹的时候判断两个图片是否存在重合的部分,如果存在则玩家生命值减一,之后将中弹飞机从飞机队列中删除,子弹同样的处理。
5.7.1 核心代码
防碰撞逻辑核心代码如下:

\*
*   写于424日,主要目的:完成游戏的防碰撞模块
*\

public boolean checkHit(Role chara) {
		if ((chara instanceof EnemyA) || (chara instanceof EnemyB)|| (chara 
         instanceof EnemyC) || (chara instanceof EnemyShot)) {
			if ((x + WIDTH) - 14F > chara.x && x + 14F < chara.x + 
               chara.WIDTH
					&& (y + HEIGHT) - 12F > chara.y
					&& y + 12F < chara.y + chara.HEIGHT) {
				//如果碰到敌人,敌人死亡
				chara.dead();
				//如果碰到子弹血量减少
				if (chara instanceof EnemyBeam){
					power--;
				}
					
				power -= 50;
				if (power <= 0) {
					dead();
					//绘制爆炸图片
					GamePanel.burst = new Burst(x, y);
				}
				return true;
			}

5.8 游戏操作的实现
本游戏操作采用鼠标/键盘的移动来实现玩家飞机的移动。
5.8.1 核心代码
游戏操作实现代码如下:

\*
*   写于423日,主要目的:完成游戏的游戏操作
*\

public void move() {
		oldx = x;
		oldy = y;
		if (Key.left) {
			if (Key.xkey)
				x -= (double) speed / 4D;
			else
				x -= speed;
			if (x <= 0.0F)
				x = 0.0F;
		}
		if (Key.right) {
			if (Key.xkey)
				x += (double) speed / 4D;
			else
				x += speed;
			if (x + WIDTH >= (float) app.getWidth())
				x = (float) app.getWidth() - WIDTH;
		}
		if (Key.down) {
			if (Key.xkey)
				y += (double) speed / 4D;
			else
				y += speed;
			if (y + HEIGHT >= (float) app.getHeight())
				y = (float) app.getHeight() - HEIGHT;
		}
		if (Key.up) {
			if (Key.xkey)
				y -= (double) speed / 4D;
			else
				y -= speed;
			if (y <= 0.0F)
				y = 0.0F;
		}

5.9 特殊NPC蜜蜂

\*
*   写于430日,主要目的:完成游戏的特殊NPC的添加
*\

package com.tarena.fly;
import Java.util.Random;
/**蜜蜂*/
public class Bee extends FlyingObject implements Award{
	private int xSpeed=1;//x坐标移动速度
	private int ySpeed=2;//y坐标移动速度
	private int awardType;//奖励类型
	
	/**初始化数据*/
	public Bee(){
		this.image=ShootGame.bee;
		width=image.getWidth();
		height=image.getHeight();
		y=-height;
		Random rand=new Random();
		x=rand.nextInt(ShootGame.WIDTH-width);
		awardType=rand.nextInt(2);//初始化时给奖励
	}
	
	/**获得奖励类型*/
	public int getType(){
		return awardType;
	}
	/**越界处理*/
	@Override
	public boolean outOfBounds(){
		return y>ShootGame.HEIGHT;
	}
	/**移动,可斜着飞*/
	@Override
	public void step(){
		x+=xSpeed;
		y+=ySpeed;
		if(x>ShootGame.WIDTH-width){
			xSpeed=-1;
		}
		if(x<0){
			xSpeed=1;
		}
	}
}

6 系统测试
测试是处在开发阶段的最后部分,是保证软件质量的重要手段。软件测试是一个软件应用程序或一个所谓的条件处理和评估在控制条件(包括正常条件和非正常条件)下操作并评价其结果的过程。软件测试过程中应当故意诱导程序发生错误,正常情况下它虽然不应该存在,但是不确定它有可能在任何时候出现。从本质上说,软件测试是“探测”发现“探针”的问题。

6.1 测试的定义及其重要性
6.1.1 测试的定义
软件测试是一项为了给利益相关方提供有关产品质量或者是正在测试的服务的信息而进行调查的过程。软件测试也可以提供一个客观,独立的视角来看待软件,以便让企业知晓并理解软件实现过程中可能存在的风险。软件测试技术是一种带着为了发现软件或者程序的BUG(错误或者其他的缺陷)的态度来运行一个程序或者应用的过程。
省略

6.1.2 测试的重要性
省略

6.2 测试方法
程序测试的主要方法分为两大类:白盒测试和黑盒测试。
白盒测试(也称为清晰盒测试,玻璃盒测试,透明盒测试和结构测试)可以观察源代码,测试内部结构或程序的运作,而不是暴露终端用户的功能。白盒测试系统,用于设计测试用例,以及透视内部编程的技巧。测试器通过选择路径输入代码来确定相应的输出。这类似于在测试一个电路节点,例如:电路测试(ICT)。

黑盒测试把软件作为一个“黑盒子”,具有审查的功能,而有关内部实现的任何细节都不清楚,也看不到其源代码。该测试人员只了解该软件的功能与作用,而不清楚它是如何具体实现的。黑盒测试方法包括:等价类划分,边界值分析,全局测试,状态表转移,决策表测试,模糊测试,基于模型的测试,用例测试,探索性测试和基于规范的测试。

省略

6.3 测试结果
软件评价是指软件在正式运行了一段时间之后,对它在功能上、技术上和经济上所进行的审核评价。针对本软件的评价如下:
(1)软件功能评价
根据这套软件开发前的目标,试运行完成后软件后,软件达到了预定的发展目标,在实际使用功能可满足用户的需求。

(2)软件技术评价
该软件设计合理,功能达到预期目标,软件后运行稳定,可靠,安全,实用。

(3)软件经济评价
在规定时间内,该软件完成后,软件分析,以确定软件的发展目标,符合设计要求,投入使用,为用户节省了大量的人力,物力和财力,提高科学管理水平。

7 结论
省略

本次设计运用了Java相关知识及软件工程的思路进行开发。在实现功能的同时更加侧重于对开发Java游戏的研究。由于时间、条件有限,经验不足等,本文所做的工作还有很多不足之处,还需要进一步学习和研究。

参考文献
[1]杨大生, 陈忠. 基于Symbian平台飞机大战游戏设计[J]. 福建电脑, 2010(07):140-140
[2]谢海军. 基于Java的手机游戏引擎的研究及实现[D]. 西南交通大学, 2007.
[3]马鹏强. 基于J2ME的手机五子棋游戏设计与实现[D]. 电子科技大学, 2012.
[4]周凤英, 文惺. Java游戏开发起步[J]. 电脑爱好者, 2003(14):116-116.,
[5]陈立伟. 精通Java手机游戏与应用程序设计[M]. 中国青年出版社, 2005.
[6]丁知平, 罗光华, 陈传起,等. 基于项目驱动的Java手机游戏开发教学方法的探讨[J]. 科技信息:科学教研, 2008(7):208-208.
[7]陈小玉. 基才J2ME的Java手机游戏开发实例[J]. 电脑编程技巧与维护, 2005.
[8]Ross J M. Guiding students through programming puzzles: value and examples of Java game assignments.[J]. Acm Sigcse Bulletin, 2002, 34(4):94-98.
[9]Wang Y H, Wu I C, Jiang J Y. A portable AWT/Swing architecture for Java game development[J]. Software Practice & Experience, 2007, 37(7):727–745.
[10]Zhu Y. Design and implementation of a Java game applet[J]. Computer Science & Software Engineering, 2002.

致谢
省略


5、源码下载:

本项目源码及论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

序号毕业设计全套资源(点击下载)
本项目源码基于java+Eclipse的飞机大战游戏设计与实现(源码+文档)_JAVA_Eclipse _飞机大战游戏.zip
  • 1
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于Java飞机大战游戏主要需要我方飞机和敌方飞机,还有子弹,特殊nPC,开始背景,结束背景,以及背景音乐。我方飞机可以随意移动,敌方飞机无规律出现。游戏玩家通过鼠标移动控制飞机移动,我方飞机在游戏开始时就一直能发射子弹,当我方子弹碰到敌方飞机时,敌方飞机消失。当玩家飞机碰到敌方子弹时,生命值减一,直到玩家飞机生命值为一时,游戏结束。基本模块包括:游戏状态控制功能模块、游戏难度的调整模块、游戏界面绘画功能模块、玩家游戏控制功能模块等。本系统结构如下: (1)游戏状态控制功能模块:游戏的状态控制包括运行及结束游戏,首先进入游戏的开始页面,在游戏进行时,玩家必须躲避或者击落敌方飞机,玩家飞机的生命值降低为0的时候游 戏就会结束,弹出游戏结束界面 (2)游戏难度的调整模块:玩家玩的时间越长游戏的难度越高,敌方飞机的数量越多、敌方飞机出现的频率越高,玩家保证飞机的存活的难度越高,操作难度相应也高。 (3)游戏界面绘画功能模块:左上角会显示玩家飞机当前生命值,游戏时间,当前分数,其他地方用来输出玩家对我方飞机的控制与敌方飞机的动作显示 (4)玩家游戏控制功能模块: 玩家可以通过控制鼠标或者键盘来控制方飞机(Hero airplane)的移动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

毕业设计方案专家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值