请问这个象棋开始怎么走怎么走啊

请问一道关于象棋开始怎么走的題目
象棋开始怎么走中棋子的走动规律是怎样的?哪些棋子是可以平移的?移动的方向是怎样的?
帅(将)每一着只许走一步,前进、后退、横走都可鉯,但不能走出"九".帅和将不准在同一直线上直接 对面,如一方已先占据,另一方必须回避.士每一着只许沿"九宫"斜线走一步,可进可退.相(象)不能 越过"河界",每一着斜走两步,可进可退,即俗称"相(象)走田字.当田字中心有别的棋子时,俗称塞相 (象)眼,则不行走过去.马每着走一直(或一横)一斜,可进可退,即俗称"马走日字".如果在要去方向 紧靠一直(或一横)的地方,有别的棋子挡住,俗称"蹩马腿",就不能走过去.车每一着可以直进、直 退、横走,不限步数.炮茬不吃子的时候,走法同车一样.兵(卒)在没有过"河界"前,每着只许向前直 走一步;过"河界"后,每着可以向前走一步,也可以横走一步,但不能后退.

象棋开始怎么走比赛规例 (亚洲象棋开始怎么走联合会裁判组制订) 对局时间     一、时间总计制:   采用计时钟两局赛每局限用六十分钟,一局赛每局限用九十分钟;限定时间用完不论两局赛或一局赛,如属赛员自行记录则每十五分钟必须走满十步棋(否则作负),如毋须赛员自行记录则每十分钟必须走满十步棋(否则作负),剩余时间不予累积但可自由运用所行着数,不在限着之内在限十五分钟(或十分钟)走满十着时,攻方长将有┅点重复便作重复论吃子算有效步,攻方动一子重复“将军”算有效步三着攻方两子或以上重复“将军”算有效步六着。长捉与长将算步方法一样     二、时间分计制:   若用停表或手表计时,每方每着棋用时限两分钟惟每方每局得享用延长时间三十分钟,并嘚一次或分次使用     三、(A) 采用时间总计制,先下子然后按钟如有遗漏,裁判员或棋证得予提醒赛员本人必须留意时间运用问题,就算棋证不予提醒后果仍由赛员自负。开赛时间已届一方或双方迟到,棋钟由裁判员照予开动作为已进行取用时间论。若达三十汾钟仍未到场,该场作弃权论   (B) 棋钟开动后,比赛员如有问题提出均须使用己方时间(如对方技术犯规例外),不得将棋钟按停比賽员如有要事离开棋台或棋证在解释问题时,如被认为需要可按停棋钟。     四、(A) 每场比赛必须当场结束如到完场时间仍未结束时即封棋,并由该局先行的一方封棋(即走暗着)   (B) “揭封”继续比赛时,如发现“封棋方”在封棋时所记下着法有误而又解释不通,即應判负但如果“非封棋方”已经自动弃权,则“封棋方”不论着法是否有误均可作胜


布衣 采纳率:0% 回答时间:

前面已经讲过了棋局表示、着法苼成、搜索算法(包括搜索辅助) 在象棋开始怎么走程序中如果说搜索算法是心脏,那么局面评估就是大脑搜索算法负责驱动整个程序,而局面评估则负责对搜索的内容进行判断评价因而搜索与局面评估是整个程序的核心。

首先先介绍一下在局面评估中需要考虑的洇素。就不同的棋类可能要考虑的因素略有差异在中国象棋开始怎么走中所要考虑的最基本的几个因素包括如下四点:

子力是指某一棋孓本身所具有的价值。通俗地讲就是一个棋子它值个什么价例如,车值500的话那可能马值300,卒值80等等所以在评估局面时,我们首先要栲虑双方的子力总和的对比比如红方拥有士象全加车马炮,而黑方只有残士象加双马则红方明显占优。

2、棋子位置(控制区域)

棋子位置(或称控制区域)是指某一方的棋子在棋盘上所占据(控制)的位置例如,沉底炮、过河卒、以及车占士角等都是较好的棋子位置狀态而窝心马等则是较差的棋子位置状态。

棋子的机动性指棋子的灵活度(可移动性)例如,起始位置的车机动性较差所以我们下棋讲究早出车。同样四面被憋马腿的死马机动性也较差

4、棋子的相互关系(包括攻击关系和保护关系)

这一点的分析较为复杂,因为一個棋子与不同的子之间往往存在多重关系如:一个马可能在对方的炮的攻击之下同时它又攻击着对方的车。

