网络中国象棋设计学士学位论文.docx

上传人:b****8 文档编号:30679510 上传时间:2023-08-19 格式:DOCX 页数:111 大小:1.10MB
下载 相关 举报
网络中国象棋设计学士学位论文.docx_第1页
第1页 / 共111页
网络中国象棋设计学士学位论文.docx_第2页
第2页 / 共111页
网络中国象棋设计学士学位论文.docx_第3页
第3页 / 共111页
网络中国象棋设计学士学位论文.docx_第4页
第4页 / 共111页
网络中国象棋设计学士学位论文.docx_第5页
第5页 / 共111页
点击查看更多>>
下载资源
资源描述

网络中国象棋设计学士学位论文.docx

《网络中国象棋设计学士学位论文.docx》由会员分享,可在线阅读,更多相关《网络中国象棋设计学士学位论文.docx(111页珍藏版)》请在冰豆网上搜索。

网络中国象棋设计学士学位论文.docx

网络中国象棋设计学士学位论文

摘要

近年来,随着互联网的高速发展和普及,越来越多的人开始通过网络来休闲娱乐。

为了继承和发扬传统文化,使更多的人喜欢中国象棋这项传统的活动,本设计采用跨平台的Qt作为开发框架,以模块化的设计方法和面向对象的编程思想,通过设计合理的数据结构和网络通信方法,实现了有新建棋局、开始棋局、认输、悔棋、言和、交换红黑、显示和保存棋谱、复盘、网络对战和人机对战等众多功能的网络中国象棋游戏。

关键词:

中国象棋;网络对战;人机对战

 

ABSTRACT

Inrecentyears,withtherapiddevelopmentandpopularizationoftheInternet,moreandmorepeoplebegintospendtheirrecreationaltimeonline.InordertocarryforwardthetraditionalcultureandtomakemorepeopleenjoythetraditionalChinesechessgame,thisdesignusesthecross-platformQtasadevelopmentframework,withmodulardesignmethodandobject-orientedprogrammingideasthroughthereasonabledesignofdatastructureandnetworkcommunicationmethod,aChinesechessgamewhichcontainsanumberoffunctions,suchasthecreationofanewroundofchessgame,surrender,undo,peace-making,theexchangeofredandblackorientedpieces,thedisplayandsavingofchessmanuals,replays,multiplayeraswellassingleplayermodecanbematerialized.

Keywords:

Chinesechess;Networkwar;Man-machinewar

 

 

第一章绪论

1.1中国象棋简介

中国象棋历史悠久,关于它的起源由于资料不详,所以至今也没有一个统一的答案。

但可以确定的是在唐代已经基本成型,到宋代已基本和现代无异,到了明代把一方的“将”改名为“帅”,这和现代中国象棋就一样了。

中国象棋以前称作象棋或象戏等,至于现在前面为什么要加“中国”两字,只是为了和国际象棋区别开来。

中国象棋棋盘9纵10横共90个点,红方从右到左用汉字“一”到“九”表示,黑方另一端从右到左用数字“1”到“9”表示。

红、黑双方各有16个棋子,分别是一个帅(将)、两个士(仕)、两个相(象)、两个车、两个马、两个炮、5个兵(卒),其中括号内是黑方的不同文字表述,意思是一样的。

棋盘和棋子的详细情况如图1-1所示。

总的来说,中国象棋共有7种棋子,它们都有不同的走法。

对于将和帅来说,只能在九宫格内移动,每次只能沿直线走一步;对于士和仕来说,也只能在九宫格内移动,但每次只能沿斜线走一步;对于相和象来说,不允许过河,只能在己方范围沿斜线走两步,且中间不能有棋子阻挡;对于车来说,只要无棋子阻挡,上下左右沿直线随便走;对于马来说,走“日”字步,细分是先走长步,再走短步,若长步上有棋子阻挡,则不能走,俗称“蹩马腿”;对于炮来说,只能走直线,如果不是吃子,则和车的走法一致,否则需要和所吃棋子之间有且仅有一个棋子;对于兵和卒来说,每次只能沿直线走一步,未过界前只能前进,过界后可以平移和前进,但不能后退[1]。

正是这种各有不同且极为有趣的走法,极大地增加了中国象棋的趣味性。

