基于Java的坦克网战游戏的设计和实现

上传人:仙*** 文档编号:28000239 上传时间:2021-08-22 格式:DOC 页数:29 大小:625KB
收藏 版权申诉 举报 下载
基于Java的坦克网战游戏的设计和实现_第1页
第1页 / 共29页
基于Java的坦克网战游戏的设计和实现_第2页
第2页 / 共29页
基于Java的坦克网战游戏的设计和实现_第3页
第3页 / 共29页
资源描述:

《基于Java的坦克网战游戏的设计和实现》由会员分享,可在线阅读,更多相关《基于Java的坦克网战游戏的设计和实现(29页珍藏版)》请在装配图网上搜索。

1、四川师范大学成都学院本科毕业设计基于Java的坦克网战游戏的设计和实现学生: 指导教师: 内容摘要:坦克游戏是一款众所周知的休闲游戏,在网络日益发达的今天,局域网游戏为上班一族在工作闲暇之际提供了很好的放松空间。Java语言简单易学,并且能够在所有的计算机上运行,所以越来越多的程序员用它编写游戏。而本文介绍了基于Java的坦克网战游戏的设计和实现,主要介绍了相关技术理论,系统总体设计,各功能设计以及游戏的实现。本游戏在Eclipse平台上开发调试,分为两大部分,即服务器端和客户端。服务器端建立主机,客户端通过连接主机IP地址进行联机,联机成功自动进入游戏。游戏过程中玩家通过键盘来控制坦克,可以

2、进行聊天,选择暂停,游戏结束玩家可以选择重玩,但需要另一玩家同意。关键词:Java 坦克 局域网 EclipseDesign and achievement of network Tanks based on JavaAbstract: Tanks is a well-known casual game. With the increasing development of the Internet, LAN-based game provide a good relax platform for those office workers to spend their leisure time

3、. A growing number of programmer choice to use Java language to program game because this kind of language is easy to learn and it can be operated on all the computers. This article is about the design and achievement of the Tanks which is based on Java ,and it mainly introduces some relevant techno

4、logical theories, the system integrated design, diverse function design and the games achievement. This game is developed and debugged on Eclipse platform, which contains Server-side and Client-side. The Server-side aims at building mainframe, and the Client-side through connecting mainframes IP add

5、ress to load game automatically. Players can control tank through keyboard and chat or suspend while playing the game. They can also choice to restart the game if another player permits.Keywords:Java Tanks network Eclipse目 录前言11了解java11.1Java语言的发展11.2Java技术理论11.3三种平台简介21.4Java程序开发过程21.4.1编写Java源文件31

6、.4.2编译Java源文件31.4.3运行Java程序31.5关于Eclipse32系统分析42.1可行性分析42.2游戏规则和系统功能介绍43总体设计53.1程序运行流程53.2总体构架54程序模块74.1主体模块74.2通信模块74.3坦克模块74.4子弹模块84.5墙模块84.6关卡模块85程序实现85.1游戏窗口界面设计95.2游戏控制125.3游戏网络通信135.4游戏元素155.4.1坦克155.4.2游戏墙185.4.3游戏中子弹和爆炸效果195.5游戏整体实现效果206结束语21参考文献22IV基于Java的坦克网战游戏的设计和实现前言在人们工作压力日益加大的今天,休息时间有限

7、使娱乐项目越来越少,为了让上班族疲惫的心灵得以休息,开发了可在局域网内联机玩耍的坦克游戏让人们放松一刻。本款游戏设计时,考虑到实际操作性,简化了游戏的操作,只要操作键盘上的方向控制坦克运动,键按住攻击键发射子弹就可以玩该游戏,轻松享受玩游戏的喜悦,可操作性好,弥补了单机游戏的自娱自乐的弊端,而且不会让玩家过分痴迷于该游戏,它的益智性让玩家头脑更灵活和它基于局域网可以增进同事同学之间的配合度,无论是学习还是工作都起到积极作用。Java语言越来越被程序员认可,无论是高校的计算机专业还是IT培训学校,都把Java作为主要的教学内容之一。本款游戏利用了Java语言的的面向对象,多平台运行,稳定和多线程

