"景先生毕设|www.jxszl.com

中国象棋网络游戏开发与设计(源码)

2021-01-17 12:24编辑: www.jxszl.com景先生毕设
摘要:互联网的发展,电子游戏开始兴起,传统的一些娱乐游戏受到了冲击。因此设法将传统的游戏,开发设计然呈现在互联网上,提供给玩家就变得很有意义。本次设计就是基于这样的思路,首先介绍了中国象棋游戏在国内外的发展状况,其次介绍了象棋游戏设计的开发平台和所选用的开发语言的特点。最后是软件设计的结构部分,从游戏规则,游戏的用户交互,客户端与服务端的通信,多线程机制,功能模块的基本分析,以及对所选用的c/s架构利弊的分析。关键字:中国象棋;java;多线程thread;socket通信;Chinese chess online game development and designStudent majoring in computer science and technology ZHANG Dan-dong Tutor XIE Yuan-chengAbstract:The development of the Internet, and video games began to rise, the traditional game hit some entertainment. So try to traditional games, development and design however appear on the Internet, to provide players becomes very meaningful. This design is based on the idea, first introduced the Chinese chess game development status at home and abroad, secondly introduces the design of chess game development platform and chooses the characteristics of the development of language. Finally is the structure of the software design part, from the rules of the game, the client and server
 

 *51今日免费论文网|www.jxszl.com +Q: 3 5 1 9 1 6 0 7 2 
