一个纯 Python 将棋库,具有移动生成、验证和处理常见格式的功能。
项目描述
介绍
这是用纯 Python 编写的将棋模块。它基于 python-chess 提交 6203406259504cddf6f271e6a7b1e04ba0c96165。
这是python-shogi中的学者伙伴:
>>> import shogi
>>> board = shogi.Board()
>>> board.push(shogi.Move.from_usi('7g7f'))
>>> board.push_usi('3c3d')
Move.from_usi('3c3d')
>>> board.push_usi('8h2b+')
Move.from_usi('8h2b+')
>>> board.push_usi('4a5b')
Move.from_usi('4a5b')
>>> board.push_usi('B*4b')
Move.from_usi('B*4b')
>>> board.push_usi('5a4a')
Move.from_usi('5a4a')
>>> board.push_usi('2b3a')
Move.from_usi('2b3a')
>>> board.is_checkmate()
True
特征
支持 Python 2.7 和 Python 3.3+。
支持标准将棋 (hon shogi)
合法移动生成器和移动验证。
>>> shogi.Move.from_usi("5i5a") in board.legal_moves False
制定和取消行动。
>>> last_move = board.pop() # Unmake last move >>> last_move Move.from_usi('2b3a') >>> board.push(last_move) # Restore
展示一个简单的 ASCII 板。
>>> print(board) l n s g . k +B n l . r . . g B . . . p p p p p p . p p . . . . . . p . . . . . . . . . . . . . P . . . . . . P P . P P P P P P . . . . . . . R . L N S G K G S N L <BLANKLINE> S*1
展示一个 KIF 风格的板。
>>> print(board.kif_str()) 後手の持駒: 9 8 7 6 5 4 3 2 1 +---------------------------+ |v香v桂v銀v金 ・v玉 馬v桂v香|一 | ・v飛 ・ ・v金 角 ・ ・ ・|二 |v歩v歩v歩v歩v歩v歩 ・v歩v歩|三 | ・ ・ ・ ・ ・ ・v歩 ・ ・|四 | ・ ・ ・ ・ ・ ・ ・ ・ ・|五 | ・ ・ 歩 ・ ・ ・ ・ ・ ・|六 | 歩 歩 ・ 歩 歩 歩 歩 歩 歩|七 | ・ ・ ・ ・ ・ ・ ・ 飛 ・|八 | 香 桂 銀 金 玉 金 銀 桂 香|九 +---------------------------+ 先手の持駒: 銀
检测将死,僵局。
>>> board.is_stalemate() False >>> board.is_game_over() True
检测重复。有一个半移动时钟。
>>> board.is_fourfold_repetition() False >>> board.move_number 8
检测检查和攻击。
>>> board.is_check() True >>> board.is_attacked_by(shogi.BLACK, shogi.A4) True >>> attackers = board.attackers(shogi.BLACK, shogi.H5) >>> attackers SquareSet(0b111000010000000000000000000000000000000000000000000000000000000000000000000000) >>> shogi.H2 in attackers True >>> print(attackers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . 1 1 1 . . .
解析并创建移动的 USI 表示。
>>> board = shogi.Board() >>> shogi.Move(shogi.E2, shogi.E4).usi() '2e4e'
解析和创建 SFEN
>>> board.sfen() 'lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1' >>> board.piece_at(shogi.I5) Piece.from_symbol('K')
阅读 KIF。
>>> import shogi.KIF >>> kif = shogi.KIF.Parser.parse_file('data/games/habu-fujii-2006.kif')[0] >>> kif['names'][shogi.BLACK] '羽生善治' >>> kif['names'][shogi.WHITE] '藤井猛' >>> kif['moves'] # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE ['7g7f', '3c3d', ..., '9a9b', '7a7b+'] >>> kif['win'] 'b'
使用 CSA 协议进行通信。
解析职业将棋选手的名字
>>> import shogi.Person
>>> shogi.Person.Name.is_professional('羽生 善治 名人・棋聖・王位・王座') True
表现
python-shogi 不适用于性能至关重要的严肃将棋引擎。目标是创建一个简单且相对高级的库。
您可以安装gmpy2或gmpy ( https://code.google.com/p/gmpy/ ) 模块,以便在位扫描和人口计数等基本操作上获得轻微的性能提升。
python-shogi 只会从本地库中导入非常基本的通用(非将棋相关)操作。所有逻辑都是纯 Python。总会有纯 Python 的后备。
安装
用点子:
sudo pip install python-shogi
从当前源代码:
python setup.py sdist sudo python setup.py install
如何测试
> nosetests or > python setup.py test # requires python setup.py install
如果要从标准输出打印行,请执行如下的鼻子测试。
> nosetests -s
如果要在不同的 Python 版本之间进行测试,请执行 tox。
> pip install tox > tox
如何释放
rm -rf dist python setup.py sdist twine upload dist/*
去做
支持 USI 协议。
支持 board.generate_attacks() 并在 board.is_attacked_by() 和 board.attacker_mask() 中使用。
移除旋转位板并支持Shatranj 风格的直接查找,如最近的 python-chess。
支持 CSA TCP 协议中的 %MATTA 等。
支持 board.is_pinned() 和 board.pin()。