11package main
22
3- import "strings"
3+ import (
4+ "fmt"
5+ "strings"
6+ )
47
58type castlings uint
69
@@ -18,19 +21,20 @@ const (
1821)
1922
2023type castlOptions struct {
21- short uint
22- long uint
23- rook int
24- king int
25- rookPosSh uint
26- rookPosL uint
27- betweenSh bitBoard
28- betweenL bitBoard
24+ short uint // flag
25+ long uint // flag
26+ rook int // rook p12 (wR/bR)
27+ kingPos int // king pos
28+ rookSh uint // rook pos short
29+ rookL uint // rook pos long
30+ betweenSh bitBoard
31+ betweenL bitBoard
32+ pawnsSh , pawnsL , knightsSh , knightsL bitBoard
2933}
3034
3135var castl = [2 ]castlOptions {
32- {shortW , longW , wR , E1 , H1 , A1 , betweenWSh , betweenWL },
33- {shortB , longB , bR , E8 , H8 , A8 , betweenBSh , betweenBL },
36+ {shortW , longW , wR , E1 , H1 , A1 , betweenWSh , betweenWL , 0x0 , 0x0 , 0x0 , 0x0 },
37+ {shortB , longB , bR , E8 , H8 , A8 , betweenBSh , betweenBL , 0x0 , 0x0 , 0x0 , 0x0 },
3438}
3539
3640// only castling privileges (not if it is legal on board)
@@ -94,3 +98,81 @@ func parseCastlings(fenCastl string) castlings {
9498
9599 return castlings (c )
96100}
101+
102+ func initCastlings () {
103+ fmt .Println ("init castlings" )
104+ // pawns stops short castling W
105+ castl [WHITE ].pawnsSh .set (D2 )
106+ castl [WHITE ].pawnsSh .set (E2 )
107+ castl [WHITE ].pawnsSh .set (F2 )
108+ castl [WHITE ].pawnsSh .set (G2 )
109+ castl [WHITE ].pawnsSh .set (H2 )
110+ // pawns stops long castling W
111+ castl [WHITE ].pawnsL .set (B2 )
112+ castl [WHITE ].pawnsL .set (C2 )
113+ castl [WHITE ].pawnsL .set (D2 )
114+ castl [WHITE ].pawnsL .set (E2 )
115+ castl [WHITE ].pawnsL .set (F2 )
116+
117+ // pawns stops short castling B
118+ castl [BLACK ].pawnsSh .set (D7 )
119+ castl [BLACK ].pawnsSh .set (E7 )
120+ castl [BLACK ].pawnsSh .set (F7 )
121+ castl [BLACK ].pawnsSh .set (G7 )
122+ castl [BLACK ].pawnsSh .set (H7 )
123+ // pawns stops long castling B
124+ castl [BLACK ].pawnsL .set (B7 )
125+ castl [BLACK ].pawnsL .set (C7 )
126+ castl [BLACK ].pawnsL .set (D7 )
127+ castl [BLACK ].pawnsL .set (E7 )
128+ castl [BLACK ].pawnsL .set (F7 )
129+
130+ // knights stops short castling W
131+ castl [WHITE ].knightsSh .set (C2 )
132+ castl [WHITE ].knightsSh .set (D2 )
133+ castl [WHITE ].knightsSh .set (E2 )
134+ castl [WHITE ].knightsSh .set (G2 )
135+ castl [WHITE ].knightsSh .set (H2 )
136+ castl [WHITE ].knightsSh .set (D3 )
137+ castl [WHITE ].knightsSh .set (E3 )
138+ castl [WHITE ].knightsSh .set (F3 )
139+ castl [WHITE ].knightsSh .set (G3 )
140+ castl [WHITE ].knightsSh .set (H3 )
141+ // knights stops long castling W
142+ castl [WHITE ].knightsL .set (A2 )
143+ castl [WHITE ].knightsL .set (B2 )
144+ castl [WHITE ].knightsL .set (C2 )
145+ castl [WHITE ].knightsL .set (E2 )
146+ castl [WHITE ].knightsL .set (F2 )
147+ castl [WHITE ].knightsL .set (G2 )
148+ castl [WHITE ].knightsL .set (B3 )
149+ castl [WHITE ].knightsL .set (C3 )
150+ castl [WHITE ].knightsL .set (D3 )
151+ castl [WHITE ].knightsL .set (E3 )
152+ castl [WHITE ].knightsL .set (F3 )
153+
154+ // knights stops short castling B
155+ castl [BLACK ].knightsSh .set (C7 )
156+ castl [BLACK ].knightsSh .set (D7 )
157+ castl [BLACK ].knightsSh .set (E7 )
158+ castl [BLACK ].knightsSh .set (G7 )
159+ castl [BLACK ].knightsSh .set (H7 )
160+ castl [BLACK ].knightsSh .set (D6 )
161+ castl [BLACK ].knightsSh .set (E6 )
162+ castl [BLACK ].knightsSh .set (F6 )
163+ castl [BLACK ].knightsSh .set (G6 )
164+ castl [BLACK ].knightsSh .set (H6 )
165+ // knights stops long castling B
166+ castl [BLACK ].knightsL .set (A7 )
167+ castl [BLACK ].knightsL .set (B7 )
168+ castl [BLACK ].knightsL .set (C7 )
169+ castl [BLACK ].knightsL .set (E7 )
170+ castl [BLACK ].knightsL .set (F7 )
171+ castl [BLACK ].knightsL .set (G7 )
172+ castl [BLACK ].knightsL .set (B6 )
173+ castl [BLACK ].knightsL .set (C6 )
174+ castl [BLACK ].knightsL .set (D6 )
175+ castl [BLACK ].knightsL .set (E6 )
176+ castl [BLACK ].knightsL .set (F6 )
177+
178+ }
0 commit comments