英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料
中国象棋网络游戏的算法设计
FangXianmei
前言
本文描述了国内网络游戏的现状。结合目前本地网络游戏的现状,我们根据所掌握的信息,对中国象棋等多线程tcp客户端和服务器端进行了研究,并对其内容和意义进行了探讨。结合Java的基础知识,根据Java Swing的使用信息,研究了面向对象的编译过程,以及网络程序的实现方法。本文研究了在Java Swing环境下对Sprocket进行网络编程的方法和过程。了解使用Java编译过程的基本过程以及如何编译网络过程。最重要的是如何实现一对机器的通信--C/S服务系统。在此基础上,提出了网络游戏中国象棋的数据结构、基本计算方法,以及该程序的服务器端和客户端的设计与实现。网络游戏象棋的设计可以分为几个模块:服务器模块、客户端模块和控制模块。
关键词:Java;多线程;中国象棋;通信
1.介绍
随着Internet的不断完善,Java编程在游戏中逐渐显露出强大的特性,尤其是其健壮性和跨平台类型及其在网络应用中的强大能力,使得各种类型的游戏得以开发。如基于J2ME的手机游戏、基于JavaApplet或JavaSwing的多媒体游戏、基于J2EE架构的网络游戏等[2]。本设计是基于C/S实现一个简单的双棋网络中国象棋应用程序。游戏使用eclipse开发工具。棋局提供网络支持,局域网在对弈中联网,棋局上的其他两名棋手不在状态,而是一人向另一人提供服务;但是棋局要把服务器和客户端设置在一起,也就是说,要么同一应用程序也可以选择一个服务器作为客户端。并认为棋盘还具有投掷毛巾和背景的功能[3]。具体用途如下:
Serverside:OpenApplicationsgt;Starttheserver
Client:OpenApplicationsgt;Linkgt;entertheserverIPaddress
然后就会有一个棋子去打可以了。这个游戏还可以改变背景。您可以让计算机中的图像文件选择您喜欢的图片。本文设计并实现了一个基于C/S服务的例行双棋游戏,用户可以上网,与其他在线用户进行对战。系统建立在Windows XP平台上,使用eclipse的开发工具。虽然这个设计是一个游戏,但是它对我们理解Java编程语言和它的具体有着重要的作用。因为它不仅涉及JavaSwing,还涉及网络知识TcpSocket,涉及的内容非常广泛,而且有利于对Java编程的理解和使用 。网络游戏服务程序的设计要考虑很多细节问题,如何设计简单明了是一个需要研究的问题。该设计基于消息响应机制和面向对象的服务程序设计,使服务器端和客户端程序设计简单明了,并实现了每个包内对象的实现细节,实现了对象自身的具体特点。整个系统结构简单,实现了服务器端和客户端较为通用的程序模型。客户机服务器体系结构,服务器通常处于被动状态,等待客户的各种请求,服务器通过消息触发和消息响应机制完成其工作。那么如何正确地设计服务器端程序的体系结构来满足应用尤为重要。在我们设计的服务程序结构中,重点考虑了客户端对服务器端的响应消息,并对提交的请求进行响应操作,系统架构比较清晰,易于扩展。
2.客户端/服务器模型
在TCP/IP网络中,两个进程之间的通信方式主要是客户机/服务器模式(client/servermodel)交互,客户向服务器提出服务请求,服务器接收请求,提供相应的服务。Client/server模型建立在以下两点上:首先,建立网络的原因是网络的硬件和软件资源、计算能力和信息不对等,需要共享,从而带来资源总数与主机提供服务的客户资源较少的服务请求的非互惠作用。其次,互连进程的通信是完全异步的,进程间的母子通信关系是不存在的,在没有共享内存缓存的情况下,需要一种机制来为希望建立通信的进程之间建立联系,为两者之间的数据交换提供同步,这种机制是基于client/server TCP/IP的。
在操作模式上采用客户机/服务器模式,是一种主动请求。 服务器端首先启动,并根据请求提供相应的服务。
打开通信通道并通知本地主机,它愿意在一个识别接收客户端的地址请求。 等待客户端请求到达端口。
接收客户服务请求,处理请求并发送响应信号。接收和发送服务请求到 激活新流程以处理客户请求。处理这个新流程客户的请求,不需要对其他请求做出响应。服务完成后,新的流程就关闭了与客户的沟通环节并结束。
返回步骤2,等待另一个客户求。 关闭服务器。 客户端实现如下所示。
打开通信通道,并连接到服务器所在的主机特定端口。
服务请求到服务器发送的消息,等待并接收响应;继续请求。 关闭后,通信信道请求并终止
从上面的描述我们可以看出:客户端和服务器端的角色进程不对等,所以编码方式不同。服务器进程处理发起的客户请求的一般实现。只要系统在运行,服务进程就一直存在,直到正常或被迫终止。服务器程序通常监听一个已知地址的服务请求,该过程一直处于休眠状态,直到客户的地址 为该服务提出连接请求。这时,服务程序被“唤醒”,并为客户提供服务,对客户的请求做出适当 的响应。
3.基础框架
本节重点介绍用于用户界面的那些。
3.1形式设计
游戏界面采用JavaSwingAPI函数实现,在设计中以中国象棋棋盘为坐标系,以左下角为原点坐标,棋盘的行、列分别以X轴坐标系和Y轴为棋盘上的每个小单元坐标为单位,分别绘制了棋盘的横、纵、尖两侧的棋盘坐标、将军区和河流群落。在程序设计中,首先对所有的棋子进行编号,板上是整形内容的二维数组,以 数组下标表示板上的位置(坐标),如果棋子的当前位置值为数组元素的个数,否则为0。阵长90(中国象棋横切共9times;10分)。每一步修改数组的内容,同时将数组的内容重新涂装到板面上。
3.2象棋记录
由多个对象链接,称为数据结构的节点,每个节点包含对对象的引用,下一个节点(单链表),或者包含数据对象的引用,上一个节点和下一个节点的对象引用(双链表)。棋局就是用表单 记录列表。首先创建一个链表,然后使用add()方法添加节点chess,chess记录每一步,最后存 储在文件中。读取数据,按顺序列表读取棋子。
3.3添加位图资源
象棋游戏需要大量的位图,如对话背景、棋盘和棋子都用来充当一个位图。需要导入所需的位图。此外,棋局还可以更换底色,代码如下:
If
(
evt.arg.equals (ChessArray.menu1 [0][i]))
(
ChessArray.img = Toolkit.getDefaultToolkit (). GetImage ('checkerboard pattern ' ChessArray.menu1 [0][i] '.Jpg');
ChessArray.repaint=true;
ChessArray.information ('image has been loaded;' ChessArray.information);
returntrue;
)
if(evt.arg.equals('Other...'))
(
StringSbak=ChessArray.information;
ChessArray.information('OpenFiledialogboxis,pleasewait......');
FileDialogfl=newFileDialog(newFrame(),'selectthecheckerboardpattern',0);
fl.setBounds(width/4,this.height/6,width/2,height/3);
fl.show();
ChessArray.information ('Please select your desired pattern');
ChessArray.img=Toolkit.getDefaultToolkit().GetImage(
fl.getDirectory() fl.getFile()); ChessArray.repaint=true;
ChessArray.information('imagehasbeenloaded' Sbak);
returntrue;
)
4.象棋的基础算法
4.1棋盘结构
首先,将板卡转换成位图格式的板卡,如图3和图4所示。(包括被称为“九宫”的“M”字盒的绘 画。)板的结构是二维阵列chArray[10][9]。首先对板进行初始化,初始数组chArray[10][9]=0。
然后初始化棋子,哪些棋子在棋子上的位置对应标签:黑棋:
chArray[0][0]=chArray[0][8]=1;
chArray[0][1]=chArray[0][7]=2; chArray[0][2]=chArray[0][6]=4;
chArray[0][3]=chArray[0][5]=5; chArray[0][4]=6//willbe
chArray[2][1]=chArray[2][7]=3; chArray[3][0]=chArray[3][2]=chArray[3][4]=chArray[3][6]=chArray[3][8]=7;
红棋:chArray[6][0]=chArray[6][2]=chArray[6][4]=chArray[6][6]=chArray[6][8]=7;
chArray[7][1]=chArray[7][3]=3;chArray[9][0]=chArray[9][8]=1;chArray[9][1]=chArray[9][7]=2;chArray[9][2]=chArray[9][6]=4;chArray[9][3]=chArray[9][5]=5;chArray[9][4]=6;
4.2棋子移动的策略
象棋规则
游戏中,由一方先走红角色,双方各走一圈,直到分出胜负,游戏
结束了。转到转把党到一块从一个交叉口到另一个交叉口,或吃对方的碎片和占领他们的交口,被认为是有意义的走。双方各打一回合。当一方攻击另一方的帅片(要被),而一个必须在 下一个吃掉它,称为“按”或简称“将”。“按”不必申报。被“按”党必须立即“应”,即用自己的法律来解决是“意志”状态。如果是,“依”而不是“应”,就算是“死”[9]。 各种动作 帅(待):帅和将是棋手,目标是双方力争一决高下。他们无论如何只能去,出了外面的九宫。
士(仕):士(仕)是一个英俊的侍卫,它只能在九宫活动。只能是一行棋路宫内切割九刀。相(象):相(象)的主要作用是防御,保护他们的指挥官。每次都是在角上穿行就拿这两种细胞系来说,俗称“像行走的田野”。
车:国际象棋中最有力的车,无论横、竖都能走,只要无子挡,步数不限。 因此,一辆车可以控制17个点。
炮:枪在不吃子时和车完全一样。但是,如果你想吃子,就在子之间吃吧 必须分开和只有一个棋子。俗称“枪架”或“枪战格子”。
马:马一直在移动的方式是一条坡道,这条坡道是横着走直的,或者是一个格子,然后横着走一条对角线俗称“马走日”。
兵(卒):兵(卒)的棋线规则是中国国际象棋中最复杂的。并(死)入行棋规则两种情况:一是棋子未过河界;另一个是隔江边界的片断。于是士兵(和死亡)的线棋算法来确定何时第一个没有过河的世界。此外,士兵(和死亡)只能移动一格,士兵(和死亡)不能回头。
5.客户端和服务器的交流
由于设计的是网络游戏,是基于客户机服务器的模型,所以最重要的是如何掌握服务器之间的通信,即双机通信。本程序用于实现双套接字套接字通信。这个部分包含两个:服务器客户端块 和块,每个线程一个。在设计中对应于ChessServer类和ChessClient类。当你点击菜单“游戏”项,开始游戏。当您选择“身份”“银行家”时,使用一个服务器块,等待对方的连接;当您点击“身份”的菜单选择时“挑战者”项,使用一个客户端阻拦,与对方联系。服务器端与客户端的TCP socket连接是利用网络连接来实现的,但服务器端与客户端之间能否进行良好的通信,发送各种命令和请求的能力都依赖于服务器与客户端之间通信的数据结构和通信协议。 通信数据结构
服务器端和客户端通信使用特定的数据结构进行通信,首先需要定义一个数据结构类型。并存
储在ChessArray类中。File语句定义如下: publicstaticbooleansORc;
publicstaticbooleanco
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[261076],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。