基于Java面向对象程序设计课程报告.docx

上传人:h**** 文档编号:26551913 上传时间:2022-07-18 格式:DOCX 页数:10 大小:15.92KB
返回 下载 相关 举报
基于Java面向对象程序设计课程报告.docx_第1页
第1页 / 共10页
基于Java面向对象程序设计课程报告.docx_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《基于Java面向对象程序设计课程报告.docx》由会员分享,可在线阅读,更多相关《基于Java面向对象程序设计课程报告.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、基于Java面向对象程序设计课程报告 基于Java语言的简易坦克大战游戏设计课程报告 摘要:本课程设计使用Java语言开发了一个简单坦克大战小游戏,主要采用面向对象程序设计思想来完成程序的需求分析,概念及逻辑设计,系统的详细实现等过程。游戏主要实现了游戏场景的构造,坦克及子弹类的初始化,敌我坦克对战,游戏存盘及读档等功能。 关键词:Java;面向对象;敌我坦克对战; 引言 坦克大战是一个经典的单机对战游戏,其在青少年中非常流行,目前游戏开发商对其不断改进,已从简单的单机手游扩充为大型的网络对战游戏,但其基于面向对象程序设计思想仍未变。本设计是为检验面向对象程序设计课程的知识运用而进行的实践,其

2、主要目的是采用面向对象的思想,独立完成程序的各个过程,并在实践中应用学到的关于Java类与对象,接口,包,异常处理,多线程,事件处理及各类流的处理等知识。 1系统分析 1.1系统可行性分析 在技术上,本系统的坦克大战是基于Java语言设计,并在Eclipse软件上具体实现的。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,具有简洁,安全,面向对象,动态,体系结构中立,可移植,高性能,多线程,解释执行,分布式等特性。Java现在主要用在WEB开发,手机游戏及一些平台游戏的开发,因为其具有良好的跨平台性,在各类电子产品上应用非常广泛。 本系统使用Swing,GUI,Socket,

3、面向对象设计等技术实现,这些技术已非常成熟,广泛应用于各类程序开发,故现在使用这些技术是可行的。 在实用性上,坦克大战为一款经典射击游戏,其前身为1985年日本游戏公司在任天堂FC(FamilyComputer)平台上开发的红白单机游戏,游戏以坦克战斗及保卫基地为主题,凭借流畅的游戏体验,不错的游戏视觉效果风靡全世界。直到今天,仍有游戏商家以其为模型开发出3D网络对战版坦克大战,可见其具有广大的市场效益。本系统运用Java跨平台编程语言,在PC上重新实现这一经 典游戏,探究其设计思路与实现方法,并且设计了关卡模式,新增了游戏存盘,读档功能,使游戏玩法更加丰富。因此,本系统具有一定的实用性。 1

4、.2系统需求分析 凭着由于系统为简易的单机对战射击游戏故游戏必须具有以下功能: 1)有图形游戏界面,使用户看得到游戏给出的反馈。 2)有人机交互功能,用户可以操作指定的游戏元素。 3)坦克可以上下左右四个方向任意行走,且不可超出游戏设定边界。 4)敌方坦克必须明显区别于我方坦克,且可以随机移动,随机打出炮弹。 5)我方坦克可在控制下四个方向任意移动,且可按不同速率发射炮弹。 6)敌方坦克之间不能重叠,我方坦克与敌方坦克也不能重叠。 7)炮弹与坦克的碰撞检测,且炮弹超出边界的检测。 8)加入声音,图片等资源,使游戏具有良好体验性。 9)菜单栏选项,可以选择新游戏,退出游戏,存档游戏,读取游戏,并

5、可以查看帮助信息。 2系统概要设计 2.1 系统结构设计 坦克大战游戏主要实现玩家参加游戏的整个过程,用户打开游戏,将出现游戏初始界面,用户可点击菜单栏选择游戏模式和帮助文档。若玩家选择游戏菜单,将出现四个选项:新游戏(N)、退出游戏(E)、存盘退出(C)和继续游戏(S),选择新游戏则玩家开始游戏,选择存盘退出将保存游戏记录并退出,选择继续游戏则读取保存记录玩家继续上次游戏。帮助菜单将帮助玩家了解游戏的相关操作。整个游戏流程如图1所示: 图1 系统流程图 2.2 TankAction类的设计 TankAction类是整个系统的核心部分,承担整个系统的所有可实现功能的调度工作,它的设计决定着游戏

6、的好坏。TankAction类的设计流程如图2所示: 图2 TankAction类设计流程图 TankAction类是主类,通过调用其他类中封装的方法使系统运行起来,下面是TankAction类与其它类的关系。如图3所示: 图3 TankAction类与其它类关联图 2.3 Tank类的设计 由面向对象设计思想知,Tank类为系统主要对象。在Tank类中封装了一些成员变量,包括坦克相对于游戏界面左上角的横坐标(x)、纵坐标(y),坦克正面所对于方向(fangxiang),坦克颜色(color),坦克速度(sudu)和坦克生命值(shengming)等;Tank类中没有main函数,其中只封装了

7、一些变量属性和静态方法,如getcolor()、getsudu()、setFangxiang(int fangxiang)等等,其中getcolor()和getFangxiang()用于调用drawTank类中画出的不同颜色不同方向的坦克,还有其它方法的作用这里不再一一列举。 其中敌我双方坦克类为继承Tank类的子类,DiTank(敌方坦克)类不但继承了Tank类的基本变量和方法,得以实现不同方向的黄色坦克,还拥有自己的变量和成员方法,如向量Vector dzd和dtkxl(Vector dxl)方法。设计代码如下: 我方坦克类(MyTank)继承Tank类后,拥有自己的一些成员方法。如发射子

