纯python shogi库,具有移动生成、验证和处理常见格式。

python-shogi的Python项目详细描述


https://travis-ci.org/gunyarakun/python-shogi.svghttps://coveralls.io/repos/gunyarakun/python-shogi/badge.svghttps://landscape.io/github/gunyarakun/python-shogi/prototype/landscape.svg?style=flathttps://badge.fury.io/py/python-shogi.svg

简介

这是用纯python编写的shogi模块。它基于python chess commit 6203406259504cddf6f271e6a7b1e04ba0c96165。

这是python shogi中的学者搭档:

>>>importshogi>>>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

功能

  • 支持Python2.7和Python3.3+。

  • 支持标准Shogi(Hon Shogi)

  • 合法移动生成器和移动验证。

    >>>shogi.Move.from_usi("5i5a")inboard.legal_movesFalse
  • 做和不做动作。

    >>>last_move=board.pop()# Unmake last move>>>last_moveMove.from_usi('2b3a')>>>board.push(last_move)# Restore
  • 显示一个简单的ascii板。

    >>>print(board)lnsg.k+Bnl.r..gB...pppppp.pp......p.............P......PP.PPPPPP.......R.LNSGKGSNL<BLANKLINE>S*1
  • 展示一个kif风格的棋盘。

    >>>print(board.kif_str())後手の持駒:+---------------------------+|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_number8
  • 检测检查和攻击。

    >>>board.is_check()True>>>board.is_attacked_by(shogi.BLACK,shogi.A4)True>>>attackers=board.attackers(shogi.BLACK,shogi.H5)>>>attackersSquareSet(0b111000010000000000000000000000000000000000000000000000000000000000000000000000)>>>shogi.H2inattackersTrue>>>print(attackers)......................................................................1....111...
  • 分析并创建移动的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')
  • 读写kifs。

    >>>importshogi.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协议通信。

    请看random_csa_tcp_match

  • 解析专业Shogi玩家的姓名

    >>> import shogi.Person
    
    >>> shogi.Person.Name.is_professional('羽生 善治 名人・棋聖・王位・王座')
    True
    

性能

python shogi不打算用于严重的shogi引擎 性能至关重要。目标是创建一个简单的 高级图书馆。

您可以安装gmpy2gmpyhttps://code.google.com/p/gmpy/)模块 为了在基本操作(如位扫描)上稍微提高性能 还有人口统计。

python shogi将只导入非常基本的general(与shogi无关) 本地库中的操作。所有的逻辑都是纯python。总会有 做纯粹的Python后援。

安装

  • 使用pip:

    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

如果要从标准输出中打印行,请执行如下的notests。

> nosetests -s

如果要在不同的python版本之间进行测试,请执行tox。

> pip install tox
> tox

待办事项

  • 支持USI协议。
  • 支持board.generate_attacks()并在board.is_attacked_by()和board.attacker_mask()中使用。
  • 移除旋转的位板,并像最近的python象棋一样支持Shatranj-style direct lookup
  • 支持CSA TCP协议中的%matta等。
  • 支撑板。被固定()和板。固定()。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在windows上向doclet添加多个sourcepath?   java谷歌地图应用程序   java为以下场景创建正则表达式   Java文件通道异常   Java集合如何将文件对象列表转换为路径对象列表?   多线程生产者/消费者模型使用Java(同步),但始终运行同一线程   java如何为存储在ArrayList中的特定属性设置值?   java一次不能加载多个osm文件   使用java 8将map<String,map<Long,customeObject>>转换为list<customeObject>   java JDK包含哪些脚本语言解释器?   java为什么eclipse在这里生成语法错误?   多线程Javasocket异常:socket已关闭且值为空   java我想在Android活动中创建一个带有图像的可滚动文本列表。我应该用什么?   java实现编译时警告   java根据安卓 SQLite数据库中前一行的相同值递增特定值   java移动迭代器语句使代码可编译   java JVM终身/旧代已达到限制&服务器挂起   为什么我们不能在映射上使用迭代器(Java)?   xml如何映射JAXB中已有的JavaBean