【java毕业设计】基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码) 您所在的位置:网站首页 飞机大战课程设计实验报告总结与反思怎么写 【java毕业设计】基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码)

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

2024-06-17 07:44| 来源: 网络整理| 查看: 265

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

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

文章目录:

基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码)1、项目简介2、资源详情3、关键词:4、毕设简介:5、源码下载:

1、项目简介

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

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

基于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 核心代码

游戏初始化代码如下: \* * 写于3月20日,主要目的:完成游戏的初始化过程 *\ 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 核心代码 下面是游戏开始模块的功能代码,如下:

\* * 写于3月27日,主要目的:完成游戏的开始界面 *\ private int clearCompletedRows(TetrisPiece piece) { TetrisBoard board = this.getBoard(); for(int i = 0; i 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 if(TetrisConstants.ROTATION_TYPE_TOGGLE == this.rotationType) { // 如果翻转类型为TOGGLE rotateDirection = this.rotationToggle; //判断翻转方向 this.rotationToggle = !this.rotationToggle; // 如果与canRotate匹配, 中心点方块将被使用 } // 重构四个小块,每个都转动 for(int i = 0; i // 如向左旋转 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 // 选中目标,发射子弹 return false; } } return true; }

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

\* * 写于4月12日,主要目的:完成游戏的难度选择 *\ 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 核心代码 积分板实现代码如下:

\* * 写于4月16日,主要目的:完成游戏的积分模块 *\ 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 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.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 if ((x + WIDTH) - 14F > chara.x && x + 14F chara.y && y + 12F power--; } power -= 50; if (power oldx = x; oldy = y; if (Key.left) { if (Key.xkey) x -= (double) speed / 4D; else x -= speed; if (x 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 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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有