8、弹方法fszd(),坦克可以向四个方向发射子弹,使用switch(fangxiang)分出四个情况,分别调用Zidan类。程序代码如下: 2.4 Zidan类的设计 子弹类(Zidan)为一个单独的类,它可以被敌方坦克和我方坦克类调用,每一 个子弹的发出即为实现一个单独的线程,通过调用Runnable接口实现。Zidan类拥有横坐标(x)、纵坐标(y)、方向(fangxiang)、速度(sudu)和负责控制生存状态的生命值(shengming)等成员变量,还有负责传递参数的构造方法Zidan(int x,int y,int fangxiang),和执行移动的run()方法。其中代码如下: 2.

9、5 游戏面板的设计 游戏面板包括菜单栏和游戏界面两部分。菜单栏的设计是通过swing包中的JMenuBar()类来实现,将JMenu对象添加到菜单栏以构造菜单,这里的主菜单有两个,分别为“游戏”和“帮助”,然后通过新建JMenuItem类来构造主菜单下面的子菜单,包括“新游戏”、“退出”等等。设置好菜单后,我们还需要添加对应的动作监听器来响应对于的鼠标事件,addActionListener()和setActionCommand()方法可以来实现功能。 游戏界面这里是通过GuankaPanel和MyPanel两个类来实现的。当启动游戏时,先显示的是欢迎界面,然后点击“新游戏”和“继续游戏”时才

10、出现真正的游戏界面。GuankaPanel类继承自JPanel容器类,为一个独立的线程。包含有times 成员变量,用于实现欢迎界面的闪烁功能。程序代码如下: MyPanel类用于绘制开始游戏后的界面,将调用DiTank类和MyTank类将敌我双方坦克摆放在正确位置,并使用tjsj()方法绘制游戏边界右方和下方的提示信息。此外,MyPanel还设置了游戏的声音和爆炸效果图片等资源的读入,和实现游戏结束时提示信息的方法,如“对不起,你输了!”提示信息的实现。3系统具体实现 3.1菜单功能的实现 由2.5知,在设计了菜单栏以后,重要的是菜单功能的实现。其中游戏的主窗体界面如图4所示: 图4 游戏主

11、窗体界面 这里系统使用ActionEvent类来处理菜单事件,getActionCommand()同菜单栏中setActionCommand()传来的字符串进行匹配,如果匹配成功则执行对于的菜单功能。以新游戏功能为例,如果匹配成功,则游戏欢迎界面被移除,然后调用MyPanel类,实现一个游戏线程。关键代码如下: 继续游戏功能同上面类似,但需要调用Jilu类中dupan()方法来获取存放在cpjl.txt文件下的所有敌方坦克的位置、方向记录,我方坦克的位置和方向记录和所有已经发射的子弹的位置信息。Jilu类用于实现游戏的存盘功能和读取功能,信息的读入使用了读取字符流的FileReader类和默认

12、缓冲区的缓冲字符输入流BufferedReader类,实现了数据的高效读入。读取记录的关键代码如下: 游戏的存盘退出同读取类似,使用cupan()方法将信息保存在文件中。游戏中继续游戏功能的效果图如图5所示: 图5 继续游戏功能效果图 3.2坦克交战功能的实现 坦克的交战功能为游戏的主要功能。为了实现坦克的自由交战,坦克必须可以在边界范围内随意移动且可向任意方向发射炮弹,要实现双方坦克被击中时瞬间死亡。同时为提高游戏真实性,坦克之间不能相关重叠,即不同坦克碰撞时可以转向。 首先介绍敌方坦克,每一个敌方坦克初始化时都为一个独立的线程,当生命值shengming为false时,线程死亡。敌方坦克通

13、过在DiTank类中的run()方法来实现自由移动,速度设置为一个int类型的常量,转向是通过fangxiang成员变量来实现的,令this.fangxiang=(int)(Math.random()*4),用switch语句来控制坦克的上下左右四个方向,向上移动时,坦克的横坐标x数值不变,而纵坐标y-=sudu, 则坦克就以恒定的速度向上走了。其它的三个方向也类似,关键代码为: 敌方坦克的碰撞检测问题是在DiTank类下的huxiangpengzhuang()方法实现的。每一个坦克分上下左右四个方向进行讨论,而每一个方向的坦克又可能在四个方向碰到另外的一辆坦克,以正面向上行驶的坦克为例,当坦

14、克上方的两个顶角的坐标在前方的另外一个坦克的四个角的坐标范围内(这里的坐标均相对与面板左上角来计算),则认为坦克碰撞了。这时不执行run()中向上的坐标y的增加,即可避免坦克的重叠。同理,其余方向的碰撞均可这样判断,关键代码如下: 碰撞规避的效果图如图6所示: 图6 游戏碰撞规避效果图 敌方坦克发射炮弹的功能是DiTank类下通过调用Zidan类实现的。每个子 弹类都为一个独立的线程,以恒定的速度向四个方向前进,子弹有自己的生命值,当遇到对方坦克或边界时,子弹生命值为假,即死亡,线程结束。具体实现时敌方坦克每隔一秒发射一发炮弹,代码如下: 敌方坦克击中目标功能的实现。首先建立一个击中对方jzdf()的方法,敌方坦克类和我方坦克类均可调用。方法有Zidan和Tank两个参数,实现了子弹类和坦克类的传入,然后分上下和左右两种情况,当子弹的坐标在坦克的坐标范围内,则判断为击中目标,将子弹对象和坦克对象的生命值均设为假,即将坦克和子弹一块消失,然后出现爆炸效果。敌方坦克击中目标的功能则是在击中我方方法jzwf()中调用jzdf()方法来实现,关键代码如下: 敌方坦克胜利后界面上将显示提示信息,效果图如图7所示。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 策划方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