ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:479.48KB ,
资源ID:15977921      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-15977921.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于Java的坦克大战游戏的设计与实现毕业设计论文.docx)为本站会员(b****7)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于Java的坦克大战游戏的设计与实现毕业设计论文.docx

1、基于Java的坦克大战游戏的设计与实现毕业设计论文基于Java的坦克大战游戏的设计与实现摘要:随着人们对生活质量的要求一天比一天高,为了让人们更好地开掘自身的智慧,游戏就此进入了大众的视野,在人们的生活中有着重要的位置,已然变得必不可少。游戏产业推动高新技术不断升级,极大地促进了经济的增长,推动了“第四产业”的经济腾飞。坦克大战游戏是童年时期经常玩的经典游戏,我们对它都十分了解。游戏通过分析JAVA游戏开发和代码设计,用Eclipse软件开发了坦克大战游戏,运用接口技术,使一个类能够实现多个接口,使用套接字Socket来完成client端和server端的连接。玩家通过连接访问进入游戏,通过操

2、纵坦克来守卫基地,玩家还可以获得超级武器来提升坦克的属性,摧毁全部敌方坦克来取得胜利,操作非常简单,还具有非常高的普遍率,适合所有人群玩。该游戏既满足了人们的个性化需求,也让玩家在游戏过程中丢掉烦恼,尽情地释放压力。关键词:Java 坦克大战游戏 SocketThe Design and Implementation of The Java Based Tank War GameAbstract:As people demand higher quality of life every day, in order to make people better dig their own wisd

3、om, the game into the public vision, in peoples lives have a vital position, has become an indispensable part. The game industry to promote the upgrading of high-tech, which greatly promoted the economic growth, and promote the fourth industry economic take-off. Tank war game is often played in chil

4、dhood, but also the classic game. Game through the analysis of JAVA game development and code design, with Eclipse software developed a tank war game, the use of interface technology, so that a class can achieve multiple interfaces, the use of socket Socket to complete client and server side of the

5、connection. Players access the game through the connection, through the manipulation of tanks to guard the base, the eradication of all enemy tanks to win, players can also get super weapons to enhance the properties of the tank, the operation is very simple, suitable for people of all ages to play.

6、 The game not only meets the individual needs of people, but also allows players to lose trouble in the course of the game, enjoy the pressure to release.Key words: Java; Tank war game; Socket1.引言随着社会和时代的进步,来自各个方面的压力让人没精打采,为了分解人们的压力,休养那变得疲顿的头脑和劳累的身心,特设计了坦克大战小游戏,游戏操作非常容易,只要将手指放在键盘上敲击相关的游戏键就可以玩,在玩游戏的过

7、程中能够体验现实生活中没有的快乐,既有利于身心健康,又不会影响工作和学习。本游戏采用的是基于J2SE标准平台的java编程技术,在Windows 7操作系统中使用Eclipse软件进行代码编译,通过方法Graphics()来进行游戏地图界面的绘制,使用了接口技术使一个类能够实现多个接口,使用套接字Socket来完成client端和server端的连接。Java是一项面向对象编程语言,既包含了C语言的全部优点,又具有面向对象,跨平台性,安全性等特点,是现在程序设计中较为常用的编程语言。Java具备了“一次编译,处处运行”的特点,很好的体现了其跨平台性和面向对象的特点,允许程序员用感性的思路来进行

8、繁杂的编程。Eclipse是一个基于java的开放源代码的可扩展开发平台,是知名的跨平台的自由集成开发环境(IDE)Eclipse是一个基于,还捎带了一个标准规范的插件集,包含了Java开发工具(JDK),Eclipse因为安装不同的插件,所以它支持不同的计算机语言,主要用来Java语言开发。Graphics类是软件包java.awt(其全部类都用来用户界面的创建和图形图像的绘制)下的类,它同意一个应用程序绘制到组件,以及在屏幕图像上进行绘制。Graphics 对象封装了 Java 支持的基本呈现操作所需的状态信息。Graphics()方法构造了一个新的 Graphics 对象, 由于 Gra

9、phics类是抽象类,因此Graphics()方法不可以被直接调用,此构造方法是图形上下文的默认构造方法,通过在组件上调用 getGraphics() 来创建图形上下文,或者从其他图形上下文获取。 2.系统分析2.1 需求和技术分析如今的游戏已经成为世界上最大的娱乐休闲项目之一,游戏市场规模持续增长,潜力巨大,我国政府一向以来都特别鼓励游戏产业的发展,特别是我国当地的游戏产业,扶持力度连年加大,由此可见,我国对游戏产业的重视程度。该坦克大战游戏是对红白机经典90坦克大战的延续,对于80后,90后来说,都是童年里最宝贵的回忆,而80后,90后恰好占据着当今游戏人群的主体,对于他们来说,该坦克大战

