p-chess / chess-bundle
提供与p-chess/chess库的集成
Requires
- php: ^8.0
- p-chess/chess: ^0.4
- symfony/config: ^5.4 || ^6.4 || ^7.0
- symfony/dependency-injection: ^5.4 || ^6.4 || ^7.0
- symfony/http-kernel: ^5.4 || ^6.4 || ^7.0
- symfony/routing: ^5.4 || ^6.4 || ^7.0
- twig/twig: ^3.0
Requires (Dev)
- dg/bypass-finals: ^1.3
- phpunit/phpunit: ^9.6
- symfony/phpunit-bridge: ^7.0
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(或其他类型的映射库)中,使用两个字段/属性:fen
和history
。第一个是一个简单的字符串。第二个可以是simple_array
(对于Doctrine),你应该在其中放置Mover::getHistoryStrings()
方法的结果。在检索对象时,你应该使用fen
和Mover::getHistoryEntries()
的结果来重建你的Chess
对象。