Board(Grid) -> FEN

This commit is contained in:
cdricms
2024-06-28 18:30:28 +02:00
parent c79e80680c
commit 501484558a
4 changed files with 64 additions and 5 deletions

View File

@@ -14,7 +14,7 @@ public struct Fen: CustomStringConvertible {
case All = "KQkq"
}
private var _fen: String = ""
private var value: String {
public private(set) var value: String {
get {
return _fen
}
@@ -63,14 +63,49 @@ public struct Fen: CustomStringConvertible {
self.value = value
}
internal mutating func set(
from board: Board.Grid, castiling ca: CastlingAvailibility,
enPassant: String
) {
#warning(
"Determine active color, halfMoveClock, fullMoveClock based on history SAN later passed in arguments"
)
var placement = ""
var rankNr = 0
for rank in board {
var count = 0
for i in 0..<rank.count {
let file = rank[i]
if let piece = file.piece {
if count > 0 {
placement += String(count)
count = 0
}
placement += piece.kind.fenRepresentation(with: piece.color)
} else {
count += 1
}
}
if count > 0 {
placement += String(count)
}
if rankNr != rank.count - 1 {
placement += "/"
}
rankNr += 1
}
value = placement + " w " + ca.rawValue + " " + enPassant + " 0 " + "1"
}
public enum FenError: Error {
case InvalidCharacter(c: String, column: Int8)
case NumberTooBig(n: Int8, column: Int8)
case NumberTooSmall(n: Int8, column: Int8)
case NotAppropriateLength(n: Int8, column: Int8)
case NotAppropriateLength(n: Int8, column: Int8)
}
public var description: String {
return value
}
}
}