10、游戏不仅可以减轻人们的社会压力,放松身心,也可以回味小时候玩红白机游戏的疯狂时光,又不会沉迷于游戏,老少咸宜,能够更好地体验游戏的乐趣。该程序代码有着贼高的运用率,因此,设计时必须要有相当缜密的逻辑条理思维,还要考虑一些无法操控的因素和所有可能出现的突发事件。(1)玩家能够通过敲击游戏键来操纵玩家坦克的动作,但对于敌方坦克来说,就要有第一定的自主性和智能型,因为是自动运行。同时,屏幕上的敌方坦克需要开创一个线程让其自主运行来应对数量过多而导致的混乱。要精密设置敌方坦克的操作运行算法,不要使游戏太过单一。(2)要对所有坦克打出的子弹进行实时监测并判断它打到了什么物体对象,因此需要开辟一个独立的线

11、程来处理子弹,还需要控制好所有的物体对象。在同一时候,在JVM虚拟机上保持运行这么多的线程,可能会造成程序的迟钝,甚至瘫痪。(3)由于游戏界面中物体对象繁多,为了避免重叠运行,玩家坦克在前进时需要时刻地扫描周围环境。 (4)游戏的动态画面是一个优秀程序不可缺少的组成成分,精美的用户界面是引起玩家兴趣的关键,相关的构图美化技术也需要有所考虑。(5)在游戏地图中会有许多各种不同的物体对象,这不是绘图方法能够解决的,而且过多的大型photo会束缚程序的大小,所以要准确掌握Graphcis()方法的使用。同时使用读取外部文件的方法来加载游戏关卡,因为内存有限,不适合用于存储地图关卡。(6)游戏要对玩家

12、的分数进行记录,这就需要对其功能和属性进行妥善的策划,还需要制作良好的解决方案来处理其存储方式。(7)为了确保游戏程序的运行顺畅,需要对结构进行严格把控,将算法完善得更精准,还可以运用混淆器对打包后的软件程序进行优化。2.2 功能分析该坦克大战选择使用以往的游戏规矩。服务器端创建并设置一个主机,客户端申请连接加入,若其IP输入判断无误,载入地图关卡并开始游戏,在游戏界面中,会实时显示敌方坦克数量和玩家坦克的生命数量及分数。敌方坦克自行移动和打出子弹,玩家通过敲击键盘来操控自己坦克的动作并打出子弹,子弹无法打中相同阵营的坦克,当两方阵营的子弹相交时会相互抵消,打中对方坦克时会产生爆炸效果,中途可

13、以暂停、发送信息,玩家坦克吃掉超级武器后会赋予其特殊的功能,在游戏地图界面中还同时游戏中还包含了通信功能。如果取得了胜利,会显示“你过关了!”,如果失败了,则系统给出“GAME OEVR!还想再玩一次吗?(y/n)”的提示,如果玩家双方都选择继续游戏,则游戏重新加载并开始,不然结束并退出游戏界面。3.总体设计3.1 总体功能游戏由服务器端和客户端两部分组成。在服务器端,ServerModel类主要用来创建主机,ServerView类主要负责服务器端图形界面的面板信息的设置,ServerControler类处理来自服务器视图框架的输入,包括创立通信与帮助信息等,enemy类主要负责敌方坦克的创建

14、,player类主要用来设置玩家的得分及其显示位置等信息,drawingPanel类主要负责服务器端界面窗口的创建和设置,powerUp类主要用来设置子弹属性,例如加快速度、提升火力等,feedbackHandler类主要用来解码从客户端发来的指令字符串,再将其转换成指令来判断游戏失败后玩家是否继续游戏的问题。在客户端,ClientModel类主要用来设置与服务器的连接,ClientView类主要负责客户端端图形界面的面板信息,ClientControler类主要负责处理来自客户端视图框架的输入和创立通信与帮助信息等,drawingPanel主要用来设置客户端窗口界面,instructionH

