重构: aiohttp 全异步 + chessdb 云库 + uv 管理

This commit is contained in:
AwesomeXiangQi committed 2026-09-13 13:50:11 +08:00
commit 8d996b8c5f
13 files changed
+1726

No files matched your search

+67
View File
@@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
"""坐标转换: 站点坐标(行1-10) <-> 引擎 UCCI(行0-9), 以及 FEN 构建。"""
import re
MOVE_RE = re.compile(r'^([a-i])(\d+)([a-i])(\d+)$')
INITIAL_GRID = (
'rnbakabnr'
'.........'
'.c.....c.'
'p.p.p.p.p'
'.........'
'.........'
'P.P.P.P.P'
'.C.....C.'
'.........'
'RNBAKABNR'
)
def _sub(m, delta):
return f'{m.group(1)}{int(m.group(2)) + delta}{m.group(3)}{int(m.group(4)) + delta}'
def site_to_ucci(m):
"""'b3e3'->'b2e2', 'h10g8'->'h9g7' (站点行号 1-10, 引擎行号 0-9)."""
return MOVE_RE.sub(lambda x: _sub(x, -1), m)
def ucci_to_site(m):
"""'b2e2'->'b3e3', 'h9g7'->'h10g8'."""
return MOVE_RE.sub(lambda x: _sub(x, +1), m)
def ucci_to_rc(m):
"""UCCI 'b2e2' -> ((row,col),(row,col)); row 0 = 黑方底线(FEN 首行) = 9 - rank."""
g = MOVE_RE.match(m)
if not g:
raise ValueError(f'走法格式错误: {m}')
return (9 - int(g.group(2)), ord(g.group(1)) - 97), (9 - int(g.group(4)), ord(g.group(3)) - 97)
def fen_from_moves(moves_ucci):
"""从初始局面盲走生成 FEN(不走法合法性校验, 走法来自服务器视为可信)。"""
grid = list(INITIAL_GRID)
turn = 'w'
for m in moves_ucci:
(r1, c1), (r2, c2) = ucci_to_rc(m)
grid[r2 * 9 + c2] = grid[r1 * 9 + c1]
grid[r1 * 9 + c1] = '.'
turn = 'b' if turn == 'w' else 'w'
rows = []
for r in range(10):
row, empty = '', 0
for c in range(9):
ch = grid[r * 9 + c]
if ch == '.':
empty += 1
else:
if empty:
row += str(empty)
empty = 0
row += ch
if empty:
row += str(empty)
rows.append(row)
return '/'.join(rows) + f' {turn} - - 0 1'