毕业设计(论文)-基于Java的坦克大战软件程序设计.doc
《毕业设计(论文)-基于Java的坦克大战软件程序设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-基于Java的坦克大战软件程序设计.doc(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、华中科技大学文华学院基于Java的坦克大战游戏软件程序设计题目: 基于Java的坦克大战游戏的设计与实现学 生 姓 名: 学号:学 部 (系):_信息科学与技术学部_专 业 年 级: _11级电子信息工程_指 导 教 师: 职称或学位:_硕士_2015年5月2日摘 要 随着网络时代的到来及发展,游戏产业方兴未艾,出现了前所未有的繁荣。“贪吃蛇”、“俄罗斯方块”这些简单的游戏曾为一代接一代的游戏玩家所熟悉。并且随着网络通信技术的迅速发展,更加有趣、更为生动的游戏层出不穷。由于Java技术的不断发展,Java良好的跨平台特性在移动平台的开发中显示出了巨大的威力。Java语言面向对象的优势也使得开发
2、游戏变得非常容易,同时eclipse平台的优越性也给了这类游戏程序的设计带来了很多的优点和方便。本论文主要介绍了坦克大战游戏的设计思路和实现过程。这种设计主要是利用函数对背景的所有物体进行绘图,然后利用线程以及事件监听机制对物体进行控制,例如坦克,从而实现各种功能,最后就可以构成一个活生生的坦克大战游戏了。Java功能在移动设备上的实现,Java应用程序产生的服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。本论文着眼于java语言的优点,开发一款可可供娱乐的游戏程序坦克大战。关键字:eclipse平台,游戏,Java,坦克大战目 录摘 要- I -Abstrac
3、t - I -第一章 程序结构、思想和相关技术- 3 -1.1 本程序需解决的有关技术问题- 3 -1.2 程序流程- 4 -1.3 绘图与事件监听以及线程技术和IO流编程- 6 -1.3.1 Graphics类- 6 -1.3.2 KeyListener监听机制- 6 -1.3.3 runnable实现线程- 7 -1.3.4 io流编程实现菜单功能- 7 -第二章 游戏的设计思路- 8 -2.1 画出坦克- 8 -2.2 坦克的控制和敌方的智能运行- 8 -2.3 子弹的运行和控制- 9 -2.4玩家成绩的记录- 10 -2.5游戏面板与菜单的设计- 11 -第三章 程序分析和实现过程-
4、12 -3.1 游戏进入前的面板设计分析- 12 -3.2 游戏逻辑函数及其涉及到的若干类- 13 -3.3 坦克的共同行为- 15 -3.4 玩家坦克的功能属性- 16 -3.5 敌人坦克的功能属性- 16 -3.6 子弹击中坦克的爆炸- 18 -3.7 记分系统- 19 -3.8 本章小结:- 21 -第四章 总 结- 21 -4.1 本程序的总结和展望- 21 -4.2 经验和感想- 22 -参考文献- 23 -第一章 程序结构、思想和相关技术1.1 本程序需解决的有关技术问题1. 坦克大战是一个可大可小的游戏,想法灵活可以编写出很多功能,所以需要对程序的要求量应该是巨大的,但是其代码利
5、用率很高,因此实际编写时也不需要太多的绞尽脑汁,可以利用各模块程序的相近性灵活运用。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。2. 游戏中为了美观,适用性强以及操作的简便性,我们主要利用draw函数画出矩形,圆及线构成一辆Tank,同时画出子弹,敌方坦克可以直接引用之前画出的坦克,这样画图的问题就基本解决了。 3. 己方坦克的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有
6、一定其一定的智能性;同时,出现在屏幕上的敌方可能会有较多的数量,这需要为每个敌方开辟一个线程以便能让其独立运行。Java的多线程能力为实现这样的游戏提供了可能。敌人坦克的运行算法也需要进行适当的设置,以免游戏过于简单,单调。4. 对于双方坦克发出的子弹的控制也需要对其跟踪控制,子弹也需要处在独立的线程中。敌方子弹仅需要扫描用户坦克,而用户坦克需要在每一步扫描所有的敌方坦克。这需要对所有的对象有较好的控制。另外,子弹在运行过程中也需要实时扫描是否碰撞到了相关障碍物或屏幕边界。同时为了游戏的公平性,己方坦克发出的子弹数量必须控制,不能一下发出太多颗。5. 对于敌我双方的坦克在运动的过程中也需要考虑
7、会不会发生碰撞也就是重叠状况体,也要考虑坦克碰到边缘时不能继续前进,以免跑出有效范围,每前进一步都需要将所有的周围环境进行严格的控制。6. 游戏的结束、开始、动态画面等信息是构成一个完美程序必不可少的环节。良好的用户界面更是吸引用户的硬实力,为此必须要加入坦克爆炸的效果图以及游戏进行时的音效。7. 用户运行游戏时需要有分数记录的可能。如何采用合理的记分标准,需要进行适当的设计。记录分数的存储方式也需要有较好的解决方案,可以利用IO流编程来实现将数据存入电脑硬盘中的某个文件中。1.2 程序流程本程序采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。运行程序后允许用户选择执行选项菜单
8、,在开始游戏后将先对背景的所有物体进行绘图。在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。用户控制的坦克运行在主线程中,敌方坦克将在游戏开始时逐渐新增线程,每增加一个敌方坦克对象就新增加一条线程,一旦线程数满到最大值(本程序暂设置为20),就不允许敌人再继续出现。用户坦克自诞生之时起将拥有5发子弹的权利,子弹虽然开在单独的线程中,但运行结束后(比如撞到相关物体或敌方坦克时)并不结束子弹对象,只是将其线程终止。用户再次发射子弹时只是将终止的线程再次激活。在屏幕重绘的主程序中,将在每次的循环中判断若干事件。如:用户坦克的生命是否为0,敌方坦克数是
9、否已经为零,屏幕上的坦克数量是否少于仍剩下的坦克数量等。以便程序进入相关的分支执行相关的反应代码,结束游戏或统计分数等。主程序流程如图所示:Logo 画面游戏选项主程序屏幕绘图本关记分统计显示结束显示历史记分表敌方需要出坦克时,生成坦克初始化参数死亡时符合结束条件时1.3 绘图与事件监听以及线程技术和IO流编程1.3.1 Graphics类Graphics类是所有图形上下文的抽象基类,允许应用程序可 以在组件(已经在各种设备上实现),以及闭屏图像上,进行绘制。用fill3DRect画出矩形,fillOval画出圆,drawLine画出线,三个矩形,一个圆及一条线就可以构成一个坦克,如图:1.3
10、.2 KeyListener监听机制要想使坦克动起来,子弹运动起来,以及菜单模式下的各种功能能够控制坦克大战游戏的运行,比如继续游戏(continueGame),保存游戏并退出(saveExit),退出游戏(exit)以及开始新游戏(newgame)必须注册监听机制,例如程序如下:jm1.setMnemonic(G);jmil =new JMenuItem(开始新游戏(N);jmi2 =new JMenuItem(退出游戏(E);jmi3 =new JMenuItem(存盘退出游戏(C);jmi4 =new JMenuItem(继续上局游戏(S);/注册监听jmi4.addActionList
11、ener(this);jmi4.setActionCommand(continueGame);/注册监听jmi3.addActionListener(this);jmi3.setActionCommand(saveExit);jmi2.addActionListener(this);jmi2.setActionCommand(exit);jmi2.setMnemonic(E);/对jmil相应jmil.addActionListener(this);jmil.setActionCommand(newgame);1.3.3 runnable实现线程Java界曾流行这样一句话:不懂线程就不要说自己
12、会Java,可见线程对Java的重要性是多么的大。那么线程的作用有哪些呢,最为典型的就是你在网络上放一个服务端,一个客户端访问时,就会新建一个线程处理这个客户端的事务,这样的话只要不断新建线程就可以处理多个用户的请求了。当然我们的这个坦克大战游戏的实现肯定离不开线程,例如己方坦克是必须要会移动的,那么敌人坦克也要移动,子弹呢?当然也要会移动,等等。那么这么多的功能要实现就要用到线程了。1.3.4 io流编程实现菜单功能IO包括输入和输出流,输入流指的是将数据以字符或字节形式从外部媒介比如文件、数据库等读取到内存中所以也分为字符输入流和字节输入流。输出流指的是将内存中的数据写入外部媒介,也分为了
13、字符输出流和字节输出流。我们的坦克大战游戏 就是利用IO流来记录玩家的分数,成绩的。程序如下:/把玩家击毁敌人坦克数量保存到文件中public static void keepRecording()try /创建fw=new FileWriter(d:myRecording.txt);bw=new BufferedWriter(fw);bw.write(allEnNum+rn); catch (Exception e) e.printStackTrace();/ TODO: handle exceptionfinally/关闭流try /后开先关闭bw.close();fw.close();
14、catch (Exception e) e.printStackTrace();/ TODO: handle exception 第二章 游戏的设计思路2.1 画出坦克坦克大战游戏中坦克当然得分两类,自己的坦克和敌人的坦克,在游戏中我们就将两类坦克分成两种颜色,以示区分。当然坦克画在面板中肯定不能自己变化方向,所以就需要画出四个方向的坦克,程序如下:/画出坦克的函数(扩展)public void drawTank(int x,int y,Graphics g,int direct,int type)/判断是什么类型的坦克switch(type)case 0:g.setColor(Color.c
15、yan);break;case 1:g.setColor(Color.yellow);break;/判断方向switch(direct)/向上case 0:/画出我的坦克(到时再封装成一个函数)/1.画出左边的矩形g.fill3DRect(x, y, 5, 30,false);/2.画出右边矩形g.fill3DRect(x+15,y , 5, 30,false);/3.画出中间矩形g.fill3DRect(x+5,y+5 , 10, 20,false);/4.画出圆形g.fillOval(x+5, y+10, 10, 10);/5.画出线g.drawLine(x+10, y+15, x+10,
16、 y);break;case 1:/炮筒向右/画出上面矩形g.fill3DRect(x, y, 30, 5,false);/画出下面的矩形g.fill3DRect(x, y+15, 30, 5, false);/画出中间的矩形g.fill3DRect(x+5, y+5, 20, 10, false);/画出圆形g.fillOval(x+10, y+5, 10, 10);/画出线g.drawLine(x+15, y+10, x+30, y+10);break;case 2:/向下/画出我的坦克(到时再封装成一个函数)/1.画出左边的矩形g.fill3DRect(x, y, 5, 30,false
17、);/2.画出右边矩形g.fill3DRect(x+15,y , 5, 30,false);/3.画出中间矩形g.fill3DRect(x+5,y+5 , 10, 20,false);/4.画出圆形g.fillOval(x+5, y+10, 10, 10);/5.画出线g.drawLine(x+10, y+15, x+10, y+30);break;case 3:/向左/画出上面矩形g.fill3DRect(x, y, 30, 5,false);/画出下面的矩形g.fill3DRect(x, y+15, 30, 5, false);/画出中间的矩形g.fill3DRect(x+5, y+5,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 论文 基于 Java 坦克 大战 软件 程序设计
限制150内