@@ -12,12 +12,6 @@ const (
1212 longW = uint (0x2 ) // white can castle long
1313 shortB = uint (0x4 ) // black can castle short
1414 longB = uint (0x8 ) // black can castle short
15-
16- // squares between rook and king
17- betweenWSh = bitBoard (uint64 (1 )<< G1 ) | bitBoard (uint64 (1 )<< F1 )
18- betweenWL = bitBoard (uint64 (1 )<< B1 ) | bitBoard (uint64 (1 )<< C1 ) | bitBoard (uint64 (1 )<< D1 )
19- betweenBSh = bitBoard (uint64 (1 )<< G8 ) | bitBoard (uint64 (1 )<< F8 )
20- betweenBL = bitBoard (uint64 (1 )<< B8 ) | bitBoard (uint64 (1 )<< C8 ) | bitBoard (uint64 (1 )<< D8 )
2115)
2216
2317type castlOptions struct {
@@ -33,18 +27,18 @@ type castlOptions struct {
3327}
3428
3529var castl = [2 ]castlOptions {
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 },
30+ {shortW , longW , wR , E1 , H1 , A1 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 },
31+ {shortB , longB , bR , E8 , H8 , A8 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 },
3832}
3933
40- // only castling privileges (not if it is legal on board)
41- func (c castlings ) canCastle (sd color ) bool {
42- return c .canCastleShort (sd ) || c .canCastleLong (sd )
34+ // castling privileges
35+ func (c castlings ) flags (sd color ) bool {
36+ return c .shortFlag (sd ) || c .longFlag (sd )
4337}
44- func (c castlings ) canCastleShort (sd color ) bool {
38+ func (c castlings ) shortFlag (sd color ) bool {
4539 return (castl [sd ].short & uint (c )) != 0
4640}
47- func (c castlings ) canCastleLong (sd color ) bool {
41+ func (c castlings ) longFlag (sd color ) bool {
4842 return (castl [sd ].long & uint (c )) != 0
4943}
5044
@@ -101,33 +95,47 @@ func parseCastlings(fenCastl string) castlings {
10195
10296func initCastlings () {
10397 fmt .Println ("init castlings" )
104- // pawns stops short castling W
98+ // squares between K and R short castling
99+ castl [WHITE ].betweenSh .set (F1 )
100+ castl [WHITE ].betweenSh .set (G1 )
101+ castl [BLACK ].betweenSh .set (F8 )
102+ castl [BLACK ].betweenSh .set (G8 )
103+
104+ // squares between K and R long castling
105+ castl [WHITE ].betweenL .set (B1 )
106+ castl [WHITE ].betweenL .set (C1 )
107+ castl [WHITE ].betweenL .set (D1 )
108+ castl [BLACK ].betweenL .set (B8 )
109+ castl [BLACK ].betweenL .set (C8 )
110+ castl [BLACK ].betweenL .set (D8 )
111+
112+ // pawns stop short castling W
105113 castl [WHITE ].pawnsSh .set (D2 )
106114 castl [WHITE ].pawnsSh .set (E2 )
107115 castl [WHITE ].pawnsSh .set (F2 )
108116 castl [WHITE ].pawnsSh .set (G2 )
109117 castl [WHITE ].pawnsSh .set (H2 )
110- // pawns stops long castling W
118+ // pawns stop long castling W
111119 castl [WHITE ].pawnsL .set (B2 )
112120 castl [WHITE ].pawnsL .set (C2 )
113121 castl [WHITE ].pawnsL .set (D2 )
114122 castl [WHITE ].pawnsL .set (E2 )
115123 castl [WHITE ].pawnsL .set (F2 )
116124
117- // pawns stops short castling B
125+ // pawns stop short castling B
118126 castl [BLACK ].pawnsSh .set (D7 )
119127 castl [BLACK ].pawnsSh .set (E7 )
120128 castl [BLACK ].pawnsSh .set (F7 )
121129 castl [BLACK ].pawnsSh .set (G7 )
122130 castl [BLACK ].pawnsSh .set (H7 )
123- // pawns stops long castling B
131+ // pawns stop long castling B
124132 castl [BLACK ].pawnsL .set (B7 )
125133 castl [BLACK ].pawnsL .set (C7 )
126134 castl [BLACK ].pawnsL .set (D7 )
127135 castl [BLACK ].pawnsL .set (E7 )
128136 castl [BLACK ].pawnsL .set (F7 )
129137
130- // knights stops short castling W
138+ // knights stop short castling W
131139 castl [WHITE ].knightsSh .set (C2 )
132140 castl [WHITE ].knightsSh .set (D2 )
133141 castl [WHITE ].knightsSh .set (E2 )
@@ -138,7 +146,7 @@ func initCastlings() {
138146 castl [WHITE ].knightsSh .set (F3 )
139147 castl [WHITE ].knightsSh .set (G3 )
140148 castl [WHITE ].knightsSh .set (H3 )
141- // knights stops long castling W
149+ // knights stop long castling W
142150 castl [WHITE ].knightsL .set (A2 )
143151 castl [WHITE ].knightsL .set (B2 )
144152 castl [WHITE ].knightsL .set (C2 )
@@ -151,7 +159,7 @@ func initCastlings() {
151159 castl [WHITE ].knightsL .set (E3 )
152160 castl [WHITE ].knightsL .set (F3 )
153161
154- // knights stops short castling B
162+ // knights stop short castling B
155163 castl [BLACK ].knightsSh .set (C7 )
156164 castl [BLACK ].knightsSh .set (D7 )
157165 castl [BLACK ].knightsSh .set (E7 )
@@ -162,7 +170,7 @@ func initCastlings() {
162170 castl [BLACK ].knightsSh .set (F6 )
163171 castl [BLACK ].knightsSh .set (G6 )
164172 castl [BLACK ].knightsSh .set (H6 )
165- // knights stops long castling B
173+ // knights stop long castling B
166174 castl [BLACK ].knightsL .set (A7 )
167175 castl [BLACK ].knightsL .set (B7 )
168176 castl [BLACK ].knightsL .set (C7 )
0 commit comments