对于中国象棋来说,要想获得最后的胜利,不能仅仅凭借所谓的运气。

因为棋子多样,走法多样,中国象棋极大地考验着下棋者的智商,技巧、策略等在中国象棋对战中必不可少。

正因为如此,它极大地锻炼着人们的大脑,让双方静下心来思考该怎样走。

中国象棋自古以来都是一种休闲娱乐的游戏。

古时就有许多人以下棋自娱自乐,并逐渐产生了“马后炮”、“弃车保帅”等许多歇后语和成语,足见中国象棋的影响力。

到了现代,中国象棋正式成为国家体育项目之一,每年都有一些全国大赛在举行,比如“全国象棋锦标赛”和“全国象棋等级赛”等。

伴随着这些大赛的举行,涌现出一大批热爱象棋并棋艺高超的个人。

其实还有许多人,他们并没有参加各种各样大赛,只是在茶余饭后下几盘棋自娱自乐,使生活变得不在那么无聊和寂寞。

中国象棋不仅在中国国内广受欢迎,在东亚和东南亚许多国家也有许多人爱好象棋。

在世界各地相继成立了一些象棋协会,教人们下象棋,并组织一些象棋赛事。

图11中国象棋

1.2项目背景和意义

象棋在中国拥有悠久的历史,有着丰厚的文化底蕴,从古至今都有很多人喜欢象棋,是千年来不断发展变化的一种休闲娱乐方式。

现代的中国象棋到宋代已基本成型,由于其益智、有趣、休闲,直到现在仍有许多象棋爱好者。

以前人们只能当面对战,可是到了信息化的今天,因为计算机的出现以及互联网的普及,通过网络进行对战就成为一种可能,更是一种新的潮流。

现在比较有名的软件就是QQ游戏中的“中国象棋”,它不仅提供了一个使千里之隔的两人能够下棋的平台,还增加了积分、等级、道具等功能,大大的增加了趣味性,使得下棋变得更方便有趣了。

另外,中国象棋是一项智力游戏,千年来都是人和人下棋,可是现在随着计算机技术高速发展的今天,人机对弈也成为可能。

如今就已经出现了各种各样的人机对弈象棋软件,它们各有各的优缺点。

比如“中国象棋大师”、“象棋旋风”和“象棋巫师”等有人机对战的功能。

计算机本不会自己独立思考,只能受控于人类,但是随着人工智能技术的不断进步,计算机也有了一定的“思考”能力,而这一技术也被广泛应用于各个领域,包括游戏方面。

因此,人机对弈也就成了当今象棋软件的发展趋势。

当前在象棋人机对弈这一方面比较有名的算法有最大最小搜索算法、Alpha-Beta搜索算法、静态搜索算法等[2]。

现在用许多中国象棋引擎可用,比如ElephantEye、ANITA等。

引擎和界面之间的协议是中国象棋通用引擎协议(UniversalChineseChessProtocol,简称UCCI),通过这个协议界面和引擎之间就可以通信[3]。

现在有许多人致力于象棋引擎算法的研究。

当今社会已经离不开互联网了,它几乎无处不在,是现代社会近几十年的产物;而象棋则有千年历史,是传统文化的结晶。

网络象棋就把传统和现代两者结合在一起了,使我们能够通过现代技术来体验古人对弈的乐趣,使得传统文化得到继承和发扬,吸引更多人投入到这项运动中来。

1.3主要问题和关键技术

1.3.1主要问题

这个课题的最终目标就是完成一个具有网络对战功能的中国象棋游戏软件,并要求其界面要美观友好,交互性强,操作简单。

为了完成这一任务,需要解决以下主要问题:

第一,要了解中国象棋的规则,知道怎么下象棋,象棋的每种棋子走法,怎么判断输赢,知道了这些才会知道该去做什么以及该怎么去做;

第二,数据要存储为哪种格式,怎么交换数据,怎么通过网络传递数据,这是整个设计的基础;

第三,怎么进行交互,两个人怎么通过网络可以协调的玩游戏;

第四,悔棋、认输、言和、交换、棋谱、复盘等功能要如何处理,如何处理它们之间的关系,这些都需要清晰的数据结构和程序逻辑;