15、andler类主要用来解码从服务器端发来的指令字符串,再将其转换成指令来判断游戏失败后玩家是否继续游戏的问题,shield类主要负责设置坦克吃掉头盔图标获得保护时的状态,normalObject类主要用来创建和描绘其他物体对象。在服务器端和客户端中都存在的类中,Actor类主要用来创建接口,base类主要用来创建基地并设置属性,bullet类主要用来创建子弹并设置属性,Ticker类主要用来创建时间信息,bomb类主要用来创建子弹打出后产生的爆炸效果,river类主要用来创建河道并设置属性,grass类主要负责创建草坪并设置属性,Steelwall类主要用来创建铁墙并设置属性,wall类主要用

16、来创建和设置普通墙及其属性,level类负责创建关卡。如表1,表2所示。表1 游戏服务器端各类功能表ServerModel创建主机ServerView设置服务器端图形界面的面板信息ServerControler处理来自服务器视图框架的输入enemy创建敌方坦克player设置玩家的得分及其显示位置等信息drawingPanel创建和设置服务器端界面窗口powerUp加快子弹速度并提升火力feedbackHandler判断指令并执行Actor创建接口base创建并设置基地Ticker创建并设置时间信息bullet创建子弹并设置属性bomb设置爆炸效果river创建河道并设置属性grass创建草坪

17、并设置属性Steelwall创建铁墙并设置属性wall创建普通墙并设置属性level创建关卡表2 游戏客户端各类功能表ClientModel设置与服务器的连接ClientView设置客户端端图形界面的面板信息ClientControler负责处理来自客户端视图框架的输入drawingPanel设置客户端窗口界面instructionHandler判断指令并执行shield设置玩家坦克防护盾normalObject创建并描绘其他的物体对象level创建关卡base创建并设置基地Ticker创建并设置时间信息bullet创建子弹并设置属性bomb设置爆炸效果river创建河道并设置属性wall创建

18、普通墙并设置属性客户端玩家输入主机地址来完成与服务器玩家的连接,双方通过使用指令键来操控自己的坦克,敌方坦克和子弹则是自主随机运行,游戏中会对玩家的分数进行记录,还增加了特殊武器,另外,此游戏还进行了小小的创新,添加了通信功能,客户端与服务器端的连接访问通过使用套接字Socket来实现。其总体功能如图1所示。图1 总体功能图3.2 坦克大战总体流程图如图2所示。图2 总体流程图4.详细设计4.1 面板功能设计4.1.1 基地的设计base类定义了几个变量,通过构造器初始化了基地的变量参数,使用g.drawImage()方法设置一幅图片来代表基地,通过public void move()来处理基

19、地受到铁墙防护时的变化,使用if()判断语句判断铁墙的保护时间。游戏的核心重点自然就是基地了,一旦基地被毁,则玩家失败,游戏结束。游戏面板是游戏程序的关键,这里使用了方法paintComponent(Graphics g)来进行建立并设置其属性,具体实现代码如下:public void draw(Graphics g)g.drawImage(base, xPos - 12, yPos - 12, null );public void paintComponent(Graphics g) Graphics offScreenGraphics; if (offScreenImage = null)

20、 offScreenImage = createImage(640, 550); offScreenGraphics = offScreenImage.getGraphics(); myPaint(offScreenGraphics); g.drawImage(offScreenImage, 0, 0, this);4.1.2敌方坦克的设计enemy类设置了敌方坦克的共同属性,并根据不同外形的坦克设置了不同的属性,如椭圆形的坦克的移动速度会比较快,拥有多层颜色坦克的生命力与其拥有的颜色数量一样,利用随机函数Math.random()*4随机生成一个随机值,并转换成整形数值,将此值赋给变量dir

21、ection来作为敌方坦克生成时的方向,再将Math.random()*200生成的随机值转换成整形数值,赋予变量interval来作为生成时的时间间隔,并且设置了地方坦克的移动周期,在一个周期内将会朝着相同的方向继续移动,并设置了其发射子弹的遂进行。而在特殊属性中,分别设置了敌方坦克的的火力、速度、图标等属性,再用方法draw(Graphics g)向地图中加入敌方坦克。具体实现代码如下:interval = (int)(Math.random()*200);direction = (int)(Math.random()*4);if(type =args1 ) firePosibility

22、= args2; speed = args3; textures = new Imageargs4;public void draw(Graphics g) if(flashing & gameModel.gameFlow%10 4) g.drawImage(texturestextures.length-4+direction, xPos - size, yPos - size, null); else g.drawImage(texturesdirection, xPos - size, yPos - size, null);4.1.3河道、草坪的设计grass类继承了Actor接口,通过

