@@ -159,7 +159,7 @@ func (b *boardStruct) setSq(p12, s int) {
159159 }
160160 return
161161 }
162-
162+
163163 b .count [p12 ]++
164164
165165 p := piece (p12 )
@@ -178,15 +178,78 @@ func (b *boardStruct) newGame() {
178178 b .clear ()
179179 parseFEN (startpos )
180180}
181- func (b * boardStruct ) genRookMoves () {
182- sd := b .stm
183- frBB := b .pieceBB [Rook ] & b .wbBB [sd ]
184- p12 := pc2P12 (Rook , sd )
185- b .genFrMoves (p12 , frBB , & ml )
181+ func (b * boardStruct ) genRookMoves (ml * moveList , sd color ) {
182+ // TODO: generate rook moves with simple method - Benchmark
183+ // TODO: create a non-uci-command pm (print all moves)
184+ // TODO: explain magic numbers/bitboards
185+ // TODO: create tables and methods to use magic numbers
186+ // TODO: generate rook moves with magic bitBoards - Benchmark
187+
188+ allRBB := b .pieceBB [Rook ] & b .wbBB [sd ]
189+ p12 := uint (pc2P12 (Rook , color (sd )))
190+ ep := uint (b .ep )
191+ castl := b .castlings
192+ var mv move
193+ for fr := allRBB .firstOne (); fr != 64 ; fr = allRBB .firstOne () {
194+ rk := fr / 8
195+ fl := fr % 8
196+ //N
197+ for r := rk + 1 ; r < 8 ; r ++ {
198+ to := uint (r * 8 + fl )
199+ cp := uint (b .sq [to ])
200+ if cp != empty && p12Color (int (cp )) == sd {
201+ break
202+ }
203+ mv .packMove (uint (fr ), to , p12 , cp , empty , ep , castl )
204+ ml .add (mv )
205+ if cp != empty {
206+ break
207+ }
208+ }
209+ //S
210+ for r := rk - 1 ; r >= 0 ; r -- {
211+ to := uint (r * 8 + fl )
212+ cp := uint (b .sq [to ])
213+ if cp != empty && p12Color (int (cp )) == sd {
214+ break
215+ }
216+ mv .packMove (uint (fr ), to , p12 , cp , empty , ep , castl )
217+ ml .add (mv )
218+ if cp != empty {
219+ break
220+ }
221+ }
222+ //E
223+ for f := fl + 1 ; f < 8 ; f ++ {
224+ to := uint (rk * 8 + f )
225+ cp := uint (b .sq [to ])
226+ if cp != empty && p12Color (int (cp )) == sd {
227+ break
228+ }
229+ mv .packMove (uint (fr ), to , p12 , cp , empty , ep , castl )
230+ ml .add (mv )
231+ if cp != empty {
232+ break
233+ }
234+ }
235+ //W
236+ for f := fl - 1 ; f <= 0 ; f -- {
237+ to := uint (rk * 8 + f )
238+ cp := uint (b .sq [to ])
239+ if cp != empty && p12Color (int (cp )) == sd {
240+ break
241+ }
242+ mv .packMove (uint (fr ), to , p12 , cp , empty , ep , castl )
243+ ml .add (mv )
244+ if cp != empty {
245+ break
246+ }
247+ }
248+ }
186249}
187250
188251func (b * boardStruct ) genFrMoves (p12 int , frBB bitBoard , ml * moveList ) {
189- // TODO finish genRookMoves
252+
190253}
191254
192255//////////////////////////////////// my own commands - NOT UCI /////////////////////////////////////
0 commit comments