diff --git a/modules/core/src/main/scala/de/nowchess/chess/view/Renderer.scala b/modules/core/src/main/scala/de/nowchess/chess/view/Renderer.scala index 3a7fafa..b572860 100644 --- a/modules/core/src/main/scala/de/nowchess/chess/view/Renderer.scala +++ b/modules/core/src/main/scala/de/nowchess/chess/view/Renderer.scala @@ -11,21 +11,18 @@ object Renderer: private val AnsiBlackPiece = "\u001b[30m" // black text def render(board: Board): String = - val sb = new StringBuilder - sb.append(" a b c d e f g h\n") - for rank <- (0 until 8).reverse do - sb.append(s"${rank + 1} ") - for file <- 0 until 8 do - val sq = Square(File.values(file), Rank.values(rank)) - val isLightSq = (file + rank) % 2 != 0 - val bgColor = if isLightSq then AnsiLightSquare else AnsiDarkSquare - val cellContent = board.pieceAt(sq) match + val rows = (0 until 8).reverse.map { rank => + val cells = (0 until 8).map { file => + val sq = Square(File.values(file), Rank.values(rank)) + val isLightSq = (file + rank) % 2 != 0 + val bgColor = if isLightSq then AnsiLightSquare else AnsiDarkSquare + board.pieceAt(sq) match case Some(piece) => val fgColor = if piece.color == Color.White then AnsiWhitePiece else AnsiBlackPiece s"$bgColor$fgColor ${piece.unicode} $AnsiReset" case None => s"$bgColor $AnsiReset" - sb.append(cellContent) - sb.append(s" ${rank + 1}\n") - sb.append(" a b c d e f g h\n") - sb.toString + }.mkString + s"${rank + 1} $cells ${rank + 1}" + }.mkString("\n") + s" a b c d e f g h\n$rows\n a b c d e f g h\n"