穷人的中国象棋记谱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的核;编辑不限制修改量;可修改很早前的文章… 比狗日的头条强太多了。
劝同行们别在尽日头条发代码了:
① 竖屏看起来极其难受
② 时不时就不能插入代码块了
③ 头条的受众是看吃播和爽剧的

浙公网安备 33010602011771号