communication, multithreading mechanism, function module of fundamental analysis, and chooses the analysis of the advantages and disadvantages of c/s architecture. 电子游戏发展至今,已有30多年的历史。其中棋类游戏发展成果斐然,如五子棋,围棋,跳棋,飞行棋,斗兽棋,中国象棋等有很大的发展。国际象棋对弈软件“深蓝”更是击败卡斯帕罗夫,这曾一度引起轰动[1]。与国际象棋相比较中国象棋软件的发展和成熟要晚一点,但是中国象棋软件也是取得了不错的发展。中山大学研究生涂志坚的纵马奔流象棋软件在2003年奥林匹克大赛中获得冠军,获得第二的是谢谢大师象棋软件,这些软件取得成绩代表了当时象棋发展的最高水平。后面的旋风和天机这两款优秀的象棋优秀软件,也显示了象棋游戏取得的惊人发展[2]。随着互联网的不断高速的发展,中国的棋类游戏走向了世界各地,这样会有更多的优秀的人才会将精力投入进来,棋类游戏会取得更大的发展。1.选题背景1.1 问题的提出棋类游戏是中国的传统益智类游戏,然而伴随着社会的不断的发展,生活,工作节奏的加快,已经很难看到大众聚集在一起,来进行棋类游戏的对战了。与此同时互联网技术的发展也是日新月异,电子游戏也因此应运而生,并得到了很大的发展,因此借助于互联网平台,以及运用现代化的技术,设计开发出一款满足大众需求的棋类的游戏,是一件越来越迫切的事情[3]。 很多传统的东西面临这很大的冲击,形式很严峻,但同时也是机遇,关键是我们如何利用好它。因此我们按照中国象棋的规则模式开发一款象棋游戏软件,那么它也会借助于互联网这条道路走的更远,让越来越多的国内外朋友接受它,喜欢上它[4]。国内外研究状况1.2.1 国外研究状况国外对棋类游戏的研究已经很早就开始了,如国际象棋。游戏是一种电脑和人,或者人和人之间的互相对抗的活动。提起电脑与人对抗,最著名的是国际象棋对弈软件的“人机大战”,特别是以1997年“深蓝”击败卡斯帕罗夫这次“人机大战”最为出名。目前在众多的棋类游戏中,只有国际象棋对弈程序在超级计算机的协助下,已经到达了可以与最强棋手对抗的地步,其他类棋类项目的对弈程序还未达到这一水平[5]。主要针对棋类游戏算法的研究,已经是百花齐放,各个国家的研究也是放异彩纷呈,如由日本人开发的zen(天顶围棋)围棋软件,在围棋领域里面,打败优秀的人脑。这曾经一度让围棋界的职业选手一阵紧张[6]。1.2.2 国内研究状况中国象棋软件的发展和成熟,比国际象棋要晚一点。中山大学研究生涂志坚的纵马奔流象棋软件在2003年奥林匹克大赛中获得冠军,获得第二的是谢谢大师象棋软件,这些软件取得成绩代表了当时象棋发展的最高水平。后续随着计算机多核cpu的出现,以及其他硬件的发展,象棋软件也有了很大的发展,在2007年全国的棋软大赛中,旋风和天机这两款优秀的象棋优秀软件,脱颖而出,分别获得了冠军和亚军的成绩[7]。 然而中国象棋处境非常尴尬。近几年举办的象棋各种比赛项目,常常是无人问津,很多省的象棋队也是慢慢的解散了,于此同时一些优秀的象棋选手,也不得不,投奔它省的象棋队,还有的象棋选手改行从事其他工作了。 在其它棋类中,情况也不是很乐观,围棋近几年在中日韩三个国家比较盛行,当然这三个国家的围棋水平也是比较高的。中国是中国围棋的发源地,但在近代围棋发展却止步不前,在上世纪50年代,曾有一位来访的日本五段女棋手,横扫当时中国的顶尖高手,另中国围棋颜面扫地。不过,在最近30年,中国围棋发展迅速,从聂卫平,马晓春到常昊,胡耀宇,邱峻,丁伟,中国棋手的实力不断加强,中国的围棋人口也不短增多。原因是很多的,一方面,国家不是很重视,还有就是传统文化受到了外来文化的冲击,导致新一代的青年没能很好的继承,另一方面随着互联网技术的快速发展,人们被越来越快越来越多的的网络信息所包裹,人们有了其他的娱乐项目,已经无暇来体验我们传统的象棋。在目前较多的棋类游戏软件中,已经有了的是腾讯象棋,jj象棋,象棋巫师,等游戏软件,腾讯象棋和jj象棋是网络对战模式,尽管各种象棋都有了一定的研究和发展,但是中国象棋电子版,还是出于萌芽状态,棋盘类游戏将向多平台,智能化发展。于此同时,围棋,五子棋,六子冲,对角棋,八卦棋,军棋,飞行棋,斗兽棋,军棋,四国战棋游戏也有了很大的发展。在围棋当中如:日月围棋,智能围棋,茶语围棋等等。在五子棋当中:有彩色连珠,多彩宝石连珠,五彩连珠,以及以五子棋衍生出来的水果四子棋,元素三子棋,七彩连珠等。军旗里面有:军旗陆战棋,天天军旗,暗棋版军旗等。飞行棋有:家事飞行棋,蛇梯飞行棋等也有了很大发展。1.3 研究的目的和内容根据自己在大学期间所学的编程知识,以及软件工程知识,利用java面向对象语言设计开发出一款面向网络对战的象棋游戏,该游戏对所有玩家免费,你可以自己随意的在匹配玩家,进行象棋游戏对战。玩家众多。象棋的玩家从四五岁的小孩到,八十多岁的老人,都在玩象棋。该款游戏它有广大的玩家。因此开发出了中国象棋游戏后,不会怕没有玩家。利用电脑更加方便快捷。传统的象棋,玩家在玩的时候,需要使用木质的或者石质的棋子,还需要去弄棋盘,还有这种传统的象棋携带不是很方便,我们无法走到哪里就带到哪里,然而可以发现,随着社会发展,计算机的普及,几乎是人手一台微型计算机,无论是走哪里带到哪里,这就为游戏软件的进一步发展提供了土壤,我们可以在上班途中的公交车上,旅游途中,休息时刻都是可以玩的。象棋软件游戏,可以让你不用在为没有玩伴而发愁,你随时随地,打破了时间上与空间上对你玩象棋游戏的限制。因为它是一个益智类游戏,可以进行激烈的竞技比赛。青年团体或者社会组合可以多举办几场象棋大赛,吸引更多的人来关注这一个领域。商人可以一在这里面寻找商机,转化为经济效益。为了更好地发挥共享效果,提高象棋游戏效率和种质资源利用率,共享象棋游戏的设计原则为:简洁实用原则。游戏界面设计简洁,漂亮美观,充分考虑到用户的需求以及玩家的年龄层次,因此设计的象棋游戏操作简单,同时也考虑到系统响应中的延迟问题,所以呈现给用户的是一个设计合理合情,很具有人性化的一款游戏。 合理优化原则。在整个游戏设计的过程中,采取更加合理的结构化的框架设计,减少了代码的冗余,与此同时也是多出采用代码复用,一定程度上减少了代码的书写。各个模块优良的封装设计,降低了各模块的耦合度,符合软件开发的原则。尽可能的采取的是简单,高效,占用较少的物理资源,并确保软件安全,高效,稳定的运行。 适应性和可扩展性原则。系统平台具有灵活性和适应性,未来能根据玩家的需求不断改进结构、增加内容,适应更多玩家的游戏需求,可扩展性良好,也能结合社会的发展,增加一些更加人性化,更加符合社会潮流的元素,来满足大众玩家的生活方式,和审美情趣。2 开发平台及应用技术2.1 开发平台介绍2.2 开发语言介绍本次软件开发使用的语言全部是Java面向对象语言,Java面向对象开发语言具有较多特点,这一优势使得Java语言很受软件开发者们的青睐。[9]2.2.1 java语言的特点一:简单、高效     Java语言与C++类似,如果用户了解C++和面向对象的概念,就可以很快编写出Java程序;此外,Java又不同于诸如C++语言提供的各种各样的方法,它只提供了基本的方法,这样就减少了编程的复杂性,例如去掉了头文件、指针变量、结构、运算符重载、多重继承等复杂特性。Java语言虽然简单,却很高效,它可以用面向对象的方法来描述用户的每一个动作。2.2.2 Java语言的特点二:面向对象     Java语言是一种新的面向对象的程序设计语言,它除了几种基本的数据类型外,大都是类似c++中的对象和方法,程序代码大多体现了类机制,以类的形式组织,由类来定义对象的各种行为。Java同样支持类继承,这样也减少了程序设计的复杂性。2.2.3 Java语言的特点三:平台无关性      Java语言经编译后生成与计算机硬件结构无关的字节代码(Bytecode),这些字节代码被定义为不依赖任何硬件平台和操作系统。当Java程序在运行时,需要由一个解释程序对生成的字节代码解释执行。这体现了Java语言的与平台无关性,使得Java程序可以在任何平台上运行,如MS-DOS, Windows,Unix等,因此具有很强的移植性。2.2.4 Java语言的特点四:交互式特性      Java是面向对象的网络编程语言,由于它支持TCP/IP协议,使得用户可以通过浏览器访问到Internet上的各种动态对象。并且在网络上用户可以交互式地进行各种动作,而多线程技术的引入使得这种交互式操作更为容易。2.2.5 Java语言的特点五:多线程机制    Java语言支持多线程机制,多线程机制使得Java程序能够并行处理多项任务。Java程序可以设计成具有多个线程,例如让一个线程负责数据的检索、查寻,另一个线程与用户进行交互,这样,两个线程得以并行执行。多线程机制可以很容易地实现网络上的交互式操作。2.2.6  Java语言的特点六:动态的内存管理机制[10]     Java语言采用了自动垃圾回收机制进行内存的管理。在C++语言中,程序员在编写程序时要仔细地处理内存的使用,例如当某个内存快使用完毕时,要及时释放,以供其它程序使用,一旦内存管理不当,就有可能造成内存空间浪费或程序运行故障。 在Java系统中包括了一个自动垃圾回收程序,它可以自动、安全地回收不再使用的内存块,这样,程序员在编程时就无需担心内存的管理问题,从而使Java程序的编写变得简单,同时也减少了内存管理方面出错的可能性。2.2.7 Java语言的特点七:安全性    在类似Internet的这种分布式网络环境中,安全性是个不容忽视的问题。Java语言在安全性方面引入了实时内存分配及布局来防止程序员直接修改物理内存布局;通过字节代码验证器对字节代码的检验,以防止网络病毒及其它非法代码侵入。此外,Java语言还采用了许多面向对象的异常处理机制,负责对一些异常事件进行处理,如内存空间不够,程序异常中止等的处理。3 设计方法与原理3.1 基础设计3.1.1 棋盘和棋子 棋盘:也就是所有棋子的活动区域,在长方形的平面上,绘有九条平行的竖线和十条平行的横线相交组成,共九十个交叉点,棋子就摆在这些交叉点上。中间第五、第六两横线之间未画竖线的空白地带,称为"楚河汉界",整个棋盘就以"楚河汉界"分为相等的两部分;两方将帅、画有"米"字方格的地方,叫做"九宫"。[11]棋子:对战双方各有16个棋子,可以称他们为红方玩家和黑方玩家。红方:炮(2),马(2),车(2),象(2),兵(5),士(2),将(1);黑方:炮(2),马(2),车(2),象(2),卒(5),士(2),帅(1);当然双方的棋子用不同的颜色显示,以便区别开来。3.1.2 走棋[12] 1) 兵和卒。这两种棋子,在没有过河界之前,只能往前走,不能往后,而在过了河界之后,可以往前,往左,往右随便行走,且每次只能走一个格子。 2) 马和馬。走的是“日”字的对角线,若在对角线处有和自己同色的棋子时不能走,在要移动的棋子相邻的中间点出若有棋子也不能走,俗称为“绊脚”。 3) 车和車。是沿着直线走的,也可以在直线范围内走多步。当然前方若有同色的棋子,则会挡路。 4) 象和相,不可以过河界,只能在自家的区域里面走,象走的是“田”形的路线,也是走对角线,如果在自己要走的“田”字的中心处有棋子(同色与不同色),也是不能走的,也视其为“绊脚”。 5) 士和仕。只能在自家的“米”字形的路线,也只能沿着对角线行走,但是每次只可以行走对角线的一半,当然若有同色棋子,则无法移动。 6) 帅和將,和士类似,也只能在规定的“米”字方格里面走,但是它走的是直线,不能走曲线,且每次也是只能走一步。 7) 炮和砲,直线行走,可以一次行走多不,若行走路线上有棋子(包括同色和不同色的),会被挡住。 基本上各个棋子都是延续了传统象棋的走棋方式,只是将其传统的游戏方式放在了电脑上了。3.1.3 吃子对于棋盘中的每一个棋子都可以吃掉对方的棋子,但前提条件是对方的棋子恰好在你要行走的路线处且该轮到你走棋。 砲和炮在吃子时,必须与被吃的棋子之间隔了一个棋子,才可以吃对面的棋子,俗称为“炮翻山吃子”。而其他的棋子只要符合它的移动规则,且该轮到你走棋,那么你可以吃掉,放在你的棋子移动范围内的对面的任何棋子[13]。3.1.4 胜负规则 一方的棋子攻击对方的帅(将),并在下次走棋时可以吃掉对方的帅(将),称为"将军",或简称"将"。被"将军"的一方可以立即对此做出回应,即用自卫的着法去化解被"将"的状态。如果被"将军"而无法"应将",就算被"将死"。轮到走棋的一方,帅(将)虽没被对方"军",却被禁在一个位置上无路可走,同时己方已经没有了其它棋子或者其它棋子也都不能走动,就算被"困"。 在两者不停的“将”的过程中,最后那方最先吃掉了对方的将或者帅,则那方获得胜利。结束本次的对战,玩家可以重新再对战,一切的棋子又得到初始化,又可以再来一局新的游戏。3.2 详细功能实现3.2.1 棋子 棋子类,是对整个象棋游戏中的棋子的抽象提取,并将棋子的各种属性进行简单封装,棋子的属性主要包括:颜色,名称,横坐标,纵坐标,选中状态,5个属性;封装的方法主要是用来设置和提取棋子的属性的get和set方法。下面是封装了棋子各种属性与方法的类的代码结构[14]:public class Qizi//这个类封装了棋子的各种属性{ private Color color_qizi;//颜色 private String name_qizi;//名称,代表什么棋 private int x_qizi;//它所在的x方向位置 private int y_qizi;//它所在的y方向位置 private boolean focus=false;//是否被选中 public Qizi(Color color,String name,int x,int y)//构造器 { color_qizi=color; name_qizi=name; x_qizi=x; y_qizi=y; this.focus=false; }........................................当然还有一些真多棋子的不同属性的set()和get()方法。}3.2.2 棋盘 在棋盘类中主要方法中,paint(g)方法主要实现了对整个棋盘格子的绘画,和棋子的绘制(当然这里调用了棋子类);mouseClicked(e)方法实现了对棋子的单击时的响应,来判断棋子是否可以移动;getX_Y(i,j)该方法主要是用来获取鼠标单击时,事件触发点的坐标,以此坐标来完成棋子的行为;noFocuse(i,j)主要是来判断棋子的是否被选中;chizi()方法完成了将“军”,来获取胜利;move(i1,j1,i2,j2)方法完成了棋子在棋盘的移动,以及吃掉对手的棋子;line_flag(g,i,j)方法主要完成了对棋盘中一些特殊位置的绘制,如“炮”,“砲”,“象”,“相”摆放位置的绘制。下面是棋盘类中的一些主要函数的名称[15]:void paint(Graphics g1);//主要完成对棋盘中线条及棋子的完成void mouseClicked (MouseEvent e);//选择移动该棋子int[] getX_Y (MouseEvent e);//获得棋盘中发生该事件的具体坐标,在棋子数组中 的坐标。void noFocus(int i,int j);//用于选定棋子的,以及锁定棋子在棋盘中的真实坐标。void chizi();//吃子,吃掉对手的某一个棋子,包括对手的“将”void move(int startI,int startJ,int endI,int endJ);//移动棋子;void line_flag(Graphics2D g,int i,int j);//该函数主要是实现了对棋盘中一些特 殊的标志位置的绘制3.2.3 规则设定 规则设定就是对棋盘中的所有的棋子的移动做出一个限制,在走棋时以便于判断棋子是否走在 class Controller_qizi{// 该类封装了对棋子移动的位置的判断boolean move_bool()//用他的返回值作为标志void che(starti,startj,endi,endj)//用来对車的行走路线做出判断Void ma (maxi,maxj,mini,minj,starti,startj,endi,endj)//对馬的行走路线做出判断...........void zu(maxI,minI,maxJ,minJ,startI,startJ,endI,endJ)//对卒的行走路线做出判断........... }[16]3.2.4 网络通信这一块我使用的是基于c/s架构的客户端服务端的应用程序。因此用到了socket通信相关的知识[17]:在服务端:分为两种多线程,分别是主线程和一个辅助线程。如:主线程:主要完成对登录进去的新玩家进行管理控制,它的run()方法如下:Run(){ServerSocket ss=new ServerSocket(端口号);//创建服务端 的套接字 Socket sc=ss.accept();//等待客户端连接 Server_xiangying_thread sx=new Server_xiangying_thread(sc,Server_start)//主要是启用辅助线程,完成对 该玩家各种各种操作的响应Sx.start()//启动该线程. }辅助线程:主要是对已经登录的玩家的各种操作,做出响应。辅助线程是server_xiangying_thread类的构造函数介绍:Server_xiangying_thread(ss,sc){ This.sc=sc;//ServerSocket对象属性 This.ss=ss;//服务端的对象属性 din=new DataInputStream(sc.getInputStream());//创建数据 输入流 dout=new DataOutputStream(sc.getOutputStream());//创建数据输出流 }它的run()方法如下[18]:Run(){String msg=din.readUTF().trim();//接收客户端传来的信息这个run方法中 主要是对客户端的各种请求做出相应,如:if(msg.startsWith("<#INFOMATION#>")){//对聊天的内容聊天的内容 this.talk(msg);//在talk函数中实现了将该聊天信息“msg” 转发给另一个客户端的程序; }}Talk(){//talk方法简单介绍Server_xiangying_threadsatTemp=(Server_xiangying_thread)v.get(i);// 主要是 实现一个传递该消息的辅助线程 if(satTemp.getName().equals(name)){//将该信息转发给接收方 satTemp.dout.writeUTF("<#INFOMATION#>"+mm);}在客户端:Socket sc=new Socket(IP地址,端口号);客户端的构造函数介绍[19]:Client_thread(xiangqi){This.xaingqi=xiangqi;//属性是象棋客户端主类的对象din=new DataInputStream(xiangqi.sc.getInputStream());//创建数据输入流对象dout=new DataOutputStream(xiangqi.sc.getOutputStream());//创建数据输 出流对象 String name=xiangqi.nick_name;//获得昵称 dout.writeUTF("<#NICK_NAME#>"+name);//发送昵称到服务器 }主要run()方法简单介绍:Run(){String msg=din.readUTF().trim();//获得服务器发来的信息if(msg.startsWith("<#TIAO_ZHAN#>")){//当收到挑战的信息 this.tiao_zhan(msg); } }Tiaozhan (){//对挑战函数简单介绍If(接受) 开始游戏;Else(拒绝) this.dout.writeUTF("<#BUSY#>"+name); }3.3 工作原理 1) 对于网络上的任意玩家,在开始游戏之前,必须共同连在互联网上,或者局域网里。 2) 两个要互相对抗的玩家,需要连接同一个服务端,才可以互相对弈。只有一个玩家不得开始游戏,需要向其他玩家发出挑战并获得同意后,游戏方能够开始。 3) 在有玩家对弈的时间内,其他玩家不得与这连个玩家进行对弈,直到游戏结束,有玩家退出,此时才可以邀请玩家游戏。3.4 基本功能图示3.4.1 网络对战 网络对战中国象棋游戏基本工作原理图(如图1-1):通过该图可以看到两个对弈的玩家在电脑前操作两个象棋客户端软件。而要完成两个玩家的对弈,需要将这两个客户端连接在同一个网络里面,与此同时需要启动服务端,并且这两个客户端也必须连接到这个服务端上。这样在对战当中,由服务端负责完成对各个客户端对弈详情的信息交互。因为此次设计使用的是多线程机制,因此可以有多个玩家连接到服务端,来寻找玩家进行对弈游戏。[20] 图 1-1 基本工作原理图3.4.2 类之间的简单关系 简单类图(如图:1-2),主要是将抽象的服务端,客户端具体化到每一个类,每一个类来都实现了一个最基本的功能。 Server_start类是服务端的主类,主要完成了对其它类的调用,与其它类一起实现了服务端的全部功能;Help类主要继承了dialog类,实现了一个弹出框,用来显示一些信息,帮助新手,完成对服务端的基本操作,方便与玩家迅速进入到游戏当中;IP_shezhi类也是以一个弹出框的形式,实现了玩家对服务端的IP地址的手动配置;port_shezhi类,和IP_shezhi类,一样,是为了配置端口号;server_thread类是服务端的主线程,完成对客户端连接到服务端的玩家的监测,而server_xiangying_thread类是一个辅助线程,每当有一个玩家连接到服务端,需要进行各种操作时,主线程类都会调用这个辅助线程类来产生一个线程来响应客户端的各种操作。 Client_start类是客户端的主类,主要是完成了对其它类的调用和,以及客户端的整个棋盘棋子的界面显示;connect_start类也是继承了dialog类,一个弹出框,用来对客户端的IP地址和端口号进行修改,nick_name类与connect_start类类似,主要是完成玩家对自己在游戏当中的名称的设置,help也类似与connect_类完成对新手的基本操作的帮助;music_control类主要是完成对背景音乐的播放控制;font_qizi类是一个改变字体的类,本次设计用的是华文楷体;Qizi类主要是抽象封住了每一个棋子的属性,以及获得这些属性的方法。Control_qizi类主要是完成了对每一个棋子的行走路线的判断与限定;client_thread类实现了对服务端的接收,以及客户端信息的发送。Server_start类和client_start类中都包括了main方法,当将客户端与服务端,连接到同一个网络后,启动Server_start和client_start,客户端连接到服务端后,就可以寻找玩家进行对弈。 图1-2 简单类图3.4.3 基本功能 基本功能图(如图1-3),主要是在服务端的基本操作的一些按钮以及菜单项,操作这些来修改服务端的参数信息,以便客户端来连接。 图1-3 服务端功能图 客户端功能图(如图1-4),客户端上设置了客户可以操作的一些菜单项,按钮等一些信息,玩家可以在这里做出初始的设置,连接到服务端就可以寻找玩家进项对弈了。图1-4 客户端功能图3.4.4 客户线程与服务线程交互 客户端与服务端是一个复杂的过程,可以用图(如图:1-5)来分析:客户端只有一个线程,用来接收自于服务端的消息,和传递客户端的消息;服务端有两个线程,一个是主线程,主要是用来接收来自于客户端连接到服务端的信息,一旦该客户端连接到服务端,则主线程就为该客户端产生一个辅助线程,用来完成该玩家在后续的各种操作中的信息。[21] 结合图来分析,当有客户端线程(新玩家)连接到服务端时服务端主线程接受到消息后,并将此玩家的信息发送给所有的在线的客户端线程(在线玩家),与此同时服务端主线程,马上为该玩家产生一个辅助线程(代理线程),这个辅助线程的作用可以举例如下:当有两个以上玩家在线时,在线玩家即可以邀请一个玩家和自己游戏,此时客户端线程A向客户端线程B发出挑战请求,辅助线程接收到该请求信息,并将该请求信息发送给被挑战的客户端线程B,该客户端线程B在接受到该信息后,等玩家对其做出处理,接受,拒绝等,然后又由该客户端线程B将反应信息传出,然后又由该代理线程将该信息转发给发出挑战的客户端线程A,以此,往复代理线程在这里解决了玩家之间信息的传递。[22] 图 1-5 客户端与服务端简单线程交互图3.4.5 客户端界面 在界面的主体中(如图:1-6),左边部分主要是象棋主要部分,用来显示棋盘以及棋子,而在菜单栏上是一些基本的操作部分,在界面的右边区域,主要是一部分按钮,和一个聊天区域,玩家在对弈时,也可以和对手进行一些语言交流,互相探讨,增加对弈的趣味性[23]。 图 1-6 游戏主界面图4 软件架构分析4.1 C/S结构的优点 C/S架构的尽管现在一定程度上,已经不是软件开发的主流架构了,但是它曾经的应用却是非常广的,这与它自身的优势也是分不开的,它的优点是能够最大程度的发挥安装了客户端的个人电脑的处理能力,将很多内容在客户端做出一个良好的处理后再转交给服务端,这就在很大程度上缓解了服务端的压力。一般而言,c/s体系架构有以下两大特点: 1)应用服务器运行数据负荷较轻。最简单的C/S体系结构的数据库应用程序一般是由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。4.2 C/S结构的局限性 1)客户端工作量大伴随着互联网的迅猛发展,分布式办公和移动办公被广大的用户所接受,基于这种需求,就要求我么的系统或者说软件必须得具有可扩展性。 2)对客户端的操作系统会有限制传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高, 效率低。可能适应于Win98, 但不能win2000Windows XP。或者不适用于微软新的操作系统等等,更不用说Linux、Unix等。目前,大多数客户端都适应win XP系统,但对微软新的操作系统或其他开发系统就兼用不了。 3)C/S架构的劣势还有高昂的维护成本且投资大 采用C/S架构,要选择适当的数据库平台来实现数据库数据的真正“统一”,使分布于两地的数据同步完全交由数据库系统去管理,但逻辑上两地的操作者要直接访问同一个数据库才能有效实现,有这样一些问题,如果需要建立“实时”的数据同步,就必须在两地间建立实时的通讯连接,保持两地的数据库服务器在线运行,网络管理工作人员既要对服务器维护管理,又要对客户端维护和管理,这需要高昂的投资和复杂的技术支持,维护成本很高,维护任务量大。 5 个人总结 毕业设计的开始,伴随着的是我的大学生活的结束,是的毕业设计应该也就是我的大学生涯最后一门考试了吧!从小学开始就对大学生活抱有一种幻想,想象着美好的一切,想象着自己可以在那个美丽的象牙塔里,学到很多的知识,想象着自己可以在那个美丽的地方经历很多,体验很多,是一件多么令人感到开心的事情。但是每当回想起自己的大学这几年的经历,总是会有一种恍惚的感觉,感觉时间过的真快,自己当初设想太多,还没有去好好经历,这一切就要结束了。也许这就是大四毕业生的通病吧! 去经受大学最后的一次考验,去尽自己的最大的努力去认认真真的完成自己的最后一次作业。谈谈我对毕业设计的理解吧,在我看来毕设是对每一个学生大学几年学习状况的一个简单的检验,也可以说是对你自身的学习能力的一种考验,无论是什么,它都是考验你对自己所学领域的一次考察。 谈谈本次我的选题的初衷吧!我的题目是“基于Java的中国象棋游戏的设计与开发”,首先说说我为什么会选这个作为自己的毕业设计的题目吧!坦白而言,小时候我接触的游戏并不是很多,玩具似乎记忆中也没有,而我可能接触比较多的就是,和小伙伴们玩象棋了吧!所以象棋在我儿时就留下了很深的印象,我在大二学习了一些编程语言后,就有过去开发一款象棋游戏的想法,但是基于自己当时的编程能力不是很好,所以这个想法也就一直搁浅了。所以本次课程设计选题时,我就不加思索的选了它,这也算是圆我儿时的一个梦想吧!再说说我为什么会选用Java语言呢,首先对我而言,我是比较喜欢Java这门开发语言的(当然为什么开发语言这么多,我独喜欢Java语言,这在Java语言的特点中曾经谈到过),当然最近几年,市场上,这门语言也是比较流行的。最后基于以上两大原因我确定了我的毕设的主题,并且最后依然决然的去选择做中国象棋游戏了。 在整个开发的过程中曾经遇到过很多的问题,这些问题也曾一度考验着我的信心,与继续做下去的勇气,但是一次次的沮丧之后,最后都挺过来了。这就是一种历练,这就是一种成长吧。与此同时,我也有点错误的预估了我的时间,导致最后完成毕设的时间有点紧张,甚至在五一假期这么好的日子里,还在赶报告,想想也有点不应该啊!以后无论是在学习,还是工作中,都应该有一个更加合理的规划,使得自己的安排与计划,能够更加有效准时的完成。致谢参考文献:[1]:于振玺,齐江华.地方性网络棋牌游戏发展初探[J].电影评价,2013,11:111-112.[2]:靖亮 .中国网络游戏发展现状浅析《大众文艺》[J].2013,19:2-4.[3]: 刘善承.中国围棋史[M],成都时代出版社,56-57.[4]: 顾晓艳,李景繁,徐辉. 非物质文化遗产视角下水族民间棋类游戏的研究[J]. 贵州大学学报(社会科学版),2011,06:140-143.[5]: S Cracraft. Bitmap Move Generation in Chess[J].Journal of the International Computer Chess Asscciation,1984,7(3):146-153.[6]: Ernst A Heinz. Adaptive null move pruning[J].ICGA Journal,2004,22(3):123-132[7] :王晓鹏,王骄,徐心和,郑新颖. 中国象棋与国际象棋比较分析[J]. 重庆工学院学报(自然科学版),2007,01:71-76.[8]:方美琪.《软件开发工具》[M],经济科学出版社,12-34.[9]:张学习、连爽 一种新的J2ME平台下的战棋类游戏设计与实现[D] , 广东工业大学,2011:2-7.[10]:陈人杰.棋类对弈人工智能算法研究与国际象棋软件设计[D],上海:上海理工大学,2-3. [11] :方珍. 基于Android平台的中国象棋设计与实现[D].电子科技大学,2011. [12] :李兴华 .java开发实战经典[M], 清华大学出版社,12-19.[13]: 李刚 .疯狂java讲义[M] ,电子工业出版社,23-89[14]:兰红 王建雄 黄云.基于java Swing 的《中国象棋》游戏的设计与实现[M],12-49.[15]:王小春.PC游戏编程(人机博弈[M]. 重庆:重庆大学出版社,2002:50-58.[16]:《C+Buider程序设计—中国象棋》[M],胡达著,清华大学出版社,16-37.[17]:李赟.中国跳棋网络休闲游戏的设计与实现[D],北京:北京大学,2008:17-40[18]:吴兆定.棋牌游戏平台服务端的设计与实现[D],上海:上海交通大学, 2007:29-36.[19]:人杰、殷人昆、陶永雷 《实用软件工程(第二版)》[M],清华大学出版 ,23-57.[20]:李淑玲,张恒原.中国 象棋对弈软件[D],西安:西安欧亚学院,1-2.[21]:《JAVA2游戏程序设计》[M].荣钦科技, 2003.06:15-38.[22]:David Brackeen编著 .邱仲潘 翻译《JAVA游戏编程》[M],2004.06出版,56-69.[23]:Janes Swafford .《对其程序基本技术》[j] 位棋盘 (BitBoard),2008:1-2[24]:吉会云.基于J2ME的手机网络游戏的设计与开发[D],武汉:武汉理工大学,2008:4-28.
目录
摘要3
关键词3
Abstract3
Key words3
引言3
1选题背景4
1.1问题的提出4
1.2国内外研究状况4
1.2.1国外研究状况4
1.2.2国内研究状况4
1.3 研究的目的和内容 5
2 开发平台及应用技术5
2.1 开发平台介绍5
2.2 开发语言介绍6
3 设计方法与原理6
3.1 基础设计6
3.1.1棋盘和棋子6
3.1.2走棋7
3.1.3 吃子 7
3.1.4 胜负规则7
3.2 详细功能实现7
3.2.1 棋子7
3.2.2棋盘8
3.2.3 规则设定8
3.2.4 网络通信9
3.3工作原理10
3.4基本功能图示10
3.4.1网络对战10
3.4.2 类之间的简单关系11
3.4.3 基本功能12
3.4.4 客户线程与服务线程交互13
3.4.5客户端界面14
4 软件架构分析15
4.1 C/S结构的优点15
4.2 C/S结构的缺点16
5 个人总结16
致谢17
参考文献17
中国象棋网络游戏开发与设计
引言
引言

原文链接:http://www.jxszl.com/jsj/jsjkxyjs/44562.html