p-chess/chess-bundle

提供与p-chess/chess库的集成

安装: 28

依赖: 0

建议者: 0

安全: 0

星标: 3

关注者: 3

分支: 0

开放问题: 0

类型:symfony-bundle

dev-main / 1.x-dev 2024-01-03 14:02 UTC

This package is auto-updated.

Last update: 2024-09-03 15:16:18 UTC


README

安装

运行composer require p-chess/chess-bundle

配置

创建一个扩展PChess\ChessBundle\HtmlOutput并实现所需方法的Service。你可能会在这里注入Symfony的路由服务,并使用它来返回所需的URL。请注意,每个路由都可以为你的游戏提供一个标识符。

创建一个配置文件,并使用以下内容

# config/packages/chess.yaml
chess:
    output_service: App\YourOutputService

这是定义路由的示例(使用“id”参数作为标识符)

# config/routes.yaml
move_start:
    path: /{id}/move/{from}
    methods: GET
    controller: ... # your controller action

move_cancel:
    path: /{id}
    methods: GET
    controller: ... # your controller action

move_promotion:
    path: /{id}/promote/{from}/{to}
    methods: GET
    controller: ... # your controller action

move_end:
    path: /{id}/move/{from}/{to}/{promotion}
    methods: GET
    controller: ... # your controller action
    defaults:
        promotion: ~

用法

你可以在你的控制器中注入实现\PChess\ChessBundle\ChessProviderInterface的Service,然后实现不同的动作,使用提供的\PChess\Chess\Chess对象。

在你的模板中,你可以使用Twig函数chess_render(chess)来渲染棋盘。如果你需要传递一个标识符,请使用chess_render(chess, identifier)代替。

你可以使用的主要Service是\PChess\ChessBundle\SessionChessProvider。此Service允许你在会话中保持棋局,提供以下方法

  • getChess($identifier, $fen)以获取主\PChess\Chess\Chess实例(如接口所提供)
  • restart($identifier)以重新开始游戏
  • save($identifier)以在会话中保存游戏
  • reverse($identifier)以切换双方
  • getAllowedMoves($chess, $from)以获取当前允许的移动列表(可选地限制在$from方格)

使用$identifier不是强制的。

样式

你可以使用提供的_board.scss文件来设置棋盘样式

@import '~@p-chess/chess-bundle/scss/board';

不要忘记使用npm或yarn更新你的前端文件。

最终结果应该像这样

持久化Chess对象

你可以轻松地将Chess对象保存到Doctrine(或其他类型的映射库)中,使用两个字段/属性:fenhistory。第一个是一个简单的字符串。第二个可以是simple_array(对于Doctrine),你应该在其中放置Mover::getHistoryStrings()方法的结果。在检索对象时,你应该使用fenMover::getHistoryEntries()的结果来重建你的Chess对象。