java局域网坦克大战课程设计报告_第1页
java局域网坦克大战课程设计报告_第2页
java局域网坦克大战课程设计报告_第3页
java局域网坦克大战课程设计报告_第4页
java局域网坦克大战课程设计报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘 要随着计算机的普及以及对电子游戏的认识,电子游戏已被越来越多的人选作放松、娱乐的休闲方式;电子游戏既不需要专门购买游戏器材,也不需要宽阔的游戏场地,只需要一台能独立完成任务的计算机即可,它可以是人们工作、学习时用的计算机,并不需要另行配置,这比起传统休闲游戏即省钱又省事。局域网游戏更是可以将现实空间中零散的计算机,组织起来,使其在逻辑空间中集中起来,使游戏的组织、开展变得轻松。如此轻松而又安逸的休闲方式,使得越来越多的人尝试,甚至已经将电子游戏作为主要休闲方式,既然有如此多的人使用,那其中必然存在巨大的商机,即使人们不愿意为一个小小的休闲游戏花费金钱,但在游戏中添加广告、游戏相关服务也包藏

2、了巨大的财富;当然电子游戏的制作如今已是空前的火爆,大大小小的游戏公司横空出世,都想在电子游戏制作这个行业里占据一席之地,而一款成功的电子游戏需要精心的策划、分析、设计,只有这样才能获得游戏中包藏的财富,以及做出一款真正能够让玩家娱乐、放松的游戏,而不是骗取玩家钱财的工具。关键字: 局域网;电子游戏;坦克大战;目 录一、 系统分析- 1 -可行性分析- 1 -需求分析- 1 -二、 概要设计- 2 -工作流程图- 2 -项目规划- 3 -开发及运行环境- 3 -三、 详细设计与算法实现- 4 -游戏主窗口- 4 -网络管理- 6 -封装的游戏元素- 8 -四、 测试- 10 -测试环境- 10

3、 -测试结果- 10 -五、 软件截图- 11 -六、 总结- 14 -七、 参考文献- 15 - 1 -JAVA程序设计-局域网游戏-坦克大战1、 系统分析可行性分析技术可行性软件使用swing、GUI、Socket、面向对象设计等技术实现,这些技术均已是非常成熟的技术,之前已有相当多使用这些技术的成功案例,故现使用这些技术是可行的。经济可行性本软件为免费软件,将免费提供软件的下载、运行和维护服务,软件暂无收入,待公布之后随着使用者越来越多,将添加相应的广告、服务,从而增加收入,若使用者寥寥无几,将再次分析是否重新策划软件或者放弃开发,以减少损失。需求分析通过反复研究以及市场调查,得知游戏须

4、具有以下功能:q 需要有图形游戏界面,让用户能看到游戏给出的反馈q 有人机交互功能,使用户能操作指定的游戏元素q 不同队伍的坦克,须显示不同外观,已分辨敌我q 坦克能够开火,攻击敌方,但不能攻击队友q 需要有不可被子弹穿透的墙,且墙有可摧毁和不可摧毁两种q 坦克有生命值,并非被击中一次就会爆炸q 坦克爆炸后将产生道具,拾到道具的坦克可加满生命值q 游戏须提供网络支持,即局域网联网对战q 玩家在游戏中可以发言,即群聊功能q 须在玩家之间设立房主,掌管游戏何时开始q 游戏结束时须判断哪一队胜利q 游戏结束后可重新开始q 游戏的操作、进度等须提供相应说明,以告知玩家2、 概要设计工作流程图程序开始连

5、接服务器连接成功?YN新线程刷屏(间接调用paint)延迟25ms初始化游戏元素根据游戏元素的属性,对其经行操作和绘出其图形Paint方法战斗结束?Y键盘监听器判断按下的是那个键改变相应游戏元素的属性项目规划本游戏是一个典型的局域网对战游戏,应具有如下结构:q 游戏主窗口游戏的一切效果、进度、消息等都将由游戏主窗口展示q 网络管理负责发送、接收网络数据,以及如何处理这些数据q 封装的游戏元素游戏元素包括:坦克、子弹、爆炸效果、墙、道具等游戏必须的元素开发及运行环境开发时硬件环境q CPU:Inter P7350q 显卡:NVIDIA GeForce 9600M GSq 内存:威刚2G/DDR2

6、-667q 显示器:三星液晶15.4寸/分辨率:1280X800开发时软件环境q 操作系统:Windows7q JDK:1.5.0q IDE:Eclipse3.4.0运行时硬件环境q CPU:Inter E5200q 显卡:NVIDIA GeForce 7300 GSq 内存:金士顿2G/DDR2-667运行时软件环境q 操作系统:Windows Xpq JRE:1.6.0q 显示器:三星液晶19寸/分辨率:1440X9003、 详细设计与算法实现游戏主窗口游戏主窗口是人机交互的窗口,对玩家而言,他们只和游戏主窗口打交道,并不关心游戏内部是如何实现的,所以游戏主窗口部分最重要的便是游戏数据的输

7、入、输出。在程序中须创建一个类TankClient,继承自Frame来创建一个窗口。游戏数据的输入游戏中坦克需要能往上、下、左、右四个方向运动,故须设立4个按键,使其能操作坦克,另须设一个键控制坦克开火。为方便操作,本游戏设置WSAD分别表示上下左右,小键盘数字键4,表示开火。具体实现为,为窗口添加KeyListener(键盘监听器),监听键盘的按下和抬起。在TankClient类中添加内部的适配器类,由于不需要其它类访问,将其设计为private的,以保证面向对象设计的封装性。代码如下:/* * 移动按键键盘监听器 */private class MoveKeyL extends KeyAd