第五,人机对战要如何实现,机器AI(人工智能)要怎么做,如何协调它与网络对战之间的关系等。

1.3.2关键技术

(1)编程语言采用C++语言。

一方面C++语言是自己熟悉的编程语言,另一方面C++语言也适合这个课题,因其面向对象的思想和封装的特点正是本课题所需要的。

(2)图形界面采用Qt编写。

Qt是一个跨平台的图形界面开发库,支持Windows、Linux、MacOS等许多的操作系统。

Qt以GPL、LGPL和商业协议三种协议同时授权,正是由于这种开放性,Qt不断发展壮大,功能越来越多,支持的操作系统也越来越多,特别是加大了对嵌入式平台的支持,现在已经支持WindowsCE、Symbian、Maemo5等平台,并且在将在今年发布的Qt5中添加对IOS和Android平台的预览支持[4]。

(3)网络通信采用TCP协议。

因为要实现网络对战功能,所以必须要通过网络传递和交换数据。

对于本课题而言,传送的数据量少,并对可靠性有要求,因而选择TCP协议比较合适。

(4)通信采用网络连接的通信方式。

鉴于网络对战只需两方进行通信,故双方直接进行通信,一方建立服务器,另一方进行连接即可,不需要额外的资源。

1.4开发平台和工具

(1)操作系统:

Windows7,32位。

(2)编译器:

MicrosoftVisualStudio2010。

(3)开发工具:

QtCreator2.7.0。

(4)运行环境:

WindowsXP以及更高版本Windows。

第二章需求分析

2.1.总体功能划分

系统的功能划分如图2-1所示。

图2-1系统功能划分

2.2系统提示功能

这个功能用于在界面上显示一些系统提示信息,用于提示用户。

这些提示信息包括一下几个方面。

(1)刚进入游戏时系统的欢迎信息;

(2)认输、悔棋、言和、交换等提示信息;

(3)赢、输、和的提示信息;

(4)网络连接状态的提示信息;

(5)聊天信息发送失败的提示信息。

这些提示信息可以方便用户了解当前的一些状况,使用户可以容易地判断和处理相关问题。

2.3网络连接功能

有了网络连接功能,才能进行网络对战。

对战双方可以通过网络进行连接,这是实现网络对战的基础。

当用户想要进行网络对战时,只要一方建立服务器,另一方进行连接,由此双方之间可以进行通信,交换数据。

详细的功能描述如下所示:

(1)一方进入游戏,选择服务器模式,输入可用的端口号,然后点击确定,就会在这个输入的端口号上监听连接,等待客户端的连接。

此时应该把自己的IP地址和端口号告之另一方,好让对方进行连接。

(2)另一方进入游戏,选择客户端模式,然后输入服务器的IP地址和端口号,然后点击确定,双方建立连接。

(3)建立连接后,双方都点击开始,就开始游戏了。

(4)如果连接失败或者连接中断,就关闭程序并重启,检测IP地址和端口号是否有误,再次进行连接。

2.4聊天功能

因为能进行网络对战,双方可以通过网络下中国象棋,如果不能进行交流,相互传递信息,遇到了问题或其它一些情况就无法告诉对方。

所以,聊天功能也是十分重要的。

因为上面已经说了是网络连接的通信,聊天信息可以直接发送给对方而不用经过中间服务器的中转。

另外,当只有选择网络对战时才有聊天功能。

因为复盘和人机对战都是在本地进行,只有自己一个人,自己不需和自己聊天,也就不需要聊天功能了。

关于聊天功能的详细描述如下所示:

(1)一方在聊天框里输入要发送的信息,然后点击发送。

如果网络连接正常,另一方应该收到聊天信息并显示在聊天框里面。

(2)对于另一方来说,同样的道理。

(3)如果网络连接有问题,在点击发送后,系统会提示发送聊天信息失败。

(4)因为中国象棋分红黑双方,故在此设定红方发送的聊天信息字体颜色是红色,相对的,黑方发送的聊天信息的字体颜色是黑色,这样便能很好的区分是谁发的聊天信息了。

另外,在显示聊天信息的时候,在最前面加上当前时间,这样便知道是什么时候收到的信息。

2.5游戏控制

对于中国象棋来说,一些功能是众所周知也是必须的,比如悔棋、认输、言和等。

对于本系统来说,有新建、开始、悔棋、认输、言和、交换、保存、检测、退出。

下面就详细说明一下这些功能。

1、新建。

当在一盘棋结束的时候或者在下棋的过程中,一方可以请求新建棋局的请求,只要另一方同意,即可开始新一盘棋局。

具体描述如下:

(1)一方请求新建棋局,另一方同意,则开始新棋局。

(2)一方请求新建棋局,另一方拒绝,则维持当前状态不变。

2、开始。

当刚进入游戏或者新建棋局时,需要双方都要点击开始,一盘棋局才会开始。

具体描述如下:

(1)刚进入游戏时,需要用户点击开始,以表明自己已经准备就绪。

当双方都准备就绪时才能开始下棋。

(2)新建棋局时,道理同上,需要用户点击开始,以表明自己已经准备就绪。

当双方都准备就绪时才能开始下棋。

3、悔棋。

俗话说“落子无悔”,但在这里还是提供了悔棋的功能,方便用户的学习和交流。

关于悔棋功能的具体描述如下:

(1)一方申请悔棋,另一方同意,则悔棋成功,棋子回到原位。

(2)一方申请悔棋,另一方不同意,则悔棋失败,维持当前状态不变。

4、认输。

当用户棋子无路可走或者已经明显是输的情况下可以认输,结束棋局,然后可以新建重新开始。

认输不需经过对方同意,只要一方认输,即可结束棋局。

5、言和。

当双方谁也无法获得胜利的时候可以言和。

具体描述如下:

(1)一方申请言和,另一方同意,则言和成功,双方和棋。

(2)一方申请言和,另一方不同意,则言和失败,维持当前状态不变。

6、交换。

按照中国象棋的规则,红方先走,黑方后走。

而交换功能可以让上方交换红黑,自由地选择先走或者后走。

交换只能发生在双方都开始之前,若棋局已经开始就不能交换了。

具体描述如下:

(1)一方申请交换,另一方同意,则双方交换红黑成功。

(2)一方申请交换,另一方不同意,则双方交换红黑失败。

7、检测。

检测网络连接是否正常,是否能和对方通信。

当对一段时间内无动作时,可以点击检测,看网络是否通畅。

若检测请求发送失败或者对方无响应都表明网络连接出现问题。

8、保存。

把当前的棋局保存为棋谱,以供阅读(文本文件棋谱)和复盘(二进制文件棋谱)。

关于棋谱的介绍请看后面的章节2.6。

2.6棋谱

2.6.1棋谱介绍

中国象棋棋谱,就是把一盘棋中走的每一步棋记录下来保存。

由于棋盘有9条纵线,对于红方来说用汉字“一”到“九”表示,对于黑方来说用阿拉伯数字“1”至“9”表示,以此来区分红方和黑方。

棋谱中的每一步都有四个字组成,详细情况如下:

(1)第一个字一般是棋子的名字,如“炮”、“马”等。

(2)第二个字一般是棋子所在的纵线,红方用汉字表示,黑方用阿拉伯数字表示。

(3)第三个字是“平”、“进”和“退”中的一个,表示棋子的移动方向。

(4)第四个字视情况而定。

棋子若是平移或是走斜线,则这个字就是棋子落点所在的纵线。

棋子若是沿直线进或退,则这个字就是进或退的步数。

(5)上面说前两个字的时候都加以一般两字,说明还有特殊情况。

比如红方两个炮都在纵线五上,此时用“炮五”就无法明确到底的哪个棋子要移动,按照标准,此时应该用“前炮”或者“后炮”表示。

对于一种棋子有两个的棋子来说,都可以用“前”和“后”加以区分,但对于兵或卒来说,各有5个棋子,“前”和“后”就无法表示了,此时可以用“前”、“中前”、“中”,“中后”和“后”表示,若只一个字就再补上兵或卒所在的纵线即可。

2.6.2文本文件棋谱

文本棋谱就是按照上面所说的记录方法,把一盘棋的每一步都以文本字符的形式保存在文件中。

文本形式的棋谱文件可以使用户很方便的阅读。

2.6.3二进制文件棋谱

文本文件棋谱虽然方便了人的阅读,但电脑识别起来就比较困难。

因此把每一步所走的信息以二进制数据的形式保存在二进制文件中,就可以方便电脑识别,以实现复盘功能,复盘功能请见章节2.7。

2.7复盘

复盘功能就是用程序打开棋谱文件,就能在界面上一步步展示出所记录的棋子走法,就相当于回放整个对弈过程。

2.8人机对战

此处人机对战就是指人和电脑可以下象棋。

怎么让去电脑“思考”该怎么走,这是一个难题。

第三章概要设计

3.1中国象棋的模块设计

根据系统的功能需求和实际情况,系统的模块划分如图3-1所示。

图3-1网络中国象棋模块划分

其中左下角的界面模块还可以划分为5个小模块,如图3-2所示。

图3-2界面模块子模块划分

其实,除了图3-1所示的那些模块外,还有一个象棋信息模块,它负责维护下棋类型、棋子颜色、IP地址和端口号这些信息,供各个模块使用。

下面先简要说一下各模块的功能:

(1)数据模块(ChessData),存储并维护棋子的状态和位置信息。

(2)规则模块(ChessRule),判断是否合乎中国象棋规则。

(3)界面模块(ChineseChess),整个所看到的界面。

①棋盘模块(ChessWidget),负责绘制棋盘和棋子。

②聊天模块(ChatWidget),负责输入和显示聊天信息。

③功能按钮模块(PushButtonWidget),显示开始、悔棋等功能按钮。

④显示棋谱模块(ManualWIdget),负责显示棋谱。

⑤提示信息模块(TipsWidget),负责显示系统提示信息。

(4)棋谱模块(ChessManual),负责记录、打开、保存棋谱。

(5)音效模块(ChessSound),负责播放音效。

(6)调度中心模块(ChessManage),这是核心模块,是整个程序的逻辑控制和处理中心,游戏控制的功能在此实现。

(7)信息转发模块(ChessDispatch),信息中转站,统一各方的接口,使调度中心模块只需写一套接口就可以与各方通信。

(8)复盘模块(ChessReplay),负责复盘。

(9)服务器模块(ChessServer),建立服务器。

(10)客户端模块(ChessClient),建立客户端。

(11)计算机接口模块(ChessComputer),负责连接信息转发模块和计算机模块,处理一些简单的请求。

(12)计算机模块(Computer),通过计算得出电脑该怎么走棋。

图3-1中各模块之间关系用数字顺序标注,下面简要说明各个模块之间的关系。

(1)数据模块和调度中心模块之间的关系:

调度中心模块负责修改数据模块中的数据。

如图3-3所示。

图3-3数据模块和调度中心模块关系图

(2)调度中心模块和规则模块之间的关系:

调度中心模块向规则模块发送一条走棋信息,将会从规则模块得到这步走棋是否合乎规则的判断结果。

如图3-4所示。

图3-4调度中心模块和规则模块关系图

(3)规则模块和数据模块之间的关系:

规则模块在判断规则的时候需要从数据模块获取数据。

如图3-5所示。

图3-5规则模块和数据模块关系图

(4)界面模块和数据模块之间的关系:

界面模块中的棋盘模块需要从数据模块中获取数据来绘制棋盘和棋子。

如图3-6所示。

图3-6界面模块和数据模块关系图

(5)界面模块和调度中心模块之间的关系:

界面模块中的棋盘模块和功能按钮模块把得到的鼠标按键信息发送给调度中心模块;界面模块中的聊天模块把用户输入的聊天信息发送给调度中心模块;调度中心模块把从外面接收到的聊天信息发送给界面模块中聊天模块;调度中心把接收到的提示信息发送给界面模块中的提示信息模块;调度中心模块把接收到的一些操作信息发送给界面模块中的功能按钮模块,让其弹出相应的对话框。

如图3-7所示。

(6)界面模块和棋谱模块之间的关系:

界面模块中的显示棋谱模块从棋谱模块获取棋谱信息并显示出来。

如图3-8所示。

(7)调度中心模块和棋谱模块之间的关系:

调度中心模块给棋谱模块发送信息让其记录棋谱。

如图3-9所示。

(8)调度中心模块和音效模块之间的关系:

调度中心模块向音效模块发送信息,让其播放相应音效。

如图3-10所示。

图3-7界面模块和调度中心模块关系图

图3-8界面模块和棋谱模块关系图

(9)调度中心模块和信息转发模块之间的关系:

调度中心模块和信息转发模块之间相互发送聊天信息和下棋信息。

如图3-11所示。

图3-9调度中心模块和棋谱模块关系图

图3-10调度中心模块和音效模块关系图

图3-11调度中心模块和信息转发模块关系图

(10)复盘模块和棋谱模块之间的关系:

棋谱模块负责解析棋谱文件,复盘模块因而可以从棋谱模块获得棋谱文件中每一步的走棋信息。

如图3-12所示。

图3-12复盘模块和棋谱模块关系图

(11)复盘模块和信息转发模块之间的关系:

复盘模块把从棋谱得到的走棋发送给信息转发模块。

如图3-13所示。

图3-13复盘模块和信息转发模块关系图

(12)服务器模块和信息转发模块之间的关系:

服务器模块和信息转发模块之间相互发送聊天信息和下棋信息。

如图3-14所示。

图3-14服务器模块和信息转发模块关系图

(13)客户端模块和信息转发模块之间的关系:

客户端模块和信息转发模块之间相互发送聊天信息和下棋信息。

如图3-15所示。

(14)计算机接口模块和信息转发模块之间的关系:

计算机接口模块和信息转发模块之间相互发送下棋信息。

如图3-16所示。

图3-15客户端模块和信息转发模块关系图

图3-16计算机接口模块和信息转发模块关系图

(15)计算机接口模块和计算机模块之间的关系:

计算机接口模块向计算机模块发送一个请求,计算机模块会返回给计算机接口模块一步走棋信息。

如图3-17所示。

(16)计算机模块和数据模块之间的关系:

计算机模块在计算该怎么走的时候会从数据模块获取数据。

如图3-18所示。

有了上面这些模块的划分以及它们之间的关系,需求分析中的功能就可以根据这些进行设计,后面几节就会讲这些功能的设计。

图3-17计算机接口模块和计算机模块关系图

图3-18计算机模块和数据模块关系图

3.2系统提示功能的设计

由章节3.1可知,提示信息最终会在界面模块中的提示信息模块中显示出来。

提示信息模块只负责显示最终的信息,调度中心负责向提示信息模块添加提示信息,而其它模块向调度中小发送提示信息。

该功能的数据流图如图3-19所示。

图3-19系统提示信息功能数据流图

总的来说,这个功能的实现思路就是,其它模块把要显示的提示信息都交给调度中心,调度中心把自己要显示的提示信息和其它模块交给自己的提示信息再发送该提示信息模块,最终显示在界面上。

3.3网络连接功能的设计

网络通信用两种模式可供选择,分别如图3-20和图3-21所示。

图3-20客户端-服务器-客户端通信模式

图3-21网络连接通信模式

对于本系统来说,客户端-服务器-客户端通信模式虽然也是可行的。

但考虑到只有两方进行通信,为了方便快捷,采用网络连接的通信模式更适合。

网络连接的通信模式不仅直接方便,还省去了维护中心服务器的工作。

由章节3.1可以看到,里面有服务器模块和客户端模块这两个模块。

看到这两个模块的名字并不代表着此系统采用客户端-服务器-客户端通信模式。

因为就算采用网络连接通信模式,也需要其中一个建立服务器,另一个进行连接。

也就是说,对于客户端-服务器-客户端通信模式来说,用户双方都是客户端,而对于网络连接通信模式来说,用户双方一个是服务器,一个是客户端。

在用户刚打开程序的时候,会首先出来一个选择界面,有4个选项可供用户选择,分别是服务器、客户端、复盘和人机对战。

如果选择服务器,就应该输入要监听的端口号;如果选择客户端,就要输入要连接的服务器的IP地址和端口号;复盘和人机对战因为就在本机,所以不需要输入什么。

用户只能从这四个选项中选择一项。

当用户选择服务器的时候,程序会在所输入的端口号建立服务器,进行监听,等待客户端,也就是等待另

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1