23、grass类构造器定义了草坪的x,y坐标和矩形边界以及图标,通过public void draw(Graphics g) 方法绘制了草坪。游戏双方坦克及其子弹可以自由通过草坪。具体实现代码如下:public grass(int a, int b) xPos = a; yPos = b; border = new Rectangle(0,0,0,0); public void draw(Graphics g) g.setColor(new Color(0, 225, 0); for(int i = yPos - 11; i = yPos + 12; i+=5) g.drawLine(xPos -

24、 12, i, xPos + 12, i); for(int i = xPos - 11; i = xPos + 12; i+=5) g.drawLine(i, yPos - 12, i, yPos + 12); g.setColor(new Color(0, 128, 0); for(int i = yPos - 10; i = yPos + 12; i+=5) g.drawLine(xPos - 12, i, xPos + 12, i); for(int i = xPos - 10; i = xPos + 12; i+=5) g.drawLine( i, yPos - 12, i, yPo

25、s + 12); river类继承了Actor接口,用river类构造器定义了河道的x,y坐标和矩形边界以及图标,使用g.drawImage(Image,int,int, ImageObserver)方法设置一幅图片来代表河道。以前各个经典版本的坦克大战游戏都将河道设置为不允许坦克经过,但子弹可以自由通过,本程序为了遵循经典,也如此设计。具体实现代码如下:public river(int a, int b, ServerModel gameModel) this.gameModel = gameModel; river = gameModel.textures71; xPos = a; yPo

26、s = b; Border = new Rectangle(xPos - 12, yPos - 12, 25, 25);g.drawImage(river, xPos - 12, yPos - 12, null)4.1.4墙与铁墙的设计该模块通过new Rectangle(int x,int y,int width,int height)完成了一个矩形的创建,然后将其具体值赋给变量数组border数组索引生成了墙。坐标x和y为绘制矩形时的起始点,width,height分别为矩形绘制的宽和高。通过构造器定义普通墙和铁墙的矩形边界和图标。具体实现代码如下:generalBorder = new

27、Rectangle(xPos - 12, yPos - 12, 25, 25);border0 = new Rectangle(xPos - 11, yPos - 11, 11, 11);border1 = new Rectangle(xPos + 1, yPos - 11, 11, 11);border2 = new Rectangle(xPos - 11, yPos + 1, 11, 11);border3 = new Rectangle(xPos + 1, yPos + 1, 11, 11);public wall(int a, int b, int orientation, Serve

28、rModel gameModel) xPos = a; yPos = b; this.gameModel = gameModel; wall = gameModel.textures70; generalBorder = new Rectangle(xPos - 12, yPos - 12, 25, 25);4.1.5界面窗口的创建再该模块中,在ServerView类的构造器中用super()方法调用父类构造器设置窗口题目为“坦克大战”,使用JButton(String)定义了六个(退出、帮助、发送、暂停/继续、建立主机和隐藏)鼠标点击事件(即所谓的按钮),JTextField定义文本框,并将

29、其设置为不可编辑。使用new drawingPanel()和setBackground(Color c)创建一个面板并设置背景颜色,再通过setBounds()和setLayout()方法定义了页面的大小并将页面布局定义为空。通过add()方法向页面添加按钮和文本框。使用setColor(Color c)方法设置面板颜色为指定颜色,再通过继承自java.awt.Graphics类中的drawString(String,int,int)方法向面板添加并输出当前关数及剩余敌人数,通过if判断语句进行判断,如果消灭坦克数量大于敌方坦克数量则输出胜利场景。4.2子弹功能设计该模块用setColor()

30、方法设置子弹颜色为浅灰色,使用g.fillRect(int,int,int,int)方法设置子弹水平或垂直发射时的形状,子弹和什么东西相交通过if()判断语句和equals()方法来鉴定,然后再处理相交时子弹和其他对象的属性变化。具体代码如下:public void draw(Graphics g) g.setColor(Color.lightGray); if(direction = 0 | direction = 1) g.fillRect(border.x + 1, border.y +1, 3, 9); if(direction = 2 | direction = 3) g.fillR

31、ect(border.x +1, border.y + 1, 9, 3);if(!border.intersects(map) gameModel.removeActor(this); notifiyOwner(); makeBomb(); writeToOutputLine(); return; if(gameModel.actorsi.getType().equals(steelWall) Steelwall temp =(Steelwall)gameModel.actorsi; if(!temp.walldestoried) temp.damageWall(border,bulletpower,direction);if(temp.bulletdestoried) hitTarget = true; else if(gameModel.actorsi.getType().equals(wall) wall tem

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2