




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆航天职业技术学院 毕业设计说明书(论文)目录目录1前言21认识Java和Eclipse开发工具31.1 Java发展史31.2 Java运行环境31.3 Java的优势41.4 Eclipse开发工具介绍41.5 开发环境的配置及Eclipse软件的使用51.5.1 JDK的安装与配置51.5.2 使用Eclipse61.5.3 开发Java程序72. 需求分析82.1开始界面82.2游戏功能92.3角色们的行为92.4玩家角色死亡93. 项目开发103.1创建FirstGame(窗体的子类游戏引擎类)103.2创建Player(玩家类)173.3创建Ball(玩家子弹类)233.4创建Foeman(敌军类)243.5 创建FMboll(敌军子弹类)263.6创建Boss类283.7 创建Bossball(boss子弹类)313.8 创建xuetiao(血条类)334.结论(总结)355致谢376参考文献38前言Java是一种简单易用、面向对象、跨平台、安全可靠、主要面向互联网的开发工具,暂且说是一门高级面向对象语言吧。Java也是第一个允许使用者将应用程序通过Internet从远程服务器传输到本地电脑上执行的一种语言;是一种应用程序提供者不用知道使用者的计算机硬件与系统环境的语言。就连盗版用户的好基友比尔盖茨也说过:Java是最卓越的程序设计语言。Java语言作为一种面向对象的编程语言,具有分布式、可移植、高性能、多线程等特点。通过系统学习,人们就可以使用它开发出功能齐全,满足特殊要求的应用程序。Java语言易学易用,对学习者掌握技能,开拓思维都有很大的帮助。我作为一名学生,在系统学习了Java语言之后,经常用它开发一些小程序。本次设计,我就想用学过的Java语言中的各种技术综合起来,编写一个小游戏,即对自己学过的技能进一步检测,也能系统地将学过的知识复习巩固。本次设计是通过一个团队合作完成,使用Java语言的面向对象思想,根据用户的需求,将程序的框架设计好,进行分工,主要使用到的技术有:封装、继承、多态、线程、内部类、匿名类。使用继承为了方便使用父类中的一些方法,线程是本程序中的核心,没有线程程序将不能运行,内部类是为了方便使用外部类中的封装属性及方法,匿名类主要是使用了窗体监听与键盘监听。本程序主要体现了面向对象思想:封装、继承、多态,可以将程序分为多份进行组装,修改起来也方便。还有就是团队的力量是强大的,在遇到问题后不用担心,因为我身边不止一个人。1认识Java和Eclipse开发工具1.1 Java发展史早在1991年,SUN公司的James Gosling带领一个项目组开发出了一种能够在家用电子产品上运行的小型计算机语言,且将该语言命名为Oak。进入20世纪90年代中期,随着互联网的广泛应用,Gosling意识到机会来临了,他对Oak进行了修改,研制出了第一个Java浏览器:HotJava,该浏览器得到SUN公司的高度重视,由于Oak商标已被注册,因此将Oak改名为Java。1996年初,SUN公司正式发布用于Java开发所需的运行和开发环境工具包JDK1.0,随着对它的不断更新和完善,后续的版本不断推出。Java技术包含了三大体系:Java SE 、 Java EE 、 Java ME。 Java SE:是Java技术的核心,提供基础Java开发工具、执行环境与应用程序接口,主要用于对桌面应用程序的开发。 Java EE:用于网络程序的开发 Java ME:是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的高度优化的Java语言平台,包括虚拟机和一系列标准化的JavaAPI。1.2 Java运行环境使用Java语言编写应用程序之前,需要配置Java编程环境,即Java软件开发工具箱( JDK )。该工具箱中包含了编译、运行及调试Java程序所需要的工具。在进行Java开发时,可以采用的工具很多,几乎任何的文本编辑器都可以用来编写Java程序,例如记事本、EditPlus、UltraEdit等。但是如果编写的Java代码量较大,集成开发工具的优势就体现出来了。集成开发工具将编译、运行与调试集于一身,并提供了可视化的编程环境。目前有很多种集成开发工具,例如 JCreator、JBuiler、Eclipse、MyEclipse等。本设计采用Eclipse作为代码编写的开发工具。1.3 Java的优势Java除了具有可移植性、简单、面向对象、健壮性、安全性等。 可移植:实现一次编写、到处运行。 简单:Java的语法实际上是C+语言的净化版本,提供了基本的方法来完成任务。 面向对象:面向对象设计把重点放在了数据和对象接口,而Java的设计就集中于对象及其接口,并提供了简单的类机制以及动态的接口模型。 健壮性:Java的设计目的之一就是编写出可靠的应用程序,与C+相比,Java避免使用指针来访问对象,从而不会导致内存分配错误以及必须预防的内存泄漏等问题。 安全性:Java用于网络 / 分布式环境,因而提供了Java安全机制,禁止了一些操作。例如,禁止运行时堆栈溢出,禁止在自己的处理空间外破坏内存,禁止通过安全控制类装载器来读写本地文件等。1.4 Eclipse开发工具介绍Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(Java Development Tools,JDT)。从网上下载下来的Eclipse主要包含已下几种开发支持。 JDT:专门开发JAVA SE程序平台,提供调试、运行、随笔提示等常见功能。 JUnit:单元测试软件,可以直接对开发的类进行测试。 CVS客户端:版本控制软件的连接客户端,使用时需要进行服务器端的配置。 插件开发:可以开发Eclipse使用的各种插件,丰富开发工具的功能。1.5 开发环境的配置及Eclipse软件的使用1.5.1 JDK的安装与配置安装JDK分以下两个步骤:(1)首先要准备好JDK的安装文件。(2)配置环境变量Path在安装JDK时会让用户选择JDK和JRE的安装目录,使用默认安装。JDK安装完成之后,找到“C:Program FilesJavajdk1.6.0”目录,其中的bin文件夹是开发Java应用要使用到的各种Java命令,想要使用这些命令,就必须在Windows中注册此命令。右击【我的电脑】选择【属性】命令,打开【系统属性】对话框,如图1-1所示,选择【高级】选项卡,单击【环境变量】按钮,打开【环境变量】对话框,在其中编辑Path信息,如图1-2所示,在【环境变量】对话框中单击【系统变量】栏中的【编辑】按钮,弹出的【编辑系统变量】对话框,在【变量值】文本框的最后加上路径,在加之前使用“;”将之前的路径分隔开,如加入内容“;C:Program FilesJavajdk1.6.0bin”,如图1-3所示。设置完成后单击【确定】按钮保存设置,然后启动cmd命令行方式,输入javac,如果出现图1-4所示内容,表示JDK配置成功。图1-1【系统属性】对话框图1-2【环境变量属性】对话框图1-4 JDK配置成功图1-3设置Path路径1.5.2 使用Eclipse将Eclipse开发包进行解压,解压之后直接运行文件目录中eclipse.exe启动Eclipse开发工具,启动之后弹出对话框询问用户建立工作区的路径,下面将E:javaprofessor作为工作区,如图1-5所示,单击ok 进入。图1-5 选择工作区工具启动后进入Eclipse的工作区界面,如图1-6所示。图1-6 Eclipse工具界面1.5.3 开发Java程序在Eclipse中直接使用JDT即可完成Java程序的开发,在工作区中建立属于自己的Java项目,选择【File】【New】【Java Project】命令,进入如图1-7所示的界面,输入项目名称“JavaGame”,单击“Finish”完成。项目完成后在会出现项目的结构树,如图1-8所示。图1-8 Java项目建立完成图1-7新建Java项目此时在src上单击鼠标右键,建立新的包,包名称为 com.bysj.javagame.plane ,如图1-9所示,建立好包后在包名上单击鼠标右键,建立新的类,类名称为HelloDemo,建立时选择建立主方法,如图1-10所示。建立完成后的工作窗口如图1-11所示。图1-10 Java建立类图1-9 Java中创建包图1-11 Eclipse工具的工作环境2. 需求分析2.1开始界面开始界面提示,按Enter键盘进入游戏,Esc键退出游戏。2.2游戏功能用户选择进入游戏后的画面,它包括“游戏中的背景”、“玩家角色”、“敌军”、“敌军Boss”以及它们所发射的子弹。各个对象的功能如下:游戏中的背景:是实现各种对象在窗体上显示,在这个类里面要设置窗体的大小,屏幕的大小。玩家角色:通过用键盘来控制上下移动,发射子弹。敌军:开始游戏后自动从窗体的上方出现。敌军boss:在开始游戏后几秒后,从窗体的上方出现。子弹:在打中对方之后会减少对方的血条数。2.3角色们的行为不同的角色有不同的行为,玩家角色通过用户键盘操作,当按下(WASD)四个键时玩家可以移动,按下J键玩家可以发射子弹,子弹打中敌人后子弹和敌人一起消失,统计分数加5分,当敌人的子弹打中玩家后玩家伤血,玩家的初始化血为100,每次伤血5点,当血量为0时,表示玩家死亡。当玩家杀死20个敌军后,敌军的Boss出现,Boss的子弹威力点为10,打中玩家伤血10,而且Boss具有大量的血量,玩家必须打赢Boss才能进入下面的游戏。2.4玩家角色死亡玩家角色死亡游戏结束,游戏结束后打印玩家的游戏得分,打印一些基本信息。3. 项目开发根据类图创建出所有分析出来的类和接口,分别创建FirstGame(窗体的子类游戏引擎类)、Player(玩家类)、Ball(玩家子弹类)、Foeman(敌军类)、Bullet(敌军子弹类)、Boss(Boss类)、BossBall(Boss子弹类)和xuetiao(血条类),将类图中表示私有属性进行getter和setter封装,以免外面直接访问。3.1 创建FirstGame(窗体的子类游戏引擎类)这个类主要的功能是实现各种对象在窗体上显示,在这个类里面要设置窗体的大小,屏幕的大小,当打开界面的时候显示的背景图片,游戏中的背景图片以及游戏结束之后的图片,还有各类对象以何种图片在界面上显示出来。import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.MediaTracker;import java.awt.Toolkit;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.List;import java.util.Random;public class FristGame extends Frame /* * */private static final long serialVersionUID = 1L;/* 属性区 */ 定义Boss是否出现boolean Boss_visible = false;int y = 0;/ 获取一个默认工具包Toolkit tool = Toolkit.getDefaultToolkit();/ 定义Boss的时间计时器int boss_time = 0;/ 定义玩家的血int Wj_Hp = 100;/ 定义Boss的血int Boss_Hp = 200;/ 定义一个随机数以便让敌人随机出现Random rnd = new Random();/ 定义一个游戏状态 0.开始游戏界面 1.进入游戏 2.结束游戏int GameType = 0;/ 定义一个时间int time = 0;/ 定义关卡int toll_gate = 0;/ 获取屏幕的大小int x1 = tool.getScreenSize().width;int y1 = tool.getScreenSize().height;/ 定义窗体的大小int form_width = 500;int form_height = 700;/ 定义开始游戏界面图片Image strat_img = tool.getImage(FristGame.class.getResource(Images/back_img1.png);/ 定义结束游戏界面Image End_img = tool.getImage(FristGame.class.getResource(Images/begin.png);/ 定义背景图片Image bg_img = tool.getImage(FristGame.class.getResource(Images/bj.png);/ 定义玩家图片Image wj_img = tool.getImage(FristGame.class.getResource(Images/Myjiti.png);/ 定义玩家子弹Image wj_zd = tool.getImage(FristGame.class.getResource(Images/zd_2.png);/ 定义通关Image Tg_zd = tool.getImage(FristGame.class.getResource(Images/tongguanzi.png);/ 定义一个敌人的图片Image Fm_img = tool.getImage(FristGame.class.getResource(Images/jiti.png);/ 定义敌人子弹图片Image Fmb_img = tool.getImage(FristGame.class.getResource(Images/zd_1.png);/ 定义Boss图片Image Bs_img = tool.getImage(FristGame.class.getResource(Images/Boss1.png);/ 定义Boss子弹图片Image Bszidan_img = tool.getImage(FristGame.class.getResource(Images/zd_1.png);/ 获取爆炸图片Image bz_img = new Image15;/ 定义媒体跟踪器MediaTracker mt = new MediaTracker(this);/ 定义一个空的图片Image bG_img = null;/* 实例化区 */ 游戏对象类/ 实例化玩家对象Player wj = new Player(form_width / 2, form_height - 50, true, this);/ 实例化Boss对象Boss Bs = new Boss(10, 50, true, this);/ 实例化背景对象BackDrop Bd = new BackDrop(500, 370, this);/ 实例化血条XueTiao xt = new XueTiao(Wj_Hp = 430 ? Wj_Hp : 430, 15, this);/ 定义玩家子弹集合List pb_List = new ArrayList();/ 定义敌人集合List fm_List = new ArrayList();/ 定义敌人子弹集合List fmb_List = new ArrayList();/ 定义Boss子弹的集合List BossBall_list = new ArrayList();/* 方法区 */ 创建敌人的方法public void getFM() / 设置出现敌人的间隔if (time % 20 = 0) / 实例化敌人对象FoeMan Fm = new FoeMan(rnd.nextInt(7) * 80 - 40, -50, true, this);/ 創建敵人集合值fm_List.add(Fm);public FristGame() / 设置窗体的名称setTitle(Java飞机大战);/ 设置窗体的大小setSize(form_width, form_height);/ 设置窗体的位置(屏幕居中)setLocation(x1 / 2 - getWidth() / 2, y1 / 2 - getHeight() / 2);/ 设置窗体是否可见setVisible(true);/ 设置是否可以改变窗体的大小setResizable(false);/ 添加窗体监听addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););/ 实例化对象MoveThead mt = new MoveThead();/ 线程开始mt.start();/ 添加键盘监听addKeyListener(new KeyAdapter() public void keyReleased(KeyEvent e) if (GameType != 0) / 键盘释放事件wj.Release(e); else if (e.getKeyCode() = KeyEvent.VK_ENTER) GameType = 1;public void keyPressed(KeyEvent e) if (GameType != 0) / 键盘按下事件wj.Press(e););public static void main(String args) new FristGame();/ 创建一个私有的线程方法(相当于一个时间类)private class MoveThead extends Thread / 重写线程run(运行)方法public void run() / 创建一个死循环while (true) try / 设置线程睡眠时间Thread.sleep(20);/ 调用敌人移动方法 catch (InterruptedException e) e.printStackTrace();/ 调用玩家移动方法wj.Move();/ 创建一个计时器time+;/ 调用创建敌人的方法getFM();/ 重新启动画笔repaint();/ 创建一个画笔public void paint(Graphics g) if (GameType = 0) / 绘画一个外边框与窗体一样大小g.setColor(Color.black);g.drawRect(0, 0, form_width, form_height);g.fillRect(0, 0, form_width, form_height);g.drawImage(bg_img, 0, 0, this); else if (GameType = 1) /g.drawImage(strat_img, 0, 0, form_width, form_height, this);/ 画背景Bd.DrawMe(g);/ 画玩家wj.DrawMe(g);/ 画血条xt.drawMe(g);/ 画BossBs.DrawMe(g);/ 画玩家子弹for (int i = 0; i pb_List.size(); i+) PlayBall pb = pb_List.get(i);pb.DrawMe(g);pb.dazhongdiren(fm_List);pb.DzdirenZd(fmb_List);/当boss出现后才判断子弹是否打中bossif (Boss_visible=true) pb.Dzboss(Bs);/ 获取敌人集合值并画出敌人for (int i = 0; i fm_List.size(); i+) / 实例化对象FoeMan Fm = fm_List.get(i);/ 开始画敌人Fm.DrawMe(g);/ 画出敌人的子弹for (int i = 0; i fmb_List.size(); i+) FMball fmb = fmb_List.get(i);fmb.DrawMe(g);/ 调用判断是否打中敌人的方法/ 画出Boss的子弹for (int i = 0; i PlayFj_y) player_y -= Play_move;/ player_y最小值为0 / 下else if (KeyBoard1 = true & KeyBoard0 = false& KeyBoard2 = false & KeyBoard3 = false) if (player_y PlayFj_x) Player_x -= Play_move;/ player_x最小值为0/ 右else if (KeyBoard3 = true & KeyBoard1 = false& KeyBoard2 = false & KeyBoard0 = false) if (Player_x PlayFj_y & Player_x PlayFj_x& player_y PlayFj_y1 & Player_x PlayFj_y & Player_x PlayFj_x& player_y PlayFj_y1 & Player_x (PlayFj_y - 10) & Player_x (PlayFj_x - 10)& player_y PlayFj_y1 & Player_x PlayFj_y & Player_x PlayFj_x& player_y PlayFj_y1 & Player_x PlayFj_x1) player_y += Play_move;Player_x += Play_move;/ 判断是飞机是否飞出了范围if (Player_x = PlayFj_x1) Player_x = PlayFj_x1 - 5; else if (player_y = PlayFj_y1) player_y = PlayFj_y1 - 5;/ 画自己public void DrawMe(Graphics g) if (Play_zhuangtai = false) return;g.drawImage(gs.wj_img, Player_x, player_y, Player_width, Player_hight,null);/ 发射子弹public void BeamBall() PlayBall pb = new PlayBall(Player_x + 17, player_y - 5, true, gs);gs.pb_List.add(pb);/ 封装玩家的矩形框public Rectangle getrRectangle() return new Rectangle(Player_x, player_y, Player_width, Player_hight);/ 获取玩家的状态public boolean isPlay_zhuangtai() return Play_zhuangtai;/ 设置玩家的状态public void setPlay_zhuangtai(boolean playZhuangtai) Play_zhuangtai = playZhuangtai;3.3创建Ball(玩家子弹类)/玩家子弹类public class Ball /* 属性区 */int Ball_x, Ball_y;int Ball_width, Ball_hight;FristGame gs;/* 方法区 */ 构造方法public Ball(int ballX, int ballY, FristGame gs) super();Ball_x = ballX;Ball_y = ballY;this.gs = gs;/ 移动public void Move() / 画自己public void DrawMe() 3.4创建Foeman(敌军类)首先我们定义敌军的坐标、大小、移动时的速度,因为敌军是随机出现的,所以只用定义敌军移动的方向及移动的速度。当敌军被玩家的子弹打中时就消失。import java.awt.Graphics;import java.awt.Rectangle;public class FoeMan /* 属性区 */int Fm_x, Fm_y;int Fm_width = 40, Fm_hight = 59;/ 定义敌人的状态boolean Fm_zhuangtai;/定义敌人的移动速度int Fm_move=5;FristGame gs;/* 方法区 */ 构造方法public FoeMan(int fmX, int fmY, boolean fmZhuangtai, FristGame gs) Fm_x = fmX;Fm_y = fmY;Fm_zhuangtai = fmZhuangtai;this.gs = gs;public void Move() Fm_y += Fm_move;/ 画自己public void DrawMe(Graphics g) if (gs.Boss_visible=true) return;/敌机死亡g.drawImage(gs.Fm_img, Fm_x, Fm_y, Fm_width, Fm_hight, null);/ 调用移动方法Move();/ 调用发射子弹方法if (gs.time % 40 = 0) BeamBall();WjZhuangjiDj(gs.wj);/ 判断玩家是否撞击了敌机public void WjZhuangjiDj(Player pb) if (this.Fm_zhuangtai = true & pb.Play_zhuangtai = true& this.getRectangle().intersects(pb.getrRectangle() gs.Wj_Hp-;if (gs.Wj_Hp=0) gs.GameType=2;/ 发射子弹public void BeamBall() FMball Bball = new FMball(Fm_x+15, Fm_y+50,true, gs);gs.fmb_List.add(Bball);/ 封装,得到敌人的矩形框public Rectangle getRectangle() return new Rectangle(Fm_x, Fm_y, Fm_width, Fm_hight);/ 返回敌人的状态public boolean isFm_zhuangtai() return Fm_zhuangtai;/ 设置敌人的状态public void setFm_zhuangtai(boolean fmZhuangtai) Fm_zhuangtai = fmZhuangtai;3.5 创建FMboll(敌军子弹类)import java.awt.Graphics;import java.awt.Rectangle;import java.util.List;/敌人子弹类public class F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 港口绿色化发展策略-洞察及研究
- 融合注意力机制的图像背景分离-洞察及研究
- 大数据备份效率提升-洞察及研究
- 软装材质选择与居住体验-洞察及研究
- 不同土壤类型孔隙结构的比较研究-洞察及研究
- 压力平衡型冲洗器-洞察与解读
- 2026届浙江省嘉兴数学九上期末联考试题含解析
- 枣庄市第三十二中学2026届七年级数学第一学期期末学业质量监测试题含解析
- 2025人民医院呼吸科住院医师规范化培训出科考核模拟题库
- 2025年绍兴市越城区孙端街道中心小学招聘校医1人模拟试卷及1套参考答案详解
- 2025至2030全球及中国InfiniBand行业发展趋势分析与未来投资战略咨询研究报告
- 2025年下半年拜城县招聘警务辅助人员(260人)考试模拟试题及答案解析
- 宅基地争议申请书
- 2025年杭州上城区总工会公开招聘工会社会工作者9人笔试参考题库附答案解析
- 百师联盟2026届高三上学期9月调研考试数学试卷(含答案)
- 河南省百师联盟2025-2026学年高二上学期9月联考化学试题(A)含答案
- 重庆通信安全员c证题库及答案解析
- 颈椎骨折护理围手术期管理方案
- 【MOOC期末】《中国马克思主义与当代》(北京科技大学)期末慕课答案
- TSAAD型螺杆式空气压缩机
- 无菌技术操作技能评分标准
评论
0/150
提交评论