From 640a449ead5b7431299e752290055a8996c5a95d Mon Sep 17 00:00:00 2001 From: standard Date: Mon, 3 Feb 2025 12:18:51 +0100 Subject: [PATCH] Refactored PieceArray as PieceArrayFactory --- src/Variant/Capablanca/FEN/StrToBoard.php | 6 +++--- .../CapablancaFischer/FEN/StrToBoard.php | 6 +++--- src/Variant/Chess960/FEN/StrToBoard.php | 6 +++--- src/Variant/Classical/FEN/StrToBoard.php | 6 +++--- src/Variant/Dunsany/FEN/StrToBoard.php | 6 +++--- src/Variant/Losing/FEN/StrToBoard.php | 6 +++--- .../{PieceArray.php => PieceArrayFactory.php} | 17 +++++++++-------- src/Variant/RacingKings/FEN/StrToBoard.php | 6 +++--- 8 files changed, 30 insertions(+), 29 deletions(-) rename src/Variant/{PieceArray.php => PieceArrayFactory.php} (69%) diff --git a/src/Variant/Capablanca/FEN/StrToBoard.php b/src/Variant/Capablanca/FEN/StrToBoard.php index ba13273a..c3271f55 100644 --- a/src/Variant/Capablanca/FEN/StrToBoard.php +++ b/src/Variant/Capablanca/FEN/StrToBoard.php @@ -4,7 +4,7 @@ use Chess\Exception\UnknownNotationException; use Chess\Variant\AbstractBoard; -use Chess\Variant\PieceArray; +use Chess\Variant\PieceArrayFactory; use Chess\Variant\Capablanca\Board; use Chess\Variant\Capablanca\CastlingRule; use Chess\Variant\Capablanca\FEN\Str; @@ -27,12 +27,12 @@ public function __construct(string $string) public function create(): AbstractBoard { try { - $pieces = (new PieceArray( + $pieces = PieceArrayFactory::create( $this->fenStr->toArray($this->fields[0]), $this->square, $this->castlingRule, $this->namespace - ))->pieces; + ); $board = new Board($pieces, $this->castlingAbility); $board->turn = $this->fields[1]; $board->startFen = $this->string; diff --git a/src/Variant/CapablancaFischer/FEN/StrToBoard.php b/src/Variant/CapablancaFischer/FEN/StrToBoard.php index f3e874c0..86848745 100644 --- a/src/Variant/CapablancaFischer/FEN/StrToBoard.php +++ b/src/Variant/CapablancaFischer/FEN/StrToBoard.php @@ -4,7 +4,7 @@ use Chess\Exception\UnknownNotationException; use Chess\Variant\AbstractBoard; -use Chess\Variant\PieceArray; +use Chess\Variant\PieceArrayFactory; use Chess\Variant\CapablancaFischer\Board; use Chess\Variant\CapablancaFischer\CastlingRule; use Chess\Variant\Capablanca\FEN\Str; @@ -30,12 +30,12 @@ public function __construct(string $string, array $startPos) public function create(): AbstractBoard { try { - $pieces = (new PieceArray( + $pieces = PieceArrayFactory::create( $this->fenStr->toArray($this->fields[0]), $this->square, $this->castlingRule, $this->namespace - ))->pieces; + ); $board = new Board($this->startPos, $pieces, $this->castlingAbility); $board->turn = $this->fields[1]; $board->startFen = $this->string; diff --git a/src/Variant/Chess960/FEN/StrToBoard.php b/src/Variant/Chess960/FEN/StrToBoard.php index e0715b92..6a8f3d0d 100644 --- a/src/Variant/Chess960/FEN/StrToBoard.php +++ b/src/Variant/Chess960/FEN/StrToBoard.php @@ -4,7 +4,7 @@ use Chess\Exception\UnknownNotationException; use Chess\Variant\AbstractBoard; -use Chess\Variant\PieceArray; +use Chess\Variant\PieceArrayFactory; use Chess\Variant\Chess960\Board; use Chess\Variant\Chess960\CastlingRule; use Chess\Variant\Classical\FEN\Str; @@ -30,12 +30,12 @@ public function __construct(string $string, array $startPos) public function create(): AbstractBoard { try { - $pieces = (new PieceArray( + $pieces = PieceArrayFactory::create( $this->fenStr->toArray($this->fields[0]), $this->square, $this->castlingRule, $this->namespace - ))->pieces; + ); $board = new Board($this->startPos, $pieces, $this->castlingAbility); $board->turn = $this->fields[1]; $board->startFen = $this->string; diff --git a/src/Variant/Classical/FEN/StrToBoard.php b/src/Variant/Classical/FEN/StrToBoard.php index 7f24397a..e8d49345 100644 --- a/src/Variant/Classical/FEN/StrToBoard.php +++ b/src/Variant/Classical/FEN/StrToBoard.php @@ -4,7 +4,7 @@ use Chess\Exception\UnknownNotationException; use Chess\Variant\AbstractBoard; -use Chess\Variant\PieceArray; +use Chess\Variant\PieceArrayFactory; use Chess\Variant\Classical\Board; use Chess\Variant\Classical\CastlingRule; use Chess\Variant\Classical\FEN\Str; @@ -41,12 +41,12 @@ public function __construct(string $string) public function create(): AbstractBoard { try { - $pieces = (new PieceArray( + $pieces = PieceArrayFactory::create( $this->fenStr->toArray($this->fields[0]), $this->square, $this->castlingRule, $this->namespace - ))->pieces; + ); $board = new Board($pieces, $this->castlingAbility); $board->turn = $this->fields[1]; $board->startFen = $this->string; diff --git a/src/Variant/Dunsany/FEN/StrToBoard.php b/src/Variant/Dunsany/FEN/StrToBoard.php index 9fcb649e..cbc98e9d 100644 --- a/src/Variant/Dunsany/FEN/StrToBoard.php +++ b/src/Variant/Dunsany/FEN/StrToBoard.php @@ -4,7 +4,7 @@ use Chess\Exception\UnknownNotationException; use Chess\Variant\AbstractBoard; -use Chess\Variant\PieceArray; +use Chess\Variant\PieceArrayFactory; use Chess\Variant\Classical\CastlingRule; use Chess\Variant\Classical\FEN\StrToBoard as ClassicalFenStrToBoard; use Chess\Variant\Classical\PGN\Square; @@ -27,12 +27,12 @@ public function __construct(string $string) public function create(): AbstractBoard { try { - $pieces = (new PieceArray( + $pieces = PieceArrayFactory::create( $this->fenStr->toArray($this->fields[0]), $this->square, $this->castlingRule, $this->namespace - ))->pieces; + ); $board = new Board($pieces, $this->castlingAbility); $board->turn = $this->fields[1]; $board->startFen = $this->string; diff --git a/src/Variant/Losing/FEN/StrToBoard.php b/src/Variant/Losing/FEN/StrToBoard.php index 98de21d6..e7e312f7 100644 --- a/src/Variant/Losing/FEN/StrToBoard.php +++ b/src/Variant/Losing/FEN/StrToBoard.php @@ -4,7 +4,7 @@ use Chess\Exception\UnknownNotationException; use Chess\Variant\AbstractBoard; -use Chess\Variant\PieceArray; +use Chess\Variant\PieceArrayFactory; use Chess\Variant\Classical\CastlingRule; use Chess\Variant\Classical\FEN\StrToBoard as ClassicalFenStrToBoard; use Chess\Variant\Classical\PGN\Square; @@ -27,12 +27,12 @@ public function __construct(string $string) public function create(): AbstractBoard { try { - $pieces = (new PieceArray( + $pieces = PieceArrayFactory::create( $this->fenStr->toArray($this->fields[0]), $this->square, $this->castlingRule, $this->namespace - ))->pieces; + ); $board = new Board($pieces, $this->castlingAbility); $board->turn = $this->fields[1]; $board->startFen = $this->string; diff --git a/src/Variant/PieceArray.php b/src/Variant/PieceArrayFactory.php similarity index 69% rename from src/Variant/PieceArray.php rename to src/Variant/PieceArrayFactory.php index fd62b968..70d18807 100644 --- a/src/Variant/PieceArray.php +++ b/src/Variant/PieceArrayFactory.php @@ -9,12 +9,11 @@ use Chess\Variant\Classical\PGN\Square; use Chess\Variant\Classical\CastlingRule; -class PieceArray +class PieceArrayFactory { - public array $pieces; - - public function __construct(array $array, Square $square, CastlingRule $castlingRule = null, string $namespace) + public static function create(array $array, Square $square, CastlingRule $castlingRule = null, string $namespace) { + $pieces = []; foreach ($array as $i => $rank) { foreach ($rank as $j => $char) { if ($char !== '.') { @@ -27,18 +26,20 @@ public function __construct(array $array, Square $square, CastlingRule $castling } if ($char === Piece::R) { if ($sq === $castlingRule?->rule[$color][Piece::R][Castle::LONG]['from']) { - $this->pieces[] = new R($color, $sq, $square, RType::CASTLE_LONG); + $pieces[] = new R($color, $sq, $square, RType::CASTLE_LONG); } elseif ($sq === $castlingRule?->rule[$color][Piece::R][Castle::SHORT]['from']) { - $this->pieces[] = new R($color, $sq, $square, RType::CASTLE_SHORT); + $pieces[] = new R($color, $sq, $square, RType::CASTLE_SHORT); } else { - $this->pieces[] = new R($color, $sq, $square, RType::R); + $pieces[] = new R($color, $sq, $square, RType::R); } } else { $class = VariantType::getClass($char, $namespace); - $this->pieces[] = new $class($color, $sq, $square); + $pieces[] = new $class($color, $sq, $square); } } } } + + return $pieces; } } diff --git a/src/Variant/RacingKings/FEN/StrToBoard.php b/src/Variant/RacingKings/FEN/StrToBoard.php index f8a80466..df255829 100644 --- a/src/Variant/RacingKings/FEN/StrToBoard.php +++ b/src/Variant/RacingKings/FEN/StrToBoard.php @@ -4,7 +4,7 @@ use Chess\Exception\UnknownNotationException; use Chess\Variant\AbstractBoard; -use Chess\Variant\PieceArray; +use Chess\Variant\PieceArrayFactory; use Chess\Variant\Classical\FEN\StrToBoard as ClassicalFenStrToBoard; use Chess\Variant\Classical\PGN\Square; use Chess\Variant\RacingKings\Board; @@ -24,12 +24,12 @@ public function __construct(string $string) public function create(): AbstractBoard { try { - $pieces = (new PieceArray( + $pieces = PieceArrayFactory::create( $this->fenStr->toArray($this->fields[0]), $this->square, $this->castlingRule, $this->namespace - ))->pieces; + ); $board = new Board($pieces, $this->castlingAbility); $board->turn = $this->fields[1]; $board->startFen = $this->string;