risendy / pgn-parser
PGN 国际象棋记谱解析器
dev-master
2019-10-16 17:35 UTC
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-17 05:21:51 UTC
README
基本信息
用PHP编写的简单的PGN国际象棋记谱解析器。PGN应该在字符串格式中,默认标签分隔符是换行符。标签和走法之间至少应该有一个空白行,因为这是处理PGN字符串的方式。
功能
- 以字符串/json/数组/对象数组格式提取走法
- 获取特定走法(黑方或白方)
- 获取特定走法注释
- 获取第一个/最后一个走法
- 以字符串格式提取标签
- 通过名称获取标签值
安装
composer require risendy/pgn-parser
用法
解析PGN字符串
$game = new Game();
$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"
测试
若要运行测试,请使用
./vendor/bin/phpunit --bootstrap vendor/autoload.php tests/PgnParserTest