中国象棋算法设计.doc
文本预览下载声明
正文
? 1、课程设计报告??
1.1问题描述
?象棋是一种双方对阵的竞技项目。棋子共有三十二个,分为红黑两组,各有十六个,由对弈的双方各执一组。兵种是一样的,分为七种:? ? 红方:红方有帅一个,仕、相、车、马、炮各两个,兵五个。? ? 黑方: 黑方有将一个,士、象、车、马、炮各两个,卒五个。? ? 其中帅与将;仕与士;相与象;兵与卒的作用完全相同,仅仅是为了区别红棋和黑棋而已。? ? 棋子活动的场所,叫作棋盘。在长方形的平面上,绘有九条平行的竖线和十条平行的横线相交组成,共有九十个交叉点,棋子就摆在交叉点上。中间部分,也就是棋盘的第五,第六两横线之间末画竖线的空白地带称为“河界”。两端的中间,也就是两端第四条到第六条竖线之间的正方形部位,以斜交叉线构成“米”字方格的地方,叫作“九宫”(它恰好有九个交叉点)。? ? 整个棋盘以“河界”分为相等的两部分。为了比赛记录和学习棋谱方便起见,现行规则规定:按九条竖线从右至左用中文数字一-九来表示红方的每条竖线,用阿拉伯数字‘1’~‘9’来表示黑方的每条竖线。对弈开始之前,红黑双方应该把棋子摆放在规定的位置。任何棋子每走一步,进就写“进”,退就写“退”,如果像车一样横着走,就写“平”。任何棋子在走动时,如果乙方棋子可以到达的位置有对方的棋子,就可以把对方棋子拿出棋盘(称为吃子)而换上自己的棋子。只有炮的吃子方式与它的走法不同:它和对方棋子之间必须隔一个子(无论是自己的还是对方的),具备此条件才能吃掉人家。一定要注意,中隔一个棋子,这个棋子俗称“炮架子”。帅和将被吃或不能动弹即输棋。? ?
1.2需求分析
走棋和吃子对局时,由执红棋的一方先走,双方轮流各走一着,直至分出胜、负、和,对局即终了。轮到走棋的一方,将某个棋子从一个交叉点走到另一个交叉点,或者吃掉对方的棋子而占领其交叉点,都算走一着。双方各走一着,称为一个回合。2、各种棋子的走法?帅(将):帅和将是棋中的首脑,是双方竭力争夺的目标。它只能在九宫之内活动,可上可下,可左可右,每次走动只能按竖线或横线走动一格。帅与将不能在同一直线上直接对面,否则走方判负。?仕(士):仕(士)是帅(将)的贴身保镖,它也只能在九宫内走动。它的行棋路径只能是九宫内的斜线。?相(象):相(象)的主要作用是防守,保护自己的帅(将)。它的走法是每次循对角线走两格,俗称象走田。相(象)的活动范围限于河界以内的本方阵地,不能过河,且如果它走的田字中央有一个棋子,就不能走,俗称塞象眼。?车:车在象棋中威力最大,无论横线、竖线均可行走,只要无子阻拦,步数不受限制。因此,一车可以控制十七个点,故有一车十子寒之称。?炮:炮在不吃子的时候,走动与车完全相同。炮与被吃子之间必须隔一个棋子,进行跳吃,俗称架炮或炮打隔子。?马:马走动的方法是一直一斜,即先横着或直着走一格,然后再斜着走一个对角线,俗称马走日。马一次可走的选择点可以达到四周的八个点,故有八面威风之说。如果在要去的方向有别的棋子挡住,马就无法走过去,俗称蹩马腿。?兵(卒):兵(卒)在未过河前,只能向前一步步走,过河以后,除不能后退外,允许左右移动,但也只能一次一步。3、吃子:任何棋子走动时,如果目标位置上有对方的棋子,就可以把对方的棋子拿出棋盘,再换上自己的棋子(即吃子)。概要设计
x[i][1]=x[10-i][1]=i+10;既从车到帅对应的数为:11,12,13,14,15;兵为17,炮为16;绿子棋子:x[i][10]=x[10-i][10]=i+20; 既从车到帅对应的数为:21,22,23,24,25;卒为27,炮为26;具体如下图:
1.4详细设计
首先对棋盘进行初始化以,然后将每一个棋子给予初值;并将每个棋子放在棋盘对应的位置上,全部初始化完毕后就可以得到一个简易的摆好的象棋棋盘,其中红子的数值小于20,绿子的数值大于20。而后提示红棋先行,若输入的棋子的数值大于20则继续提示输入红子,若输入正确则根据输入的数值就行走棋规则判断,判断是否可以执行该步走棋。最后若帅棋对应的15,25被替换则说明一方以输,提示哪方输棋。对应的走棋规则如下(以红子为例):
根据输入的坐标X1,X2,X3,X4,其中(X1,X2)是棋初始位置的坐标,(X3,X4)是棋终止位置的坐标。每个棋子到要判断是否(X3,X4)位置上有子,若有则判断其是否大于20,若大于20说明是绿子,可以吃掉走到该位置,否则是自己方的棋子,不能走到该位置,提示重新输入。
车:若X1=X3说明车是垂直的走,从X2到X4之间若没有子可以走动;水平走同理。
马:若(X2-X4)=2并且fabs(X1-X3)=1,说明马在对应的棋盘上往下走,若
显示全部