象棋吧 关注:276,424贴子:6,022,183
  • 35回复贴,共1

循环局面的象棋棋规

只看楼主收藏回复

众所周知,象棋对于循环局面的棋规判断很复杂,要么就是不够严厉(长杀都可以)容易赖和。要么就是过于复杂,搞得像诉讼一样,程序都没法写。
本人吃饱了撑的,拟了一套原则上很简单的规定(保证计算机可执行),且拒绝赖和。并且最大程度上降低和棋率(除了闲循环对闲循环外,其它都能分胜负)。
按照这套规定也可以一定程度上丰富象棋策略(可以研究策略通过棋规来求胜求和,估计软件用这套规则对局,会有这种策略)。
不喜轻喷。


IP属地:上海来自Android客户端1楼2024-11-06 18:49回复
    (1)将,杀,捉的定义,及其他基础概念:
    一:将
    将:一方行棋后,如果再走一步能吃掉对方老将就叫将军。
    二:杀
    杀:一方行棋后,如果再走一步可以连将杀将死对方老将就叫杀。(注:必须是连将杀,如果是缓杀,即不是步步将军则不算杀)
    连将:连续X步棋都是将军(无论是否将死,X为任意正整数,也不管对方怎么应将),那么把这X步棋一起称为连将。
    连将杀:每一步都是将军,无论对方如何行棋,都可以每步将军直到将死对方,则为连将杀。
    三:捉
    捉的定义就相对比较复杂了
    捉由捉子和捉源共同构成,比如车捉马,那么车是捉源,马是被捉的,马是捉子。
    捉分为普通捉和抽将捉。
    普通捉:一方行棋后,如果再走一步,就可以用己方的棋子(捉源)吃掉对方的一个(除老将外的)棋子(捉子);并且在己方这步棋行棋前,这步(由捉子和捉源构成的)捉还不存在,那么这步棋就叫做捉。(当然还有特例。)
    捉由捉子和捉源构成,只要捉子捉源其中一个改变,那就是一个新的“捉”。如果捉源和捉子都没有变,则还是原来就存在的“捉”,不是新的“捉”。
    送吃:一方行棋后,轮到对方走,如果对方的棋子(吃源)就可以吃掉我方的一个棋子(吃子);并且在己方这步棋行棋前,这步(由吃子和吃源构成的)送吃还不存在,那么这步棋就叫做送吃。
    抽将捉:一方行棋后,如果再走一步,可以连将对方,连将之后,对方无论如何行棋,要么被连将杀将死,要么只能解将的同时送吃,那么我方这步棋也记为“捉(抽将捉)”。(如果对方存在一种选择解将的同时不送吃,那我方的这步行棋就不是捉。)此时吃源就是这步棋的捉源,吃子就是这步棋的捉子(同样捉源不能是将帅兵卒,捉子不能是未过河的兵卒)。
    捉的特例:
    1,捉源(吃源)为将帅兵卒时,该步不记作捉,记为闲。
    2,捉子(吃子)为未过河的兵卒时,该步不记作捉,记为闲。
    四:闲
    闲:如果一步棋,不是将,杀,捉,则这步棋为闲。


    IP属地:上海2楼2024-11-06 18:49
    回复
      (2)每步棋以及循环的严重程度:
      如果双方局面循环三次,则对双方循环的严重程度进行判定。
      首先判断每一步棋的严重程度:
      每一步行棋的严重程度是:将军》杀=捉》闲。
      如果一步棋有两种严重程度,则按更严重的那个严重程度算。(比如一步棋既是将军又是捉,那就算将军,因为将军更严重)。
      将军是最严重。杀,捉是次等严重。闲就是闲。
      接下来判断整个循环的严重程度:
      每方整个循环的严重程度就是该循环中严重程度最低的那一步棋的严重程度。(比如我方循环中,有将军,有杀,有闲,那我方整个循环的严重程度就是闲;对方循环中,有将军,有捉,无闲,那对方整个循环的严重程度就是次等严重。)
      整个循环的严重程度也是:将军》杀=捉》闲


      IP属地:上海3楼2024-11-06 18:49
      回复
        (3)连打序列和判断步:
        序列:双方连续的几步棋。(比如:红第1步,黑第2步,红第3步,黑第4步。从第红1步棋到黑第4步棋,就是一个连续的序列,长度为4。注意序列必须是连续的,不能有中断。序列的最小长度为1.)
        满足以下全部条件的序列就是连打序列:
        1,连打序列中的每一步棋必须都是打(即将/杀/捉),不能是闲。
        2,连打序列之前的一步棋必须比连打序列的第一步棋严重程度要低。
        3,从连打序列的第二步算起,每一步的严重程度必须小于等于上一步。
        判断步:让局面第一次出现第三次循环的那步棋就叫“判断步”。


        IP属地:上海4楼2024-11-06 18:50
        回复
          (4)循环局面胜负判定:
          比较双方整个循环的严重程度,如果有一方整个循环的严重程度更严重,则判负。
          如果双方整个循环的严重程度都是闲,则和棋。
          如果双方整个循环的严重程度一样,但不是闲,则看“判断步”所在的连打序列的第一步是哪方下的,该方判负。


          IP属地:上海5楼2024-11-06 18:50
          回复
            最后,我这套规则没有“25回合内循环和棋红变招”的规定。


            IP属地:上海6楼2024-11-06 18:50
            回复
              好了,棋规讲完。
              最后说明一下,为什么“捉”不看有根没根。首先是如果有根就不算捉的话,就会出现一楼图里那种赖和的情况。其次是为了执行方便,什么有根没根真根假根判断起来复杂,不如“能吃就算捉”简洁。而且,众所周知,兑子会简化局面容易和棋。所以“能吃就是捉”的话,就不允许长邀兑,保留了避兑的权力,保持局面复杂性,有利于减少和棋。


              IP属地:上海7楼2024-11-06 18:53
              回复
                还有,为什么规定“如果双方整个循环的严重程度一样,但不是闲,则看“判断步”所在的连打序列的第一步是哪方下的,该方判负。”呢?
                其实不用规定长将循环比长杀/捉循环严重,因为根据“如果双方整个循环的严重程度一样,但不是闲,则看“判断步”所在的连打序列的第一步是哪方下的,该方判负。”这条规则是可以推理得出将循环对杀/捉循环,一定是将循环判负,所以这条规则的逻辑其实是和“比较双方整个循环的严重程度,如果有一方整个循环的严重程度更严重,则判负。”这条规则相一致的。


                IP属地:上海8楼2024-11-06 18:56
                回复


                  IP属地:江苏来自iPhone客户端9楼2024-11-06 20:24
                  收起回复
                    没有人评论吗?我觉得这还是挺容易理解的。


                    IP属地:上海来自Android客户端10楼2024-11-07 15:13
                    回复
                      你这也很复杂


                      IP属地:上海来自Android客户端11楼2024-11-16 15:47
                      收起回复
                        看了,太繁杂了,简化便于执行才好


                        IP属地:四川来自Android客户端12楼2024-11-20 16:08
                        收起回复
                          你图中这个局面按照国内规则是不是红方变着不变作负?


                          IP属地:上海来自iPhone客户端13楼2024-11-20 20:51
                          收起回复
                            应该简化,允许长将判和


                            IP属地:北京来自Android客户端14楼2024-11-21 09:09
                            回复


                              IP属地:四川来自Android客户端15楼2024-11-21 12:26
                              收起回复