From 1d1877f79e084939e9b7d1296dcd99fde5f63226 Mon Sep 17 00:00:00 2001 From: overflowerror Date: Fri, 5 Jan 2024 14:40:06 +0100 Subject: [PATCH] feat: Add board visualisation --- src/Game/Game.php | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/Game/Game.php b/src/Game/Game.php index 5b895fe..99449f6 100644 --- a/src/Game/Game.php +++ b/src/Game/Game.php @@ -245,6 +245,48 @@ class Game { } public function visualize(): string { + $result = " "; + for ($file = 0; $file < 8; $file++) { + $result .= chr(ord('A') + $file) . " "; + } + + $result .= "\n"; + + for ($rank = 7; $rank >= 0; $rank--) { + $result .= ($rank + 1) . " "; + + for ($file = 0; $file < 8; $file++) { + $color = ($rank % 2) ^ ($file % 2); + $result .= "\033[" . ($color ? 47 : 100) . "m"; + + $piece = current(array_filter($this->pieces, fn($p) => $p->getPosition()->equals(new Position($rank, $file)))); + if ($piece) { + if ($piece->getSide() == Side::WHITE) { + $result .= "\033[97m"; + } else { + $result .= "\033[30m"; + } + + $result .= $piece->getShort() . " "; + } else { + $result .= " "; + } + + $result .= "\033[0m"; + } + + $result .= " " . ($rank + 1) . "\n"; + } + + $result .= " "; + + for ($file = 0; $file < 8; $file++) { + $result .= chr(ord('A') + $file) . " "; + } + + $result .= "\n"; + + return $result; } } \ No newline at end of file