8、工作的优良特征在传统C+语言编写的坦克游戏基础上进行改编,让其具备相对简单的功能。本文通过对系统的需求分析,选择在Eclipse平台上开发调试。分为主机端和客户端,分别由十八个和十四个类组成。实现了局域网内联机游戏,玩家通过键盘进行相应控制。为了增加游戏的趣味性,本游戏设有辅助道具,游戏过程中玩家可以进行信息传递。设置九个循环关卡,玩家通关后,自动进入下一关卡,使游戏具有多样性让玩家享尽局域网所带来的乐趣。1 了解java1.1 Java语言的发展因为C+语言具有一定的复杂性,也不能实现跨平台运行,因此出现了基于C+语言开发设计的一种新语言,即Oak语言。Java语言便是从该语言的基础上升级,

9、并拥有了一定的优越性。Oak语言最先是用于家用电器,在家用电器程序设计过程中,它实现了对家用电子产品的有效控制和信息流通。后来程序开发人员有效的利用Oak语言编写了HotJava浏览器,从此Java语言步入了历史舞台。随着Java语言第一个开发包的发布,Java语言一步一步走向成熟,J2SE1.5的发布更是一个里程碑。现如今,越多的程序设计人员选择Java语言进行相关程序设计,不光是它具有跨平台,多线程和相对安全性,它的开源也是吸引众多程序员的一个重要因素。1.2 Java技术理论Java语言是一种简单、面向对象的、分布的、解释的、健壮的、安全的、体系结构中立、可移植的、高性能、多线程的以及动

10、态执行的程序设计语言,有以下特性:l 跨平台(体系结构中立),Java程序能够在网络上任何地方执行;完全统一的语言版本,实现平台无关性;字节代码与平台无关性;访问底层操作系统功能的扩展类库,不依赖于具体系统等1。l 安全性好,除了Java语言具有的许多安全特性以外,Java提供了字节码校验器、文件访问限制机制、类装载器和运行时内存布局四级安全保证机制1。l 面向对象,面向对象的技术是当今软件开发的主流技术之一。Java语言是一个彻底的纯面向对象的程序设计语言,它具有面向对象的封装、继承和多态三大特点1 。1.3 三种平台简介 目前Java运行平台主要分为下列3个版本: Java SE:称为Ja

11、va标准版或Java标准平台,Java SE提供了标准的JDK开发平台,利用该平台可以开发Java桌面应用程序和低端的服务器应用程序,也可以开发Java Applet程序1。Java EE:称为Java企业版或Java企业平台,可以构建企业级的服务应用,Java EE平台包含了Java SE平台,并增加了附加类库,以便支持目录管理、交易管理和企业级消息处理等功能1。Java ME:称为Java微型版或Java小型平台,Java ME是一种很小的Java运行环境,用于嵌入式的消费产品中,如移动电话、掌上电脑或其他无线设备等1。1.4 Java程序开发过程一个Java程序的开发过程主要由三个过程组

12、成:编写源文件,编译Java源文件,运行Java程序,如图如图1.4-1所示:字节码文件由Java解释器执行由浏览器执行源文件:文件名.javaJava编译器:javacJava应用程序Java小应用程序图 1.4-1 Java程序开发过程图1.4.1 编写Java源文件源文件是由若干个类组成,编程人员使用Java语言编写好源代码,形成源文件。文件名的后缀为.java。可以使用文本编辑器,如Edit或记事本来编写源文件。不可使用Word编辑器,因为它含有不可见字符。源文件在命名时有一定规则,如果源文件中有多个类,那么只能一个类是public类,如果一个类是public类,那么源文件的名字必须与

13、这个类的名字完全相同1。1.4.2 编译Java源文件编译Java源文件:当创建源文件后,使用Java编译器来编译Java源文件,生成一种二进制的中间码,称为字节码(byte code),形成字节码文件。文件名的后缀为.class。如果源文件进行了修改,那么必须重新编译,在生成新的字节码文件1。1.4.3 运行Java程序运行Java程序:使用Java虚拟机中的Java解释器来解释执行编译生成的字节码,完成Java程序要实现的功能,Java应用程序总是从主类main方法开始执行1。1.5 关于Eclipse Eclipse是跨平台的自由与集成的开发环境。起初主要用于Java语言的开发,但目前也

