python - 从 Python 中的位置数组生成棋盘图?
问题描述
我有一个数组,它对应于棋盘上棋子的位置,如下所示:
['em', 'bn', 'em', 'wr', 'em', 'wp', 'em', 'em']
['br', 'em', 'bp', 'em', 'em', 'bn', 'wn', 'em']
['em', 'em', 'bp', 'bp', 'bp', 'em', 'wp', 'bp']
['bp', 'bp', 'em', 'bp', 'wn', 'em', 'wp', 'em']
....
“b”和“w”表示黑白。
n:骑士
r:车
p:典当
b:主教
k:国王
q:王后
我想知道是否存在一些实用程序可以获取这个数组或类似的东西并生成棋盘的图片。存在许多使用 FEN 或 PGN 表示法的板生成器,但我无权访问它。我确实在谷歌上做了很多搜索,但我找不到任何东西。
谢谢!
解决方案
将您的表示转换为标准表示并不困难。例如,您可以使用如下函数转换为 FEN:
import io
def board_to_fen(board):
# Use StringIO to build string more efficiently than concatenating
with io.StringIO() as s:
for row in board:
empty = 0
for cell in row:
c = cell[0]
if c in ('w', 'b'):
if empty > 0:
s.write(str(empty))
empty = 0
s.write(cell[1].upper() if c == 'w' else cell[1].lower())
else:
empty += 1
if empty > 0:
s.write(str(empty))
s.write('/')
# Move one position back to overwrite last '/'
s.seek(s.tell() - 1)
# If you do not have the additional information choose what to put
s.write(' w KQkq - 0 1')
return s.getvalue()
在一些板数据上对其进行测试:
board = [
['bk', 'em', 'em', 'em', 'em', 'em', 'em', 'em'],
['em', 'bn', 'em', 'wr', 'em', 'wp', 'em', 'em'],
['br', 'em', 'bp', 'em', 'em', 'bn', 'wn', 'em'],
['em', 'em', 'bp', 'bp', 'bp', 'em', 'wp', 'bp'],
['bp', 'bp', 'em', 'bp', 'wn', 'em', 'wp', 'em'],
['em', 'em', 'em', 'em', 'em', 'em', 'em', 'em'],
['em', 'em', 'em', 'wk', 'em', 'em', 'em', 'em'],
['em', 'em', 'em', 'em', 'em', 'em', 'em', 'em'],
]
print(board_to_fen(board))
# k7/1n1R1P2/r1p2nN1/2ppp1Pp/pp1pN1P1/8/3K4/8 w KQkq - 0 1
例如,在Chess.com中可视化 FEN 字符串会产生:
推荐阅读
- c# - 如何通过更改源处理来自 Cosmos DB 中不同容器的更改
- json - 如何使用颤振将数据发送到互联网 HTTP Post 请求(已修复)
- bash - head 命令删除部分行
- python - 将 Pandas DataFrame 传递给函数的最佳实践
- monaco-editor - 现有语言的新标记
- indexing - PostgreSQL:多列索引(jsonb,整数)部分与@>和=条件一起使用
- cucumber - 无法调用“com.aventstack.extentreports.ExtentTest.fail(com.aventstack.extentreports.markuputils.Markup)”,因为“extenttest”为空
- spring - 在 Spring + Thymeleaf 3.0.12+ 中保留换行符
- python - 在 django FileNotFoundError 上运行 collectstatic 时出错:
- excel - 使用 VBA 从 pdf 导出到 excel