穷人的中国象棋记谱Python程序

def mv2str (fx, fy, tx, ty):
  d = abs(fy - ty)
  c = b[fy][fx]; red = c < 'a'
  m = p[c]
  x = "九八七六五四三二一" if red else "123456789"
  m += x[fx]
  if fy == ty: m += "" + x[tx]
  else:
    m += "" if red == (fy > ty) else "退"
    if   c in "RCPK": m += "零一二三四五六七八九"[d]
    elif c in "rcpk": m += "0123456789"[d]
    else: m += x[tx]
  return m

p = {"r":"", "n":"", "c":"", "b":"", "B":"","a":"", "A":"", "k":"", "K":"", "p":"", "P":""}
p['R'] = p['r']; p['N'] = p['n']; p['C'] = p['c']
b = [[' '] * 9 for i in range(10)]

曾想实现前马后马,但被中兵劝退了。

1. ‌基本记谱规则‌

  • 记谱通常由四字组成:棋子名称 + 纵线编号 + 移动方向(平/进/退) + 格数或目标纵线‌
  • 例如:“炮二平五”表示红炮从纵线二平移到纵线五,“马8进7”表示黑马从纵线8前进到纵线7‌

2. ‌前马与后马的定义‌

  • 当同一纵线上存在两个同名棋子(如两个马)时,需用“前”或“后”区分位置靠前或靠后的棋子‌
    • ‌前马‌:靠近对方底线(红方为上方,黑方为下方)的棋子。
    • ‌后马‌:靠近己方底线(红方为下方,黑方为上方)的棋子。
  • 示例:
    • “前马退六”:红方纵线六的前马后退到直线六‌
    • “后炮平四”:红方纵线六的后炮平移至纵线四‌

3. ‌特殊情况‌

  • 若纵线上有三个及以上同名棋子(如兵卒),需用“前、中、后”或“前二三四”等进一步区分‌

AI真是靠不住:

① 前几天说前马是靠近己方底线的,我觉得和“兵七进一” 、“前进”、“前敌指挥部”等的”前”相反。追问数次,它一口咬定。今天变成靠近对方底线了。

② 时至今日,还在“格数”。让它画中国象棋棋盘和棋子(已加上中国二字),时不时就画成chess的。

给博客园点个大赞:格式丰富;不审他妈B的核;编辑不限制修改量;可修改很早前的文章… 比狗日的头条强太多了。

劝同行们别在尽日头条发代码了:

① 竖屏看起来极其难受

② 时不时就不能插入代码块了

③ 头条的受众是看吃播和爽剧的

posted @ 2025-10-07 15:18  华容道专家  阅读(7)  评论(0)    收藏  举报