1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| (*
converts a string representing a FEN position to an internal
representation.
*)
FUNCTION FEN2Posit(fen: strg80): boolean;
var
x, y, i, j: integer;
PosCour : Integer;
c: char;
begin
x := 1;
y := 8;
i := 1;
PosCour := 10 * (10 - y) + x + 1;
with Posit do
begin
while i <= Length(fen) do
begin
c := fen[i];
case Upcase(c) of
'P', 'N', 'B', 'R', 'Q', 'K':
begin
case c of
'p': Board[PosCour] := BlackPawn;
'n': Board[PosCour] := BlackKnight;
'b': Board[PosCour] := BlackBishop;
'r': Board[PosCour] := BlackRook;
'q': Board[PosCour] := BlackQueen;
'k': Board[PosCour] := BlackKing;
'P': Board[PosCour] := WhitePawn;
'N': Board[PosCour] := WhiteKnight;
'B': Board[PosCour] := WhiteBishop;
'R': Board[PosCour] := WhiteRook;
'Q': Board[PosCour] := WhiteQueen;
'K': Board[PosCour] := WhiteKing;
end;
Inc(x);
PosCour := 10 * (10 - y) + x + 1;
end;
'1'..'8':
begin
j := Ord(c) - Ord('0');
while j > 0 do
begin
Board[PosCour] := Blank;
Inc(x);
Dec(j);
PosCour := 10 * (10 - y) + x + 1;
end;
end;
'/':
begin
x := 1;
Dec(y);
PosCour := 10 * (10 - y) + x + 1;
end;
end;
Inc(i);
end;
KingCastle[Black] := Board[26] = BlackKing;
QueenRookCastle[Black] := Board[Top] = BlackRook;
KingRookCastle[Black] := Board[29] = BlackRook;
KingCastle[White] := Board[96] = WhiteKing;
QueenRookCastle[White] := Board[92] = WhiteRook;
KingRookCastle[White] := Board[Bot] = WhiteRook;
EnPassantSquare := None;
end;
result := true;
end; |
Partager