8、apter public void keyPressed(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_A:myTank.keyDownToDir(Direction.L);break;case KeyEvent.VK_W:myTank.keyDownToDir(Direction.U);break;case KeyEvent.VK_D:myTank.keyDownToDir(Direction.R);break;case KeyEvent.VK_S:myTank.keyDownToDir(Direction.D);break;publ

9、ic void keyReleased(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_A:myTank.keyUpToDir(Direction.L);break;case KeyEvent.VK_W:myTank.keyUpToDir(Direction.U);break;case KeyEvent.VK_D:myTank.keyUpToDir(Direction.R);break;case KeyEvent.VK_S:myTank.keyUpToDir(Direction.D);break;/* * 开火按键键盘监听器 */priv

10、ate class FireKeyL extends KeyAdapter public void keyReleased(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_NUMPAD4:myTank.fire();new TankFireMsg().send();break;游戏数据的输出玩家需要从游戏输出数据中获得游戏信息,如坦克在往上行驶、坦克发了颗子弹、坦克爆炸等,这些均需要通过游戏数据的输出来告知玩家。由于TankClient继承自Frame,Frame类中的方法paint,可以在窗口中绘制图形,即满足了游戏需要图形界面的需求;

11、另有方法repaint可以刷新窗口,以及时提供游戏信息,故须创建线程,不断地刷新窗口,来获取最新的游戏信息。代码如下:public void paint(Graphice g) for (int i = 0; i < allGE.size(); i+) int allGEOldSize = allGE.size();GameElement ge = allGE.get(i);if (ge instanceof Moveable) Moveable moveable = (Moveable) ge;moveable.move();ge.draw(g);/* * 如果容器数量减少,则减少相应

12、的遍历索引i */if (0 < allGEOldSize - allGE.size() i -= allGEOldSize - allGE.size();/* * 刷屏线程,负责画面的刷新以及游戏时间的推进 */private class MyTh implements Runnable public void run() while (true) repaint();try Thread.sleep(25); catch (InterruptedException e) e.printStackTrace();为使游戏主窗口效率更高、更容易被引用,且游戏主窗口只有一个,故TankCl

13、ient类使用单例模式来设计:private static final TankClient tc = new TankClient();private TankClient() .public static TankClient getTc() return tc;网络管理游戏需要对局域网对战的支持,所以需要对网络数据进行管理,使游戏能有条不紊地运行,网络管理部分主要负责输入游戏数据后发往其它游戏客户端,以及接收其它客户端发来的游戏数据。需要发送的游戏数据有:坦克创建消息(TankCreateMsg)、坦克开火消息(TankFireMsg)等客户端游戏数据的收发由于每个游戏消息都有共同的特性

14、,即发送、接受,故将其抽象出一个父类Msg,所有的消息类都继承自Msg类。public abstract class Msg public static final TankClient tc = TankClient.getTc();public static final int TANK_CREATE_MSG = 1;public static final int TANK_CHANGEDIR_MSG = 2;public static final int TANK_CALIBRATION_MSG = 3;public static final int TANK_FIRE_MSG = 4;

15、public static final int CHAT_WORD_MSG = 5;public static final int TANK_READY_MSG = 6;public static final int GAME_START_MSG = 7;public static final int GAME_OVER_MSG = 8;public static final int GAME_EXIT_MSG = 9;public static final int GAME_CHANGEMASTER_MSG = 10;public abstract void send();public ab

16、stract void receive(DataInputStream dis);在需要向每个游戏客户端发送游戏消息时只需实例化一个相应的对象,在调用send方法即可,接收时调用receive方法。服务器端游戏数据的收发服务器端的设计,只需将所有接收到的包转发给所有游戏客户端即可。接收:public class UDPThread implements Runnable public void run() byte buf = new byte1024;DatagramSocket ds = null;try ds = new DatagramSocket(ServerMain.SERVER_

17、UDP_PORT); catch (SocketException e) e.printStackTrace();while(true)DatagramPacket dp = new DatagramPacket(buf, buf.length);try ds.receive(dp);ServerMain.sendToEveryone(ds, dp); catch (IOException e) e.printStackTrace();转发:public static void sendToEveryone(DatagramSocket ds, DatagramPacket dp)for (i

18、nt i = 0; i < ServerMain.clients.size(); i+) try Client c = ServerMain.clients.get(i);String IP = c.IP;int port = c.udpPort;dp.setSocketAddress(new InetSocketAddress(IP, port);ds.send(dp); catch (IOException e) e.printStackTrace();封装的游戏元素将游戏元素(坦克、子弹、墙等)封装成一个一个的类,将大大地降低游戏设计、实现难度,且符合面向对象的设计方法。由于这些游

19、戏元素都有一些相同的属性、方法,故将其抽象为父类GameElement。public abstract class GameElement /* * 持有游戏主窗口的引用 */public static final TankClient tc = TankClient.getTc();/* * 元素的坐标 */public Rectangle rect;/* * 元素的类型(队伍) */public GameElementKind kind = GameElementKind.DEMON;/* * 由游戏主窗口自动调用,将决定该元素的在游戏中的表现形式 */public abstract void draw(Graphics g);程序中共有如下游戏元素:q Blast:爆炸效果q Bullet:子弹q ChatWord:群聊的内容q Tank:坦克q Wall:墙4、 测试测试环境测试时硬件环境q CPU:Inter E5200q 显卡:NVIDIA GeForce 7300 GSq 内存:金士顿2G/DDR2-667测试时软件环境q 操作系统:Windows

温馨提示

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

评论

0/150

提交评论