risendy/pgn-parser-bundle

该包的最新版本(v1.0.2)没有可用的许可信息。

Symfony Pgn 解析包

安装: 12

依赖: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

v1.0.2 2021-02-02 15:26 UTC

This package is auto-updated.

Last update: 2024-09-29 05:49:04 UTC


README

基本信息

这是一个简单的 symfony 包,用于解析 PGN 国际象棋记谱。PGN 应该以字符串格式存在,默认标签分隔符为换行符。标签和走法之间应该至少有一个空行,因为它用于处理 PGN 字符串。

功能

  • 提取以字符串/json/数组/对象数组格式的走法
  • 获取特定走法(黑方或白方)
  • 获取特定走法注释
  • 获取第一个/最后一个走法
  • 提取字符串格式的标签
  • 通过名称获取标签值

安装

composer require risendy/pgn-parser-bundle

使用

解析 PGN 字符串

$game = new ChessParser();
$game->parsePgn($pgn);

获取字符串格式的走法

$moves = $game->getMovesString();

result:
string(15) "e4 e6 d4 d5 0-1"

获取 JSON 格式的走法

$json = $game->createJsonArray();

result:
{
   "tags":{
      "Event":"Lets Play!",
      "Site":"Chess.com",
      "Date":"2018.12.04",
      "Round":"?",
      "White":"guilherme_1910",
      "Black":"bmbio",
      "Result":"0-1",
      "TimeControl":"1\/259200:0"
   },
   "moves":[
      {
         "moveNumber":1,
         "white":"e4",
         "black":"e6"
      },
      {
         "moveNumber":2,
         "white":"d4",
         "black":null
      }
   ]
}

获取数组格式的走法

$moves = $game->getSimpleMovesArray();

result:
array(5) {
  [0]=>
  string(2) "e4"
  [1]=>
  string(2) "e6"
  [2]=>
  string(2) "d4"
  [3]=>
  string(2) "d5"
  [4]=>
  string(3) "0-1"
}

获取对象数组格式的走法

$moves = $game->getObjectMovesArray();

result:
array(3) {
  [1]=>
  array(2) {
    [0]=>
    object(PgnParser\Move)#22 (3) {
      ["move":"PgnParser\Move":private]=>
      string(2) "e4"
      ["moveNumber":"PgnParser\Move":private]=>
      int(1)
      ["moveColor":"PgnParser\Move":private]=>
      string(1) "W"
    }
    [1]=>
    object(PgnParser\Move)#23 (3) {
      ["move":"PgnParser\Move":private]=>
      string(2) "e6"
      ["moveNumber":"PgnParser\Move":private]=>
      int(1)
      ["moveColor":"PgnParser\Move":private]=>
      string(1) "B"
    }
  }
  [2]=>
  array(2) {
    [0]=>
    object(PgnParser\Move)#24 (3) {
      ["move":"PgnParser\Move":private]=>
      string(2) "d4"
      ["moveNumber":"PgnParser\Move":private]=>
      int(2)
      ["moveColor":"PgnParser\Move":private]=>
      string(1) "W"
    }
    [1]=>
    object(PgnParser\Move)#25 (3) {
      ["move":"PgnParser\Move":private]=>
      string(2) "d5"
      ["moveNumber":"PgnParser\Move":private]=>
      int(2)
      ["moveColor":"PgnParser\Move":private]=>
      string(1) "B"
    }
  }
  [3]=>
  array(1) {
    [0]=>
    object(PgnParser\Move)#26 (3) {
      ["move":"PgnParser\Move":private]=>
      string(3) "0-1"
      ["moveNumber":"PgnParser\Move":private]=>
      int(3)
      ["moveColor":"PgnParser\Move":private]=>
      string(1) "W"
    }
  }
}

获取特定走法实例

$move = $game->getMove(2, 'B');

result:
object(PgnParser\Move)#75 (4) {
["san":"PgnParser\Move":private]=>
string(2) "d4"
["moveNumber":"PgnParser\Move":private]=>
int(2)
["moveColor":"PgnParser\Move":private]=>
string(1) "W"
["comment":"PgnParser\Move":private]=>
string(4) "test"

获取特定走法的 SAN 表示

$move = $game->getMove(2, 'B')->getSan();

result:
string(2) "d5"

获取特定走法注释

$move = $game->getMove(2, 'B')->getComment();

result:
string(4) "test"

通过名称获取标签值

$tagValue = $game->getTagValueByName('Black');

result:
string(5) "bmbio"

测试

如果要在测试目录中运行测试,请按照以下步骤操作。