14、有人利用插件将它用作其他计算机语言比如C+和Python的开发工具。Eclipse的原身仅是一个框架平台,但是越来越多插件的支持让Eclipse拥有其他功能相对稳定的IDE软件很难拥有灵活性。所以现在,许多程序员将Eclipse作为框架开发属于自己的IDE。Eclipse 最初由OTI及IBM两家公司的IDE产品开发团队共同开发。IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。现在由IBM带领,围绕关于它的项目已发展成了一个庞大的Eclipse联盟,现目前有百余家软件公司和大量程序开发员参与到此项目中,其中包括Borland、Rational Software

15、、Red Hat及Sybase等。Eclipse是一个开发源码项目,它其实是Visual Age for Java的替代品,其界面与以前的Visual Age for Java差不多,但因为其开源,每个人都可以免费获取,以便程序开发人员在此源码的基础上进行创意修改开发出自己需要的产品,所以越来越多的开发公司和团队选择它。最近包括Oracle等许多大型程序开发公司相继研究该项目,经过一段时间的开发研究,他们一致认为Eclipse将来会形成可以进行多种语言开发的IDE集合体,使用者只需下载各种语言的插件即可。2 系统分析2.1 可行性分析本款游戏的设计和开发是在C+语言开发的传统坦克游戏基础上进行

16、改编,要实现它的相应基本功能。分析研究传统坦克游戏得知,本款游戏要实现的功能主要主窗口的实现以及相应功能按键的功能实现,画出坦克,可以控制键盘让坦克移动,可以发射子弹,坦克被子弹击中消失并产生爆炸效果,防止坦克重叠运动等。研究课题设计要求得知,需要实现局域网联网功能。在选择开发语言的时候,需要考虑到开发目标。然而本次设计的目的完全可以由Java语言来实现。因为Java语言具有面向对象的特性,可以很好的将游戏中各个元素进行封装管理,降低开发难度。游戏运行过程不是单一过程,是多态同时进行,然而Java具有多线程的特性,这样恰恰满足了开发的需要,所以选择Java语言进行开发是不二的选择。在玩家进行娱

17、乐的时候,美观的界面是必不可少的,为了增强观赏性,可能在设计过程中需要从外部载入图片。玩家坦克可以通过监听玩家键盘响应事件控制。对于敌方坦克,在设计游戏过程中要考虑到不能同时出现太多,还能让敌方坦克自主进行移动和向目标开火。以此同时,因为敌方坦克是自主随机移动,需要考虑到坦克与坦克之间不能相互重叠和穿越,也不能同时做同意动作。那么利用Java语言的多线程能保证坦克有序运行。与传统单机坦克游戏不同,本款游戏需要实现局域网通信。然而通Java语言中有套接字 Socket实现通信功能。综合以上分析可以得出,利用Java语言的各种优越特性能够实现本次设计的总体要求,也能实现相应功能。2.2 游戏规则和

18、系统功能介绍在本款游戏中,玩家坦克受玩家键盘向东南西北方向移动,并由玩家控制开火键对目标进行打击,玩家双方坦克免受对方火力攻击。敌方坦克随机运动,并发射子弹。游戏中,坦克和子弹能够击毁普通砖墙,但不能击穿钢墙,坦克能够穿越草丛不能穿越河流,子弹能够穿越河流和草丛。游戏过程中,玩家除了保证自己免受伤害同时也要保障基地安全,玩家消灭敌方闪烁坦克可以获得额外辅助道具,两玩家在游戏过程中可以聊天,也可以请求暂停。每个关卡设置二十个敌方坦克,当坦克完全被消灭后,进入下一关卡,当玩家基地被毁或双方玩家生命耗尽,游戏结束,玩家可以选择重玩,但需要双方做出一致选择。3 总体设计3.1 程序运行流程本游戏程序运

19、行需要玩家双方在局域网内建立通信,也可在同一电脑上建立通信,但只能操作一个玩家。具体运行流程如图3.1-1所示:开始服务器建立主机建立成功客服端连接主机运行服务器运行客服端连接成功游戏结束载入游戏结束重玩游戏否是否是是否图 3.1-1 程序运行流程如图3.2 总体构架本游戏在设计过程中,为了降低设计难度,将整个程序按模块进行单独编写,包括主类、通信类、坦克类、子弹类、墙类、辅助类、服务器类、客服端类、敌人坦克类、关卡类以及时钟类。各个类和实现的功能表如表3.2-1所示:表3.2-1 各个类和实现的功能表类实现功能主类实现游戏窗口的显示提供公共接口通信类实现玩家间建立游戏使玩家间可以进行信息交流

