Java桌面游戏—争霸的设计与实现毕业论文(6)

2019-05-18 13:03

第21页 共41页

}

catch( IOException ioe ) { try { ??

} catch( MissingResourceException e) { MapResb = null; } } }

public static String getTranslatedMapName(String strOriginal) {

if (MapResb == null) { return strOriginal; }

String strReturn; try {

strReturn = MapResb.getString( strOriginal); } catch(MissingResourceException e) { strReturn = strOriginal; }

return strReturn; }

public static void setCards(String INstrFile) {

String strName = INstrFile.substring( 0, INstrFile.lastIndexOf( '.')); String strFile = strName + \+ TranslationBundle.getBundle().getLocale().getLanguage() + \

try {

CardsResb = new PropertyResourceBundle( (new URL(king.engine.Risk.mapsdir,strFile)).openStream() );

} catch( IOException ioe ) {

if(INstrFile.endsWith(\

{

try {

CardsResb=ResourceBundle.getBundle(\

TranslationBundle.getBundle().getLocale());

} catch( MissingResourceException e) { CardsResb = null; } } } }

public static String getTranslatedMissionName(String strOriginal) {

if (CardsResb == null) { return null; }

String strReturn; try {

strReturn = CardsResb.getString( strOriginal); } catch(MissingResourceException e) { strReturn = null; }

第22页 共41页

}

return strReturn; }

4.3 网络包的设计

游戏中该包的设计主要是用来实现游戏的网络联机游戏的功能的包,其中主要是一组实现两台机子相互连接的类:ChatArea类,ChatDisplayThread类,ChatReader类以及ChatServerThread类。

实现网络连接主要是要用到两个类:java.net.Socket类和java.net.ServerSocket类以及多线程和输入输出等类。

java.net包主要是为实现网络应用程序提供类。

让我们先了解一下什么是套接字的概念,网络套接字非常像电器的插座。网络上各种不同的插头用一个标准形式的方式来传递他们的负载,任何能够理解标准协议的东西都可以“插入”套接字来进行通信。对于电源插座,他并不在乎你插入的是一个电灯还是一个烤面包机,只要他们需要的是60赫兹,115伏电压,他们就将正常的工作。想一想你的电费帐单是怎么产生的:在你的房子和其余的网络之间的某个地方有一个计量表,对于通过那个计量表的每一千瓦能量,你都要付费。所以,即使电能在能量网络中自由的流动,但你的房子里的所有的插座都有一个特定的地址。网络套接字使用了同样的思想,只不过我们讨论的是TCP/IP数据包和IP地址,而不是电器和街道的地址。IP协议是一个低级路由协议,他把数据分成小的数据包并通过网络把他们发送到一个地址,但是他并不保证发送者上述的包能否到达目的地。传输控制协议是一个高级协议,用于把这些包串起来,如果需要,排列后重新发送他们以传送数据。第三个协议,拥护数据报协议和TCP协议很相似,可以直接用来支持快速、无连接的、不可靠的数据抱传输。

Socket类是实现客户端套接字(也可以就叫―套接字‖)。套接字是两台机器之间的通信端点。套接字的实际工作由 SocketImpl 类的实例执行。应用程序通过更改创建套接字实现的套接字工厂可以配置它自身,以创建适合本地防火墙的套接字。

ServerSocket类此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。服务器套接字的实际工作由 SocketImpl 类的实例执行。应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字。

网络包的实现结构图如图4-6(见下页)所示:

第23页 共41页

图4-6 网络包的实现

具体的实现代码如下: ChatArea类:

public class ChatArea extends Thread {

??

public ChatArea(RiskController g) throws Exception { gui = g;

InetAddress iaddr = InetAddress.getLocalHost(); serverSocket = new ServerSocket(port);

gui.sendMessage(\

gui.sendMessage(\ start(); }

public void run() { ?? }

catch (IOException e) { }

gui.sendMessage(\ }

public synchronized void closeSocket() throws IOException { ?? }

第24页 共41页

synchronized void putString(int index, String s) { ??

try { serverSocket.close(); } catch (IOException e) { } }

synchronized String getStrings(int index) { ?? }

synchronized String waitForString(int index) { ?? } }

ChatdisplayThread类:

public class ChatDisplayThread extends Thread { ??

public ChatDisplayThread (Risk r, BufferedReader in) {

risk = r; inChat = in; }

public void run() { String str;

boolean badexit=true; try {

while ((str = inChat.readLine()) != null) {

if (str.length() > 0) {

risk.GameParser(str); } } }

catch (IOException e) { ?? }

if (badexit) { risk.kickedOff(); } } }

ChatReader类:

public class ChatReader extends Thread{

??

ChatReader(BufferedReader in, ChatArea cArea, int index) { super(\ mySocketInput = in; myIndex = index; myChatArea = cArea; }

public void run(){

第25页 共41页

String inputLine; try {

while ((inputLine = mySocketInput.readLine()) != null) myChatArea.putString(myIndex, inputLine); }

catch (IOException e) { } } }

ChatServerThread类:

public class ChatServerThread extends Thread {

??

public ChatServerThread(Socket socket, ChatArea cArea, int me) { super(\ this.socket = socket; myChatArea = cArea; myIndex= me; } public void run() {

String outputLine; try {

PrintWriter outChat = new PrintWriter( socket.getOutputStream(), true); BufferedReader inChat = new BufferedReader( new InputStreamReader(

socket.getInputStream()));

myReaderThread = new ChatReader(inChat, myChatArea, myIndex); myReaderThread.start(); do {

outputLine = myChatArea.waitForString(myIndex); if (outputLine != null)

outChat.println(outputLine); }while (outputLine != null); inChat.close(); outChat.close(); socket.close();

} catch (IOException e) {} } }

4.4 人工智能包的设计

该包主要是用来实现游戏中电脑玩家的人工智能,游戏的电脑玩家可以分为简单ai的玩家和具有复杂ai的玩家:

简单ai电脑玩家只能进行一些简单的判断,向哪个国家进攻和部署多少军队以及如何部署军队都是随机的,而具有复杂ai的电脑玩家能进行复杂的判断,能根据敌人军队的部署来选择放置军队的方式和数量,来选择进攻的方式以及防守的方式;

具体的一些属性和方法见以下类图:


Java桌面游戏—争霸的设计与实现毕业论文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017年上半年青海省抹灰工技师模拟试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: