作业帮 > 小学作文 > 教育资讯

人和电脑下中国象棋

来源:学生作业帮助网 编辑:作业帮 时间:2024/09/25 03:20:14 小学作文
人和电脑下中国象棋小学作文

篇一:中国象棋源代码及文档

人和电脑下中国象棋

摘 要

象棋程序可以分为两大部分:人工智能和界面程序辅助。人工智能的主要部分,反映了计算机下象棋的想法,电脑怎么想,最好的方法去完成下一步,优先搜索算法进行搜索,和各种可能的行动,评估,选择胜利面最大的一步;界面和程序协助部分主要是界面友好,以更好地适应用户下象棋的想法。

本文研究了中国象棋在电脑中如何表示,然后讨论如何产生走法的一系列相关技术。 使用MFC架构和Visual C + +开发工具,实现一定技能的中国象棋人机对弈功能。 关键词:中国象棋;人工智能;下棋

Title Chess Game

Abstract

Chess program can be divided into two major auxiliary artificial intelligence and interface program. The AI part of the main reflected computer chess ideas, computer how to think and go to the best method to complete the next step, first search algorithm to search, and a variety of possible moves, valuations, choose victory surface step; the interface and the program assisted some of the major user-friendly game of chess by the previous step, to better adjust the chess ideas.

This paper studies the Chinese chess computer, and then discuss how to generate a series of related moves. MFC architecture and Visual C development tools, to achieve a certain chess skills, Chinese chess, human-computer chess program.

Keywords: Chess; artificial intelligence; chess

目 次

1 引言????????????????????????????? 1

1.1 象棋设计背景和研究意义???????????????????? 1

1.2象棋设计研究方法 ??????????????????????? 1 2 需求分析 ????????????????????????? 3

2.1 界面要求 ???????????????????????????3

2.2规则要求 ?????????????????????????? 3

2.3判定输赢 ?????????????????????????? 4 3系统设计与实现 ?????????????????????????6

3.1系统模块划分 ?????????????????????????6

3.2系统主要流程图 ????????????????????????6

3.3相关数据定义 ???????????????????????? 8 4 系统测试运行?????????????????????????10

4.1测试方案设计 ??????????????????????????10

4.2测试过程及结果 ???????????????????????? 10

4.3系统的优缺点分析及改进方案??????????????????11

4.4系统性能分析?????????????????????????11

结论 ?????????????????????????????? 12 致谢 ?????????????????????????????? 13 参考文献?????????????????????????????14

1引言

1.1 象棋设计背景和研究意义

经过二十年的发展,电脑游戏行业已成为最重要的工作之一,以跟上全球电影,电视,音乐和其他娱乐行业,其年销售额超过好莱坞的全年收入的步伐。游戏作为一种休闲活动。由于早期人类社会的生产力和技术的限制,只有一些户外游戏。随着生产力的发展和技术进步,一种新的方式来播放 - 视频游戏也将诞生。

当计算机的发明,电子游戏和另外一个新的载体。在计算机行业作为一个整体的推动下,通过不断创新,开发电子游戏。由于计算机的发明到发展到各个领域,成为每天的工作和生活这一进程的重要组成部分,电子游戏已逐渐渗透我们每个人的休闲活动。电脑已经流行,人们可以使用的计算机程序编辑,开发自己的游戏,不再是一个梦想。事实上,从游戏软件销售的占个人电脑软件市场份额约80%。棋类游戏是休闲游戏,以及阶段的角色扮演游戏和实时战略游戏和其他游戏比上手快,比赛时间很短,但也有利于用户的放松,喜欢的人,尤其是棋类游戏,方便,快,操作简单,在休闲和娱乐活动中占主导地位。中国象棋作为中华民族的古老文化的代表之一,不仅有悠久的历史和广泛的基础,作为一个智力活动,中国象棋开始走向世界。

随着计算机处理速度的迅速增加,提出一个长期的问题:计算机是否会超越人类?计算机击败世界国际象棋大师,计算机比人强吗?人工智能是一个高度跨学科的,其中心任务是研究如何使电脑做过去依靠人类的智慧可以做的工作。因此,在游戏开发过程中的人工智能技术的研究自然成为行业的一个热门的研究方向。

1.2 象棋设计研究方法

本程序的核心设计包括象棋的表示,人工智能算法的实现,以及在整个游戏的界面和程序内的MFC类库开发的辅助部分,使用Visual C++ 开发工具,使游戏开发更方便,使用人工智能相关搜索算法,用人工智能的方法来产生计算机走法,从而提高整个游戏的功能。

本文的目标是要实现具有一定的象棋水平和互动与友好的中国象棋人机对弈象棋程序。

整个程序可分为两个主要部分:

篇二:中国象棋打谱系统

摘 要

中国象棋发展至今已有数千年的历史了,它是中华民族智慧的结晶。在我国,中国象棋的普及程度是其它棋类无法相比的,大致国际、国内比赛,小至社区街道。如今,仅中国就有两亿人会下中国象棋,且中国象棋的发展趋势日益国际化。

Java游戏程序的开发是计算机运用的一个重要方面之一。游戏程序的发展几乎与计算机网络和软硬件技术的发挥在那个基本保持同步。游戏无论是开发过程还是运行过程,对它所以依赖的计算机硬件配臵的要求较高。本设计采用软件工程学方法设计并实现个了中国象棋打谱系统,该系统能够制作保存用户对弈过程,能重新演示绝对过程,及复盘。当然它也能遵守象棋的一切基本规则,实现人机对战,人与人对战等多方面功能。

【关键词】中国象棋,打谱,复盘,JAVA,软件工程

Abstract

As the quintessence of a country for China,it has passed thousands of years since Chinese Chess developed. Other chess couledn't be compared with it's popularzation in China,form largeinternational or nationl competition to smaller pieces community street. It is the distillate of Chinese people's wisdom.Now,there are 200 million people can paly Chinese Chess only in China. And Chinese Chess is developing in the way of internationalization.

Java Development of the game program is one important ASPect of computer applications. Procedures for the development of the game almostremain the same step with computer NETwork and software technology development.Whether the development process oroperation process of game, it has to rely on a high computer hardware configuration.The paper designs and develops the Spectrum system of Chinese chess with Software Engineering .And the system can create and maintain a game process in order to re-demo game precess,which called chessboard resuming. Of course,it also can comply with all the basic chess rules and achieve many functions,such as human-machine war,man-man war and so on.

【Key words】Chinese Chess,Spectrum Fight,chessboard resuming, Java,

目 录

1.引言

1.1 主要设计 ........................................................................................................................... 1

1.2主要内容 ............................................................................................................................ 1

1.3设计要求 ............................................................................................................................ 1

2.开发平台

2.1 Java软件概述 .................................................................................................................. 3

2.2 Java的特点 ...................................................................................................................... 3

2.3 关于ECLIPSE .................................................................................................................... 5

3. 需求分析

3.1任务概述 ............................................................................................................................ 6

3.2 设计基本要求 ................................................................................................................... 6

4. 总体设计

4.1线程的设计 ........................................................................................................................ 8

4.1.1 通过Thread类实现 ............................................................................................. 8

4.1.2 实现Runnable接口 ............................................................................................. 8

4.2线程的生命周期 ................................................................................................................ 9

4.2.1 出生 ....................................................................................................................... 9

4.2.2 就绪 ....................................................................................................................... 9

4.2.3 运行 ....................................................................................................................... 9

4.2.4 阻塞 ....................................................................................................................... 9

4.2.5 死亡 ..................................................................................................................... 10

5.详细设计

5.1程序流程图 ...................................................................................................................... 11

5.2运行结果及界面 .............................................................................................................. 12

6.实验总结

致谢 .............................................................................................................................................. 16 参考文献 ................................................................................................................................... 17

南昌工学院课程设计论文

1.引言

1.1 主要设计

象棋水平的发展是需要靠信息技术来推动的,国际象棋有两个很好的范例,一个是象棋棋谱编辑和对弈程序的公共平台——WinBoard平台,另一个是商业的国际象棋数据库和对弈软件——ChessBase,他们为国际象棋爱好者和研究者提供了极大的便利。国际象棋软件有着成功的商业运作,已发展成一种产业。然而,电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。

在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成功经验和优秀的思想。例如B. Moreland,微软(Microsoft)的程序设计师,业余从事国际象棋引擎Ferret的开发,他的一系列关于国际象棋程序设计的文章非常值得其他棋类程序设计人员借鉴。然而,中国象棋与国际象棋存在着很大的差异,因此国际象棋的某些成熟技术,无法直接应用于中国象棋,需要对其加以改进和创新。

1.2主要内容

本课题采用Java语言编写这个中国象棋对弈系统程序。

主要工作内容:搜集相关资料,准备参考资料,学习掌握开发方法、开发工具,需求分析,确定游戏程序实施方案,根据要求设计具体的流程图,编写程序,修改、完善程序,系统调试、测试,优化处理。

1.3设计要求

中国象棋是双方在由9条和10条横线分割而成的棋盘对弈。竖线与横线的交叉点称做棋点,每个棋子都放置在棋点上 ,而不是方格中。河界将棋盘分为两个等分=份,没一边都有一个由9个点组成的区域“将”,“帅”,“士”只能在“九宫”内移动,并且“将”,“帅”,的每一步只可以水平或垂直移动一个棋点。士:“士”只能在“九宫”内移动,并且每一步只可以沿对角线方向移动一个棋点。象;一步必须沿对角线方向走两个棋点。但它既不能过河,也不能跳过或穿

1

篇三:象棋棋理

象棋棋理!一篇让我们长知识的文章!

第一章:有关棋子职位的说明

中国象棋的"帅(将)",不能出"九宫",且有"士、象"充当专 职护卫力量,始终扮演着幕后指挥的角色,这些对"帅(将)",的特殊 保护是"率士之滨莫非王臣,普天之下莫非王土"的君王至上的写照。君王是国家的基石,是国家稳定的前提。中国象棋的"帅(将)"不能 "对面",可洞察出儒家礼义的熏染。

中国象棋的"士"是宫廷卫士,司"九宫"安全,不离"帅(将)"左右;

"象"是臣相,只能于本土飞来飞去。如此宠大的护卫部队削弱了攻击的 力量,另一方面却增强了防御体系,即使前线战士全部马革裹尸还,也可能杀和敌军的骚扰,这些反映出中国君王传统的求稳怕乱的心理和习惯。

中国象棋的"兵(卒)"只能一步步向前走,不能后退,虽有" 过河小卒当小车"之说,但它终究是"卒",到头无非一"老卒"而矣,隐喻着" 生死有命、富贵在天 "的愚民信条。 象棋有法度森严的精神,中国象棋对棋子的限制尤为突出,区区十六个子有五个不能过河,"士、象"有法定的路线,"马"有拐脚之制约,纵是千里马一旦受制也难以纵横驰骋,表现着压抑个性的封建体制。

象棋尚刚,要求积极拼杀作战,棋子运动能力越强越有

优势。道家思想的融汇,中国象棋战法中发扬了阴柔的一面,像善守的反宫马屏风马即是。

第二章:象棋古谱的一些口诀与全旨

象棋十口诀

不得贪胜,入界宜缓

攻彼顾我,弃子争先...

象棋谱式

将军不离九宫内,士止相随不出官...

宜用心机

象棋易学最难精,妙着神机自巧生...

中炮局

起炮在中宫,观棋气象雄.马常守中卒...

士相局势

炮向士角安,车行两路前.过河车炮上...

飞炮局势

炮车边塞上,临阵势如飞.虚隙井图象...

象局势

象局势能安,行车出两边.车先河上立...

破车势

一车在中营,鸳鸯马上攻.一车河上立...

胜宜得先

得子得先名得胜,得子失先却是输...

《棋经论》 夫弈棋者,要专心、绝虑,静算待敌,坦然无喜怒挂怀。大抵一局.......

棋谚告诉我们:“河界三分阔,智谋万丈深”。下棋就是一场斗智:“象棋似布阵,点子如点兵”。

下棋的根本策略是什么?棋谚说:“兵贵神速,抢先入局”。

下棋讲究“先”字,棋谚有“弃子争先”;“宁失一子,不失一先”;“得子得先方为胜,得子失先方为败”。

谈到棋子的走法时,棋谚说:“马行日,象走田,炮隔山打,车走直线,将帅不出城,小卒一去不复返”。

谈到下棋的心态,棋谚说:“临杀勿急,稳中取胜”。强调稳慎时又说:“一招不慎,满盘皆输”。

棋谚还谈到了象棋各子的威力,车:“一车十子寒”。“车正永无沉底月”。马:“马有八面威风”,“马蹬四方”,“马跳连环不用车”,“马踩无棋”。炮:“空头炮,凶恶难当”。卒:

“卒坐宫心,老帅发昏”。将:“老将出马,一个顶俩”。

讲到象棋各子的威力欠缺时,棋谚又说:“输棋只因出车迟”。“低头车,阵势虚”。“马退窝心,不死也昏”。“马跳边,易被歼”。“炮进冷苍,难兴风浪”。“孤炮难鸣”。“单车寡炮瞎胡闹”。“高将多危”。“老卒无功”。

马炮争雄互不相让时,棋谚概括两句话:“开局炮胜马,残局马胜炮”。

棋谚还辨证地阐述棋子之间的相克相生:“当头炮,马来招”。“摆上羊角士,不怕马来将”。“马卒难破士相全”。“缺士怕马,缺相怕炮”。“缺士怕双车”。

棋招中最忌什么?棋谚说:“象眼谨防塞”,“马怕蹩脚”,“车入险地”,“炮勿轻发”,“臭棋乱飞象”,“无事不支士”,“将忌暴露”。

什么形势最危险?棋谚说:“连车重炮卧槽马,城里老将挨死打”。“车临头,马挂角,老将活不了”。“小卒坐大堂,将帅活不长”。

下棋的艺德有何讲究?棋谚对旁观者的要求:“观棋不语真君子”。对当局者的要求:“举棋不悔大丈夫”。

棋谚还告诉人们下棋时不要太在乎输赢时说:“胜败乃兵家常事”。“棋是木头块,输了再重摆”。

棋谚还对人间一切事物做了一个精辟的论断:“当局者迷,旁观者清”。

河界三分宽,计谋万丈深。 象棋十诀:一不得贪胜,二入界宜缓,三攻彼顾我,四弃子争先,五舍小就大,六逢危必弃,七慎勿欲速,八动需相应,九彼强自保,十我弱取和。

宁舍一子,勿失一先。

棋输一步错,棋胜一步巧。

临杀勿急。

死子勿急吃。

寡士怯双车,士亏应兑车。

有炮需留他方士。

车不立险地。

残棋炮归家。

炮得势时兵换象,马得势时卒换士。

篇四:Android版的中国象棋人机对弈游戏设计与实现

Android版的中国象棋人机对弈游戏设计与实现

学校: 班级: 姓名: 学号: 团队成员:

完成日期:2011-6-29

摘 要

象棋水平的发展是需要靠信息技术来推动的,国际象棋有两个很好的范例,一个是象棋棋谱编辑和对弈程序的公共平台——WinBoard平台,另一个是商业的国际象棋数据库和对弈软件——ChessBase,他们为国际象棋爱好者和研究者提供了极大的便利。国际象棋软件有着成功的商业运作,已发展成一种产业。然而,电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。

在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成功经验和优秀的思想。例如B. Moreland,微软(Microsoft)的程序设计师,业余从事国际象棋引擎Ferret的开发,他的一系列关于国际象棋程序设计的文章非常值得其他棋类程序设计人员借鉴。然而,中国象棋与国际象棋存在着很大的差异,因此国际象棋的某些成熟技术,无法直接应用于中国象棋,需要对其加以改进和创新。中国象棋游戏的设计工作是非常复杂和重要的,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,将牵涉到图形界面的显示与更新,并且在这个游戏的开发中还会应用类的继承机制以及一些设计模式。

该游戏主要研究基于android技术的中国象棋游戏的分析与设计,对中国象棋游戏特殊的行棋规则给予了细致的分析与理解,设计出了一种实时可行的行棋规则,从移动范围、移动方向等方面重新描述行棋规则,基于android技术通过计算机模拟实现了中国象棋特殊的行棋规则算法,设计出了一种可行的方法,使每个棋子的行棋路线都严格遵循本身的行棋规则,游戏的实战对弈得以实现,通过实验运行,证明这种限定棋子行棋路线的方法是可行的,并得到了预期的目标。

关键词:android版、中国象棋、人机对弈、类、规则

目 录

第一部分:中国象棋的开发背景************************************************************ 第二部分:中国象棋的需求分析***************************************************************** 第三部分:游戏的策划及准备工作 第四部分:功能简介及其运行结果 第五部分:游戏的架构 第六部分:游戏框架的简介 第七部分:游戏结论 第八部分:游戏展望 第九部分:谢谢指导 第十部分:游戏参考文献

第一部分:中国象棋的开发背景

1、中国象棋具有悠久的历史,象棋的爱好者更是数不胜数,远在战国时代,象棋便在贵族阶层中广为流传,早期的象棋是象征着当时战斗场面的游戏,后来这种观念慢慢被改变,成了人们休闲娱乐中不可缺

少的一部分。

2、而当今的人们忙于工作,很少有时间静下心来享受一下象棋对弈的乐趣,因此电脑版象棋、手机版象棋便开始受到人们的关注。

第二部分:中国象棋的需求分析

该游戏是改编网络版中国象棋,使其更加满足玩家的的要求。主要用于android手机的平台。满足广大象棋爱好者的要求。

第三部分:游戏的策划及准备工作

1)游戏的策划 游戏类型

该游戏属于棋牌类游戏的一种,并采用简单的人工智能,可达到玩家与电脑进行对弈的效果。 运行的目标平台

游戏的目标平台为Android2.2 (3)操作方式

该游戏拟采用屏幕事件进行操作,玩家可以鼠标来单击屏幕完成对游戏进行控制,游戏中部分的功能可以使用键盘操作来完成。

2)android平台下游戏的准备工作 1、相关的素材。

2、棋盘的标记

{0,0,0,0,0,0,0,0,0}, {14,0,14,0,14,0,14,0,14}, {0,11,0,0,0,0,0,11,0}, {0,0,0,0,0,0,0,0,0}, {9,10,13,12,8,12,13,10,9},

{2,3,6,5,1,5,6,3,2}, {0,0,0,0,0,0,0,0,0}, {0,4,0,0,0,0,0,4,0}, {7,0,7,0,7,0,7,0,7}, {0,0,0,0,0,0,0,0,0},

第四部分:功能简介及其运行结果

(1)运行该游戏,首先进入的将是欢迎界面,效果如图1所示。

图1

(2)当欢迎动画播放完毕后,单击“菜单”按钮就可以进入菜单界面,如图2所示。

图2

(3)在菜单按钮界面,可以通过“打开声音”/“关闭声音”菜单来控制游戏声音的开关,单击“帮助”菜单可以进入帮助界面,如图3所示。

图3

(4)而在菜单界面单击“开始游戏”菜单将进入游戏界面,如图4所示。

图4

在游戏界面玩家可以通过单击自己的棋子来走棋,同时可以单击声音按钮来打开或者关闭声音。 当游戏一方“将”或者是另一方的“帅”被吃掉是,会出现游戏胜利的界面,如图6所示。

篇五:中国象棋游戏的设计与实现-毕业设计

毕 业 设 计

中国象棋游戏的设计与实现

摘 要

中国象棋发展至今已有数千年的历史了,它是中华民族智慧的结晶。在我国,中国象棋的普及程度是其它棋类无法比拟的,大至国际、国内比赛,小至社区街道。如今,仅中国就有2亿人会下中国象棋,且中国象棋的发展趋势日益国际化。本文首先研究了中国象棋在计算机中的表示问题,讨论如何产生着法等一系列相关内容,其次研究了博弈树的搜索技术及在此基础上发展起来的相关剪枝算法。系统使用MFC文档视图体系结构和Visual C++开发工具,实现了一个具有一定棋力的中国象棋人机对弈程序。此博弈程序实现了人机博弈,悔棋,电脑难度设置,着法名称生成等功能。

关键词:中国象棋 人工智能 博弈树 Alpha-Beta搜索

目 录

1 前言 .................................................................... 1

1.1 中国象棋游戏设计背景和研究意义 ......................................... 1

1.2 国内外象棋软件发展概况 ................................................. 1

1.3 中国象棋游戏设计研究方法 ............................................... 1

1.4 本文的主要工作 ......................................................... 2

2 棋局表示和着法生成 ....................................................... 2

2.1 棋盘和棋子的表示 ....................................................... 2

2.2 着法生成 ............................................................... 4

3 走棋和博弈程序的实现 ..................................................... 5

3.1 博弈程序的实现 ......................................................... 5

3.1.1 搜索算法 ............................................................. 5

3.1.2 着法排序 ............................................................. 8

3.1.3 局面评估 ............................................................. 9

3.2 悔棋和还原功能的实现 .................................................. 11

3.3 着法名称显示功能的实现 ................................................ 12

3.4 胜败判定 .............................................................. 14

4 界面设计和系统实现 ...................................................... 15

4.1 界面设计 .............................................................. 15

4.2 系统实现 .............................................................. 17

5 总结 .................................................................... 21

参 考 文 献 ........................................................... 23

ABSTRACT ................................................................. 24 致 谢 ................................................. 错误!未定义书签。 仲恺农业工程学院毕业论文(设计)成绩评定表 ................. 错误!未定义书签。

1 前言

1.1 中国象棋游戏设计背景和研究意义

中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。在计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想,中国象棋历史悠久不仅源远流长,而且基础广泛,作为一项智力运动更成为我们游戏开发的首选对象。

中国象棋是一项智力游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。控制计算机的是人类,而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。

1.2 国内外象棋软件发展概况

最早的象棋软件是一副可以外出携带的电子棋盘,后来升级到电视游戏机。开始出现的一些容量很小的象棋软件如:DOS界面《将族》、WIN31程序的《中国象棋》等等,与其说人类下不过电脑,倒不如说是没有耐性等待电脑程序慢吞吞的搜索算法,有时甚至怀疑软件是否在搜索中死掉了。后来,网络上先后出现了真正的WINDOWS窗口界面的象棋专业高级软件《棋隐》、《象棋世家》、《象棋参谋》、《象棋奇兵》等。总而言之,各类象棋软件既有自身的优点,也存在共通性的缺陷,如:中局审势不够智能化,走不出弃子取势的人性化佳构,残局时智力明显低于人脑,难以走出残局例胜的必然着法等。放眼未来,象棋软件已经走完了一波持续上涨的行情,有可能出现逐步降温的滑坡趋势。

1.3 中国象棋游戏设计研究方法

本系统主要用 Visual C++ 进行开发,里面的MFC类库,使游戏开发更加方便,并利用人工智能相关搜索算法实现人工智能的着法生成,从而完善整个游戏的功能。

该象棋人机博弈系统实现的功能主要包括:

1、选手选择(人或电脑);

2、人机对弈(人与电脑竞技);

3、电脑棋力难度选择(电脑下棋能力难度选择,共有4级:按电脑配置选择难度);

4、悔棋、还原;

5、着法名称显示(象棋走棋规范名称)。

1.4 本文的主要工作

第一部分主要介绍了中国象棋游戏开发的背景及意义、国内外象棋软件的发展概况和象棋游戏的设计研究方法;

第二部分介绍了棋局表示方法和着法生成;

第三部分介绍了走棋和博弈程序的实现;

第四部分介绍了界面设计和系统的实现。

2 棋局表示和着法生成

2.1 棋盘和棋子的表示

对于中国象棋棋盘局面的表示可采用传统而简单的“棋盘数组”。即用一个9*10的数组来存储棋盘上的信息,数组的每个元素存储棋盘上是否有棋子。这种表示方法简单易行。按此方法棋盘的初始情形如下所示:

BYTE CChessBoard[9][10] = {

R, 0, 0, P, 0, 0, p, 0, 0, r,

H, 0, C, 0, 0, 0, 0, c, 0, h,

E, 0, 0, P, 0, 0, p, 0, 0, e,

A, 0, 0, 0, 0, 0, 0, 0, 0, a,

K, 0, 0, P, 0, 0, p, 0, 0, k,

A, 0, 0, 0, 0, 0, 0, 0, 0, a,

E, 0, 0, P, 0, 0, p, 0, 0, e,

H, 0, C, 0, 0, 0, 0, c, 0, h,

R, 0, 0, P, 0, 0, p, 0, 0, r

};

给所有棋子定义一个值:

#define R_BEGIN R_KING

#define R_END R_PAWN

#define B_BEGIN B_KING

#define B_END B_PAWN

#define NOCHESS 0 //没有棋子

黑方:#define B_KING 1 //黑帅

#define B_CAR 2 //黑车

#define B_HORSE 3 //黑马

#define B_CANON 4 //黑炮

#define B_BISHOP 5 //黑士

#define B_ELEPHANT 6 //黑象

#define B_PAWN 7 //黑卒

红方:#define R_KING 8 //红将

#define R_CAR 9 //红车

#define R_HORSE 10//红马

#define R_CANON 11//红炮

#define R_BISHOP 12//红士

#define R_ELEPHANT 13//红相

#define R_PAWN 14//红兵

判断颜色:

#define IsBlack(x) (x>=B_BEGIN && x<=B_END)//判断某个棋子是不是黑色 #define IsRed(x) (x>=R_BEGIN && x<=R_END)//判断某个棋子是不是红色

对于着法的表示,直接借用棋盘数组的下标来记录着法的起点和目标点。至于是什么棋子在走,以及是否吃子、吃的是什么子,在着法结构中并不记录。这些信息由外部读取棋盘上起点、终点的数据获得。着法结构定义如下,其中还包含了对着法的历史得分的记录项,以供后面要讲到的“历史启发”所用。

typedef struct

{

short nChessID; //表明是什么棋子 CHESSMANPOS From;//起始位置 CHESSMANPOS To; //走到什么位置 int Score; //走法的分数

}CHESSMOVE;

有了对棋盘局面和着法的表示之后,程序才能够完成以下操作:

生成所有合法着法;

执行着法、撤销着法;

针对某一局面进行评估。

小学作文