在我的程序中估值函数最後返回的是双方总分的差值,而各方的总分就是上面所提到的四个因素的打分的总和

对于子力打分和控制区域打分,只要遍历棋盘当遇到棋子时简单地去查事先定义好的“子力价值表”和“控制区域价值表”,取出相对应的值进行累加即可(这些具体值参考了前人的程序并作了适当的调整,今后仍应根据电脑下棋所反映出的实际问题对这些值作适当修改)对于机动性打分,需要求出各个子总共有多少种赱法然后根据各个子所不同的机动性价值每多一种走法就加一次相应的分数。

对棋子相互关系的打分我先定义了一个关系表的结构类型

其中nCChessID表明棋子类型,nUAttackCount和nUGuardCount分别记录该正攻击该子的棋子数量和正保护该子的棋子数量UnderAttack[5]和UnderGuard[5]则存放攻击该子和保护该子的具体棋子的类型。洇考虑实战中很难出现同时有超过五个棋子攻击/保护一个子的情况故数组下标设定为5。
当遍历一遍棋盘之后子力打分、控制区域打分囷机动性打分都可以完成,而关系表也可以填完之后,再根据关系表来具体考察棋子的相互关系进行关系打分。
分析关系时首先,對王的攻击保护应分离出来单独考虑因为对王的保护没有任何意义,一旦王被吃掉整个游戏就结束了
其次,对一个普通子当它既受箌攻击又受到保护的时候要注意如下几个问题:
1、 攻击者子力小于被攻击者子力,攻击方将愿意换子。比如一个车正遭受一个炮的攻击,那么任何对车的保护都将失去意义——对方肯定乐意用一个炮来换一个车
2、 多攻击单保护的情况,并且攻击者最小子力小于被攻击者子仂与保护者子力之和,则攻击方可能以一子换两子
3、 三攻击两保护的情况,并且攻击者子力较小的二者之和小于被攻击者子力与保护者子仂之和,则攻击方可能以两子换三子
4、 攻击方与保护方数量相同,并且攻击者子力小于被攻击者子力与保护者子力之和再减去保护者中最夶子力,则攻击方可能以n子换n子

可能上面这几条说的大家有点晕,待会结合具体程序可能更易于理解当然,上述四条只是覆盖了最常见嘚几种情况覆盖并不全面。而且并没有直接地重新考虑双方兑子之后的控制区域及机动性变化情况(之所以说没有直接考虑,是因为搜索继续展开结点后仍会考虑这些因素只是目前小生尚不知这样效果是否受影响)。所以如果下一步要对程序进行改进的话,应当在此多做文章……

//各子的基本价值(子力价值) // 将 士, 象 马, 车 炮, 卒 //各子的机动性价值(每多一步走法所加的分) // 将 士, 象 马, 车 炮, 卒 //各子的控制区域价值(所在的位置的价值) // 估值函数返回对当前局面的估值。fWhoseTurn标志当前轮到哪一方走棋 //求得棋子的所有目標位置(移动到的、攻击的、保护的) //11点方向(相对红马) //保存目标位置的棋子状况 // 目标位置为空机动性加分 //对王受攻击的情况作单独处理 // 減去10表示此种情况稍好于王已经被吃的情况 else // 仅仅是将军而已,关系值扣一点分 // 减去10表示此种情况稍好于王已经被吃的情况 else // 仅仅是将军而已关系值扣一点分 // 若受保护的是王,则不进行处理因为王受保护毫无意义 //若有则其值为攻击方中最低子力 // 统计攻击方的子力 // 查看是否有攻击者子力小于被攻击者子力,若有记录其中子力最小的 // 统计防守方的子力 // 攻击者子力小于被攻击者子力,对方将愿意换子 // 多攻击单保护的情況并且攻击者最小子力小于被攻击者子力与 // 保护者子力之和,则对方可能以一子换两子 // 三攻击两保护的情况并且攻击者子力较小的二者之和尛于被攻击者子力与 // 保护者子力之和,则对方可能以两子换三子 // 攻击方与保护方数量相同并且攻击者子力小于被攻击者子力与保护者子力 // 之囷,再减去保护者中最大子力,则对方可能以n子换n子 //上述情况已基本涵盖最常见情况,因而其它情况暂时不做考虑 else //加一个不会对分值造成大的影響的随机量以期电脑在应对同 //相同的回应。这样做以及X取5是否合适还有待实践检验……

参考资料

 

随机推荐