玩家有关论文范本,与电子商务前言文相关论文查重免费
本论文是一篇玩家有关论文查重免费,关于电子商务前言文相关毕业论文题目范文。免费优秀的关于玩家及网络技术及计算机方面论文范文资料,适合玩家论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。
MEPORT),然后,服务器使用下列语句开始监听连接请求:
Socketplayer1等于serverSocket.accept(),
Socketplayer2等于serverSocket.accept(),
服务器开始等待,直到客户提出连接请求.连接建立后,服务器通过数据输入流从客户端接收信息,并且通过数据输出流把相应的标记发送给客户端.
newDataOutputStream(player1.getOutputStream()).writeInt(PLAYER1),
newDataOutputStream(player2.getOutputStream()).writeInt(PLAYER2),
当客户端满足开局条件时,就开启一个线程处理客户之间数据,同时继续监听其它客户端的连接请求.
多线程是Java的一个特点,多线程可以使程序反应更快,交互性更强,并能提高执行效率.创建一个新的线程的生命周期如下状态:新建,就绪,运行,阻塞,死亡.
在Java中,提供了多种控制线程的方法,在服务器中用到的主要以下几种:
publicvoidrun()
Java运行系统调用这个方法来执行线程.在用户线程类中,必须覆盖这个方法并且提供线程执行的代码.
publicvoidstart()
该方法启动线程,它引起对run()方法的调用.客户类中的可运行对象调用该方法.
服务器程序采用类HandleGame继承Thread类来实现对线程的调用,同时对run()方法覆盖.
以下是HandleGame()类里面主要的数据域和方法:
privatechar[][]cell:Char类型数组用来记录玩家的标记.
privateDataInputStreamisFromPlayer1,
privateDataOutputStreamosToPlayer1,
privateDataInputStreamisFromPlayer2,
privateDataOutputStreamosToPlayer2,
:四个数据流用来实现与两个玩家之间信息的传递.
publicHandleGame(Socketplayer1,Socketplayer2):
构造函数,两个参数用以接收传递过来的Socket对象.
publicvoidrun():对继承Thread类中的run()方法进行覆盖.
privatebooleanisFull():判断是否满格.
privatebooleanisWon(introw,intcolumn,chartoken):
判断新标记的单元格是否使一方获胜.
游戏局一旦建立起来,服务器便于工作交替地从客户端那里接收数据.从客户端接收到数据后,服务器判断游戏状态,并根据结果进行相关操作,直至游戏结束.
3.3客户端的设计与实现
客户端负责与玩家的交互.因此要创建一个界面,包括一个20*20的下棋区域,当玩家选定单元格或接收到别的玩家选定的单元格时,用不同的标记显示,两个显示游戏名称和游戏状态的标签和两个菜单栏上的按键用以进行控制,如图3-3:
图3-3客户端界面
Fig.3-3InterfaceofGame-client
这里客户程序设计成一个JavaApplet,用户可以在Web浏览器里运行.当用户打开GameClient.文件时,浏览器调用init()方法对界面进行初始化.点击Start时开启一个线程和服务器连接,通过数据流进行数据交换.
connectToServer等于newSocket("localhost",GAMEPORT),
isFromServer等于newDataInputStream(connectToServer.getInputStream()),
osToServer等于newDataOutputStream(connectToServer.getOutputStream()),
下面是类GameClient的主要方法和数据:
publicclassGameClientextendsJApplet
implementsRunnable,ActionListener,GameConstants
{
privatebooleanmyTurn等于false,:标记是否轮到自己下棋
privatecharmyToken等于'',:标记自己的棋子
privatecharotherToken等于'',:标记对手的棋子
privateCell[][]cell等于newCell[20][20],:生成20*20个单元格
privateintrowSelected,:记录所选单元格的行
privateintcolumnSelected,:记录所选单元格的列
privatebooleancontinueToPlay等于true,
privatebooleanwaiting等于true,
:记录游戏进行中的状态
publicvoidinit():初始化用户界面,打开网页时由浏览器调用
publicvoidactionPerformed(ActionEvente):
覆盖ActionListener接口里面actionPerformed()方法,用来处理用户点击菜单栏引起的操作.
publicvoidrun()
覆盖Runnable接口里的run()方法,用以对游戏过程中的数据传输,处理,控制.
}
在客户程序的类中,由于它继承了Applet类,所以不能再通过声明Thread类的扩展来实现,只能通过实现Java提供的一个Runnable接口,进行线程的创建和运行.Runnable接口的实现是非常简单的,它只包含run()方法,使用时只要将该方法覆盖.
从游戏设计来看,单元格是处理鼠标点击事件和显示标记的GUI对象.在这里使用的是面板,设置单元格Cell为JPanel的子类.将Cell类声明为内部类,可以直接使用GameClient类中定义的变量与方法,使程序简洁明了.
Cell类中包含以下主要数据和方法:
publicclassCellextendsJPanelimplementsMouseListener
{
privateintrow,
privateintcolumn,
privatechartoken等于'',
publicCell(introw,intcolumn){}:构造函数
publicvoidpaintComponent(Graphicsg){}:
Graphics对象g是由Java运行系统自动创建,这个对象控制信息的绘制方式.可以使用定义在Graphics类中的多种画法绘制字符串的几何图形.
publicvoidmouseClicked(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseReleased(MouseEvente){}
publicvoidmousePressed(MouseEvente){}
:接口MouseListener中的方法.
}
3.4程序的运行
首先将编写好的程序使用Java编译器编译,生成以class为扩展名的类文件,然后使用Java解释器分别运行服务器和客户端.客户端发出连接,服务器接收后开启线程对游戏进行控制,游戏结束时关闭线程.具体流程如图3-4所示:
玩家一
初始化用户界面
向服务器请求连接,并从服务器获知所用棋子的标记.
从服务器得到开始标志.
等待玩家标记单元格,并向服务器发送单元格的行号和列号.
从服务器接收游戏状态.
如果状态是WIN,显示是胜者,如果玩家二获胜,接收玩家二的最后一步走棋信息.中断循环.
如果状态是DRAW,显示游戏结束,中断循环.
如果状态是CONTINUE,接收玩家二选定的单元格的行号和列号,标记玩家二选定的单元格.服务器
创建一个服务器套接字.
接收第一个玩家的连接请求,并且通知玩家他是玩家一,使用标记"X".
接收第二个玩家的连接请求,并且通知玩家他是玩家二,使用标记"O".启动对局线程.
处理对局:
告诉玩家一开始游戏.
接收玩家一选定单元格的行和列.
判断游戏状态(STOP,WIN,DRAW,CONTINUE).如果玩家一退出,向玩家二发送状态(STOP),退出.
如果玩家一获胜,给两个玩家都发送状态(PLAYER1_WON),并且向玩家二发送玩家一的走棋信息.退出.
如果状态是CONTINUE,通知玩家二轮他走棋,并且向玩家二发送玩家一最新选定单元格的行和列.
接收玩家二选定的单元格的行和列.
如果玩家二退出,向玩家一发送状态(STOP),退出.
如果玩家二获胜,给两个玩家都发送状态(PLAYER2_WON),并且向玩家一发送玩家二的走棋信息.退出.
如果状态是CONTINUE,发送状态,并且向玩家一发送玩家二最近选定的单元格的行和列.玩家二
初始化用户界面
向服务器请求连接,并从服务器获知所用棋子的标记.
从服务器接收游戏状态.
如果状态是WIN,显示是胜者,如果玩家一获胜,接收玩家一的最后一步走棋信息.中断循环.
如果状态是CONTINUE,接收玩家一选定
玩家有关论文范本,与电子商务前言文相关论文查重免费参考文献资料: