毕业论文
计算机论文
经济论文
生物论文
数学论文
物理论文
机械论文
新闻传播论文
音乐舞蹈论文
法学论文
文学论文
材料科学
英语论文
日语论文
化学论文
自动化
管理论文
艺术论文
会计论文
土木工程
电子通信
食品科学
教学论文
医学论文
体育论文
论文下载
研究现状
任务书
开题报告
外文文献翻译
文献综述
范文
VC++实现中国象棋游戏设计+代码(2)
1.2 国内外象棋软件的发展
早在上世纪90年代的时候中国象棋软件就有了一些基本的雏形,不过那时的象棋软件没有布局库,没有残局规则,水平上很弱。象棋软件是很依赖于
计算机
能力的,所以到了本世纪初,计算机硬件出现了进步,AMD系列CPU大幅度的提高了计算机的计算能力,象棋软件也获得了硬件上的大幅进步。最早的象棋软件是台湾人做的,象纵马奔流,象棋世家等都是出自台湾人的手笔。本世纪初,国际奥林匹克运动会的人工智能项目,出现了象棋软件的比赛,这就为象棋软件的发展提供了动力。到了2003年,xiexie和纵马奔流及ELP的出现已经标志着象棋软件已经有了重要进步。到了06年随着国内软件业的发展,CPU处理能力的大幅提升,这些都为象棋软件的发展提供了必要条件,从此象棋软件迎来了黄金发展期[6]。
1.3 用C++实现中国象棋游戏的设计方法
本文主要是用vc++进行各种人工智能的功能实现,包括:
1、棋手选定(人或电脑);
2、人机对弈(人与电脑竞技);
3、电脑难度选择(电脑难度选择,共有4级:按电脑配置选择难度);
4、悔棋、还原;
5、棋子规则显示[1]。
1.4 本文的主要工作
第一部分介绍了用VC++实现中国象棋游戏的时代背景;
第二部分介绍了如何使用VC++表示棋局;
第三部分介绍了如何使用VC++表示走棋和如何博弈;
第四部分介绍了如何使用VC++表示界面和整体系统[2]。
2. 棋局表示和棋子规则生成
2.1 棋盘和棋子的表示
关于棋盘的表示再也没有比“棋盘数组”更实用的了。这种方法用一个9*10的数组就可以存储棋盘上的信息,在这些数组中,元素可以清晰的代表这个位子是否有棋子。则棋盘表示如附录1。
关于棋子规则的表示方法,我的方法是直接用数组里的元素记录被选中棋子的起点和终点。至于选中那个棋子,终点是否有棋子被吃掉,这些是不包括在棋子规则里的。这些工作都是由外部读取棋盘上起点、终点的数据获得。棋子规则结构定义如附录2。
棋盘和棋子的规则表示完了,接下来我们就可以进行以下操作:
生成所有合法棋子规则;
执行棋子规则、撤销棋子规则;
至此,整个棋局的表示算是构成了,以后的各种操作都将以棋局为基础[3]。
2.2 棋子规则的生成
在规则生成器中,本文选择的方法就是一个一个地查看棋盘上的每个点,若发现棋子,则判断该棋子颜色及种类,接着根据种类判断可能为终点的所有点。最后存到规则序列中[7]。
规则有以下几点:
1、棋子的行动方式。如象走田,马走日等等。
2、棋子的行动界限。棋子是不能到棋盘外的,再则,有些棋子本身在棋局也是有界限的(如将和士本身是不能离开九宫格的)。
3、棋子在移动到目的位子的过程中,不能被其他的棋子所当(除了炮在行动时需要中间有一个棋子),而且目的位子不能有己方棋子。
4、将帅永远不能在同一直线上,若有此情况发生将直接生出败局。
生成棋子规则以后要把这些生成的规则存到棋子规则队列中,这样才能为电脑难度的设定提供依据。在人机对战过程中,电脑的目标棋子和目标旗子要走的位子都是基于电脑对局面的评估。电脑在走棋时会搜索棋子规则队列,而且搜索会进行多层搜索。因为双方对战时肯定会你来我往走上好几步,若搜索层数过低,则必定会让电脑陷入目光短浅的困境。因此,我们在储存棋子规则时一定还要储存这种棋子规则的搜索层数。因此可以将棋子规则队列定义为二文数组m_MoveList[8][70],这里第一个数组下标为层数,第二个数组下标为每一层的全部着法数[8]。
共3页:
上一页
1
2
3
下一页
上一篇:
Java+oracle教学管理系统的设计+源代码
下一篇:
ASP.net+sqlserver教学资源共享平台设计与实现
java+mysql通用试题库系统后台设计与实现
数据挖掘的主题标绘数据获取技术与实现
基于网络的通用试题库系...
用VisualBasic实现多画面播放功能【1344字】
用VB实现聊天讨论室和点對点會话【671字】
实现网页的数据库数据导入【1377字】
學生成绩管理系统的设计与实现【1741字】
承德市事业单位档案管理...
AT89C52单片机的超声波测距...
中国学术生态细节考察《...
C#学校科研管理系统的设计
10万元能开儿童乐园吗,我...
志愿者活动的调查问卷表
公寓空调设计任务书
神经外科重症监护病房患...
医院财务风险因素分析及管理措施【2367字】
国内外图像分割技术研究现状