20、坦克类添加坦克图片控制坦克移动让坦克可以发出子弹让玩家坦克死亡后重置使坦克不能穿墙和其他坦克使坦克可以穿草丛不能穿河子弹类画出子弹控制子弹让普通子弹可以击毁普通砖墙不能击毁钢墙让子弹可以穿越草丛和河流墙类添加砖墙图片添加钢墙图片添加草丛图片添加河流图片显示图片辅助类添加辅助图片敌方闪烁坦克阵亡后随机显示辅助图片玩家获得辅助图片后得到相应辅助功能服务器类建立主机控制游戏进程客服端类输入主机IP连接主机控制游戏进程关卡类添加墙类图片并进行排版编辑显示添加图片时钟类刷新线程对玩家事件进行监听控制游戏运行与休眠4 程序模块本游戏程序由多个模块同时运行而实现,也体现了Java语言的优越性。通过各个模块的

21、相互调用,它能完成游戏显示,通信建立,控制进程等一系列操作,使游戏规范化,易于操作。4.1 主体模块主体模块首先构建接口, 因为Java不支持多继承性,即一个类只能有一个父类。单继承性使得Java简单,易于管理程序。为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口。使用关键字interface来定义一个接口。接口的定义和类的定义很相似,分为接口的声明和接口体。其次是画出游戏面板和游戏窗口的显示,在游戏窗口中添加了几个功能按键,主要进行联机操作,游戏进程操作等。游戏过程中,游戏版面显示当前关卡数,敌人剩余数,玩家生命数以及玩家获得的分数。4.2 通信模块通信模块通过Java语言中

22、套接字 Socket编写通信类,针对游戏中客户端和服务器的联机功能的实现,它的通信过程是基于TCP/IP协议中传输层接口socket实现。通过通信模块玩家可以进行信息传递以便协同作战,为本游戏添加乐趣。4.3 坦克模块坦克模块部分主要由玩家坦克和敌人坦克组成,敌方坦克随机出现,并随机移动,玩家通过键盘操作来控制坦克的移动和对敌方坦克进行攻击。玩家坦克可以对敌方闪烁坦克进行攻击,并得到额外辅助道具,获得道具后玩家坦克具备相应功能。敌方坦克由游戏窗口上方按照左中右依次出现,敌方在移动过程中随机发出子弹,如遇见障碍则随机改变运动方向。玩家在第一关卡时,最多同时出现三辆敌方坦克,随着游戏的进行敌方坦克

23、数量随之增加且敌方坦克运动速度加快,和经典单机坦克游戏十分相似,将玩家带入童年回忆。4.4 子弹模块在该模块中,初始玩家一次只能发射一颗子弹,且只对敌方坦克和普通砖墙有效,当子弹消失后才能接着发射。子弹击毁时出现爆炸效果,玩家子弹和敌方坦克发出的子弹可以撞毁,敌方坦克向四个方向随机移动并发射子弹。游戏工程中玩家获得相应辅助道具后,子弹速度加快且可以进行连续射击。4.5 墙模块墙模块是由四个类共同组成,包括砖墙、钢墙、草丛和河流。通过这四个类的组合,编辑成游戏地图。游戏地图中,玩家基地周围是由砖墙包围,在墙模块中,砖墙是最基本的组成,玩家或敌方坦克都能将其摧毁,钢墙只有玩家获得特殊辅助后才能摧毁

24、,玩家和敌方发出的子弹都能穿越草丛和河流。4.6 关卡模块为了增加游戏的趣味性,游戏中设计了九个循环关卡。在游戏过程中,玩家双方各有3条生命,当玩家双方均把生命耗尽时,通关失败,只有双方选择重玩时才重新开始游戏。在关卡进行时,任一玩家可以选择暂停游戏,在每个关卡中设置了玩家基地,当玩家基地被毁,则通关失败。每个关卡设计20辆敌方坦克,当敌方坦克均被消灭,游戏自动进入下一关卡。游戏玩家具体游戏流程如图4.6-1所示:载入游戏开始失败重玩结束进入下一关是否否是图4.6-1 玩家游戏流程图5 程序实现5.1 游戏窗口界面设计游戏窗口使用Frame类,Frame类是Container类的间接子类。当需

