toFEN method

String toFEN()

Implementation

String toFEN() {
  StringBuffer fenBuffer = StringBuffer();
  // Piece placement
  for (int row = 0; row < 8; row++) {
    int emptyCount = 0;
    for (int col = 0; col < 8; col++) {
      ChessPiece? piece = board[row][col];
      if (piece == null) {
        emptyCount++;
      } else {
        if (emptyCount > 0) {
          fenBuffer.write(emptyCount);
          emptyCount = 0;
        }
        fenBuffer.write(ChessBoardInterface.getPieceChar(piece));
      }
    }
    if (emptyCount > 0) fenBuffer.write(emptyCount);
    if (row < 7) fenBuffer.write("/");
  }

  // Active color (turn)
  fenBuffer.write(" ");
  fenBuffer.write(turn == PieceColor.white ? "w" : "b");

  // Castling availability
  fenBuffer.write(" ");
  fenBuffer.write(getCastlingRights());

  // En passant target square (using "-" as default, modify if you have one)
  fenBuffer.write(" ");
  fenBuffer.write(
    enPassantTarget != null
        ? "${String.fromCharCode('a'.codeUnitAt(0) + enPassantTarget!.col)}${8 - enPassantTarget!.row}"
        : "-",
  );

  // Halfmove clock and fullmove number (defaults here)
  fenBuffer.write(" ");
  fenBuffer.write(halfMoveClock);
  fenBuffer.write(" ");
  fenBuffer.write(fullMoveNumber);

  return fenBuffer.toString();
}