25、要一个窗口时,可使用Frame或其子类创建一个对象。窗口也是一个容器,可以向窗口添加组件。该游戏界面包括文本输入框和按钮,因为服务器端和客户端窗口相似,以下提供客服端游戏窗口设计代码:public class ServerView extends JFramepublic drawingPanel mainPanel;public JButton createServer, exit, pauseAndResume, help, hiddenButton;public JTextField messageField;public JButton sendMessage;public Serve

26、rControler controler;public ServerModel model;public ServerView()super(基于Java的坦克网战游戏);try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch (Exception e) getContentPane().setLayout(null);mainPanel = new drawingPanel();mainPanel.setLayout(null);mainPanel.setBounds(0, 22, 679,

27、605);mainPanel.setBackground(new Color(128, 64, 128); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(150, 130, 640, 590); setVisible(true); setResizable( false );model = new ServerModel(this);controler = new ServerControler(this, model);/* * 添加按键和文本框并实现相应功能 */messageField = new JTextField(

28、);messageField.setBounds(0,519, 560,22);messageField.setEnabled(false);sendMessage = new JButton(发送);sendMessage.setBounds(570,518, 62,24);sendMessage.setFocusable(false);mainPanel.add(messageField);mainPanel.add(sendMessage);getContentPane().add(mainPanel);mainPanel.setFocusable(true);createServer

29、= new JButton(建立主机);createServer.setBounds(0, 0,120,22);getContentPane().add(createServer);createServer.setFocusable(false);pauseAndResume = new JButton(暂停/继续);pauseAndResume.setBounds(120, 0,120,22);getContentPane().add(pauseAndResume);pauseAndResume.setFocusable(false);help = new JButton(帮助);help.

30、setBounds(240, 0,120,22);getContentPane().add(help);help.setFocusable(false);exit = new JButton(退出);exit.setBounds(360, 0,120,22);getContentPane().add(exit);exit.setFocusable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(150, 130, 640, 590); setVisible(true); setResizable( false );

31、model = new ServerModel(this);controler = new ServerControler(this, model);public static void main(String args)new ServerView();游戏运行界面使用JPanel创建一个面板,再向这个面板添加组件。主要分为游戏界面和玩家信息界面,如图5.1-1所示:游戏按键和文本框区域玩家得分玩家生命游戏界面游戏进度聊天信息编写区域图5.1-1 游戏运行界面图游戏界面显示游戏实时画面,玩家信息界面主要显示玩家生命值,玩家得分情况,关卡进读,和剩余敌方坦克数量。部分代码如下:public c

32、lass drawingPanel extends JPanelpublic Image offScreenImage;public String messageQueue;public Actor drawingList;public boolean gameStarted;public int green, red, blue;public int P1Life, P2Life, P1Score, P2Score, EnemyLeft, LevelIndex;public Image P1Image, P2Image;5.2 游戏控制这款游戏设计过程中,主要使用键盘进行操作,为了让玩家对坦

33、克进行有效操作,游戏程序窗口添加KeyListener(键盘监听器)。事件源描述事件对象中事件的性质。玩家的每个操作将产生一个事件源对应一个或多个事件监听器,当发生事件就将调用相关事件监听器。此后事件源便将该事件对象发送给相应监听器接口类的方法,监听器接口则会接收到相应的事件信息。此时监听器开始分析事件对象并找出事件内容,然后作出相应反应 。在java.awt.event 包中定义的接口可以用来创建监听器。只有在事件发生时,监视器定义的方法才会被事件源所调用。有兴趣接收事件的任何监听器类都必须实现监听器接口。代码如下:/* * 移动按键键盘监听器 */temp.addKeyListener(

34、new KeyAdapter()public void keyPressed(KeyEvent e)if(model.P1 != null)if(e.getKeyCode() = KeyEvent.VK_UP)model.P1.moveUp = true;model.P1.moveDown = false;model.P1.moveLeft = false;model.P1.moveRight = false;if(e.getKeyCode() = KeyEvent.VK_DOWN )model.P1.moveDown = true;model.P1.moveUp = false;model.

35、P1.moveLeft = false;model.P1.moveRight = false;if(e.getKeyCode() = KeyEvent.VK_LEFT )model.P1.moveLeft = true;model.P1.moveUp = false;model.P1.moveDown = false;model.P1.moveRight = false;if(e.getKeyCode() = KeyEvent.VK_RIGHT )model.P1.moveLeft = false;model.P1.moveUp = false;model.P1.moveDown = fals

36、e;model.P1.moveRight = true;5.3 游戏网络通信在JAVA语言中,利用TCP通信,通常有一个明确的服务器端(Server端),一个或多个客户端(Client端)。分别使用ServerSocket类建立一个服务器端标识,负责监听客户端的连接请求。使用Socket类建立服务器端与客户端一对通信实体标识。套接字通常由三个部分构成:在计算机进程之间利用TCP/IP进行通信时,需要通过IP地址来定位通信双方的计算机,通过TCP/UDP来明确通信软件所采用的通信协议,通过端口号来确定通信软件进程。所以,通信协议、网络地址和端口号三个部分组合在一起可确定通信实体,表达方法为:SO

37、CKET=(TCP/UDP, IP Address,Port)本游戏程序通过套接字实现了服务器端主机建立后响应客户端的连接请求,在游戏进行时,获得对方玩家实时画面,任意一方暂停或继续游戏,以及联机成功后玩家双方的信息传递等功能,具体代码如下:/* * 服务器建立主机 */public void createServer() addMessage(正在建立主机(端口4321); try serverSocket = new ServerSocket(4321); serverCreated = true; catch (Exception e) addMessage(无法建立主机,请确认端口43

38、21没有被别的程序使用);System.out.println(e);t.stop();return; /* * 客户端连接主机 */public void connectServer()addMessage(正在连接主机);try serverIP = view.IPfield.getText(); InetAddress addr = InetAddress.getByName(serverIP);clientSocket = new Socket(addr, 4321);serverConnected = true;addMessage(已成功连接到主机,开始载入游戏);以上就是游戏中玩

39、家建立主机和连接主机的实现过程。在本款游戏中,玩家建立通信后还可以进行信息共享和消息传递功能。代码如下:if(perInstruction.substring(0,1).equals(m)gameModel.addMessage(主机端玩家说: + perInstruction.substring(1,perInstruction.length();以上是玩家游戏过程中聊天通信实现的部分代码。if(perInstruction.substring(0,1).equals(x)int temp = Integer.parseInt(perInstruction.substring(1,2);if

40、(temp = 0)if(gameModel.gamePaused)gameModel.addMessage(主机端玩家取消了暂停);gameModel.gamePaused = false;elseif(!gameModel.gamePaused)gameModel.addMessage(主机端玩家暂停了游戏);gameModel.gamePaused = true;以上是玩家在游戏过程中对游戏进程的信息共享功能部分代码。5.4 游戏元素本款游戏在设计时避免了图形绘制的麻烦,更多的采用了直接引入外部图片来作为游戏中的元素,如坦克和游戏墙。这大大的减少了游戏设计时的繁琐更多的节省时间。5.4.

41、1 坦克在游戏设计过程中,游戏中坦克采用载入已经排好顺序的外部图片的方式来实现,如图5.4.1-1所示:图5.4.1-1 游戏中外部载入坦克图在实现坦克向四个方向移动时,采用的是朝向不同的四张图片。在游戏过程中,玩家坦克如果获得辅助道具,坦克将具备辅助功能,如穿墙和连发子弹等。游戏开始时,玩家坦克有免疫攻击时间,玩家坦克朝上,只具备初级攻击力,通过以下代码实现:direction = UP;status = 1;health = 1;numberOfBullet = 1;InvulnerableTime = 150;if(type.equals( 1P)xPos = 198;yPos = 49

42、8;border = new Rectangle(xPos - size, yPos - size, 25, 25);xVPos = xPos; yVPos = yPos;for(int i = 0; i 4; i +)texturesi = gameModel.textures54+i;elsexPos = 323;yPos = 498;border = new Rectangle(xPos - size, yPos - size, 25, 25);xVPos = xPos; yVPos = yPos;for(int i = 0; i 4; i +)texturesi = gameModel

43、.textures72+i;在游戏过程中,玩家获得相应辅助后会有战力提升,根据坦克攻击力大小,载入不同的坦克图片,提升画面效果,部分代码如下:int textureIndex = 0;if(type.equals(1P)if(status = 1)textureIndex = 54 + direction;else if (status = 2)textureIndex = 58 + direction;else if(status = 3)textureIndex = 62 + direction;elsetextureIndex = 66 + direction;elseif(status

44、 = 1)textureIndex = 72 + direction;else if (status = 2)textureIndex = 76 + direction;else if(status = 3)textureIndex = 80 + direction;elsetextureIndex = 84 + direction;游戏中敌方坦克有不同类型,在游戏过程中,敌方坦克将由左中右三个方向同时出现,在移动过程中会发射子弹,当遇见阻挡时会随机改变运动方向,其部分代码如下:interval = (int)(Math.random()*200);direction = (int)(Math

45、.random()*4);numberOfBullet = 1;xVPos = xPos;yVPos = yPos;border = new Rectangle(xPos - size, yPos - size, 25, 25);以上是敌方坦克的共同属性,不同坦克具备不同特性,如运动速度、抗击子弹能力、消灭后会产生辅助道具等,代码如下:if(type =1 )firePosibility = 0.95;speed = 2;textures = new Image8;for(int i = 0; i 8; i+)texturesi = gameModel.textures38+i;else if

46、(type = 2)firePosibility = 0.95;speed = 4;textures = new Image8;for(int i = 0; i 8; i+)texturesi = gameModel.textures2+i;else if(type = 3)firePosibility = 0.9;speed = 2;textures = new Image8;for(int i = 0; i 8; i+)texturesi = gameModel.textures10+i;elsefirePosibility = 0.95;health = 3;speed = 2;text

47、ures = new Image20;for(int i = 0; i 20; i+)texturesi = gameModel.textures18+i;5.4.2 游戏墙游戏墙和坦克设计如出一辙,主要是通过引入外部编序图片实现。游戏墙由四个类实现,分别是wall.java、steelwall.java、river.java和grass.java。其中前三者是直接载入图片,grass.java则是采用Java语言的绘图功能实现。游戏中每个关卡设置由游戏墙模块编辑而成,不同的墙具有不同的性质,如图5.4.2-1所示: 图5.4.2-1 游戏墙模块组成效果图5.4.3 游戏中子弹和爆炸效果在本款

48、游戏设计过程中,游戏中子弹和爆炸效果均是采用Java语言中public void draw(Graphics g)画出。子弹在发射过后,实现判断是否击毁,击毁则产生爆炸效果。部分代码如下: /* *画出子弹 */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.fillRect(border.x +1, bor

49、der.y + 1, 9, 3);/* * 画出爆炸效果 */public void draw(Graphics g)g.setColor(Color.red);g.fillOval(xPos-outer, yPos-outer, 2*outer, 2*outer);g.setColor(Color.orange);g.fillOval(xPos-middle, yPos-middle, 2*middle, 2*middle);g.setColor(Color.yellow);g.fillOval(xPos-inner, yPos-inner, 2*inner, 2*inner);/* * 检

50、测子弹是否与边界发生碰撞 */if(!border.intersects(map)gameModel.removeActor(this);notifiyOwner();makeBomb();writeToOutputLine();return;5.5 游戏整体实现效果本游戏设计的实现由32个类组成,一共编写4000余行代码,外部引用89张图片。为了降低游戏设计、实现难度,把游戏元素:坦克、子弹、墙等封装成单独的类。在游戏设计时考虑到新玩家不熟悉操作规则,特此在游戏窗口添加帮助按钮,玩家单击帮助按钮则对游戏规则进行显示说明。游戏窗口设置暂停/停止按钮来控制程序进程。运行程序时,玩家输入对方玩家I

51、P地址即可实现联机,联机成功后程序自动导入游戏,玩家通过键盘方向键控制坦克移动,S键实现开火。程序运行时,玩家可以通过游戏窗口下方的聊天文本框输入聊天内容,按ENTER键或点击发送按钮发送消息,玩家发送的信息则显示在游戏面板的左上角。游戏面板右边部分实现了游戏信息的显示,玩家可以通过该信息面板得知游戏进度,玩家生命值,和玩家得分。玩家想退出游戏时,单击退出按钮即可实现。游戏运行界面如图5.5-1所示:图5.5-1 游戏整体效果图6 结束语本论文主要亮点在于将传统的C+语言编写的坦克游戏重新使用Java语言编写,在单机游戏的基础上,利用Java语言套接字建立局域网通信。本款游戏选择Java语言进

52、行编写,充分的利用了Java语言支持多线程和面向对象的重要特性。选择Java语言编写,降低了程序设计难度的同时也为这次设计节省不少时间。通过这次设计,更加深刻的认识到了Java语言的优越性和重要性。 通过毕业设计,我学到不少知识,也让自己认识到了懂得知识不算什么,只有懂得如何运用所学知识才是真正的优秀。在知识储备方面,单靠在校期间储备课本知识是远远不够的,只有通过自学和拓宽知识面才能让自己的能力有所提高。 在本款游戏设计上,虽然达到课题要求,但是依然存在一些不足。在游戏关卡设计方面,可供游戏玩家玩耍的关卡有限,这样会削弱玩家的兴趣;在游戏设计过程中,没有载入音频,使得玩家玩耍的时候只能进行无声

53、操作。因此在后续操作过程中,将全力弥补这两个地方的不足,争取把这款游戏用Java语言还原成经典的坦克游戏。此次毕业设计的成功完成,首先感谢我尊敬的指导老师王老师。我非常荣幸的能够得到王老师的细心指导,在学习阶段,王老师渊博的知识、严谨的治学态度、实事求是的精神和耐心细心的作风让我铭记在心。在本次毕业设计选题后,是王老师为我详细的推荐参考资料,在我课题开展和研究论文开展时都得到王老师的细心指导和帮助。为我提供指导性方案和构架,使我在这次毕业设计很快的开展,在设计中的大小问题因为导师的信息指导都迎刃而解,最后圆满的完成了设计任务。在此谨向我的导师致以由衷的敬意和诚挚的谢意!另外感谢我的授课教师们,

54、感谢他们几年来付出的辛劳,感谢几年来的栽培,是你们的辛勤付出让我们奠定了扎实的基础,为我们这次毕业设计铺平了道路,让我们顺利的完成学业。也感谢学院给我们提供这么完善的教学条件和学习生活环境。最后感谢全体同学,谢谢他们在这次毕业设计中的监督和鼓励,也感谢他们在平日生活和学习上给的帮助,以及带来的充实大学生活。参考文献:1 耿祥义:Java 2 适用教程,清华大学出版社,2006.8,P1-P102 庞永庆: 21天学通Java,电子工业出版社,2009.1,P28-P453 朱仲杰:Java 全方位学习,电子工业出版社,2008.6,P34-P524 李钟蔚:Java开发实战宝典,清华大学出版社

55、,2009.8,P42-P485 孙卫琴:Java面向对象编程,电子工业出版社,2006.6,P63-P756 Ivor Horton:Java 2 入门经典,北京大学出版社,2005.6,P125-1327 张基温:Java程序开发教程,清华大学出版社,2008.8,P28-P458 殷兆麟:Java语言程序设计,高等教育出版社2006.5,P131-P175 洪维恩:Java面向对象程序设计,中国铁道出版社,2005.6,P83-P121精品资料9JWKffwvG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ!djs#XuyUP2kNXpR

56、WXmA&UE9aQGn8xp$R#͑GxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu#KN&MuWFA5uxY7JnD6YWRrWwcvR9CpbK!zn%Mz849GxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu#KN&MuWFA5uxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnG

57、K8!z89AmYWpazadNu#KN&MuWFA5uxY7JnD6YWRrWwcvR9CpbK!zn%Mz849GxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmUE9aQGn8xp$R#͑GxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu#KN&MuWFA5uxY7JnD6YWRrWwcvR9CpbK!zn%Mz849GxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx

58、2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu#KN&MuWFA5uxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu#KN&MuWFA5uxY7JnD6YWRrWwcvR9CpbK!zn%Mz849GxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z8vG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFy

59、eQ!djs#XuyUP2kNXpRWXmA&UE9aQGn8xp$R#͑GxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu#KN&MuWFA5uxY7JnD6YWRrWwcvR9CpbK!zn%Mz849GxG89AmUE9aQGn8xp$R#͑GxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu#KN&MuWFA5uxY7JnD6YWRrWwcvR9CpbK!zn%Mz849GxGjqv$UE9wEwZ#QcUE%&qYpEh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu#KN&MuWFA5uxGjqv$UE9wEwZ#QcUE

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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