I disagree!Daniel Shawul wrote:Bitboards are best for games like checkers. In orthodox chess they require some rotation or majic tables and become clumsy.
Bitboards are probably the most compact way to store true/false information about a set of squares. As a bonus, you can use rank/file/diagonal occupancy information as an index to a table of pre-computed move targets, but you don't have to. Depending on your mapping, rank occupancy is the easiest to get and file/diagonal occupancy are more difficult and require some bitwise manipulations. Not sure why you say that's better for checkers, it seems to me at best equally bad (if you're using a simple naive board representation as you do for chess) or worse (if you're using a denser representation that takes into account that only half the board is ever actually used).
Yes.Also when you do incremental, you need a sanity check for that move which is not that trivial. In some games it is just impossible to do that. There are so many tests you need to do, it is much easier generating all moves at once. Even for the hash table move this privilage could get screwed up when you go multi processor due to hash collisions.
Personally, I haven't been able to get verification of moves to work well enough that it pays off. I may look at that again some time, more interesting things to do in the mean time.
It probably helps that I'm not trying to be 100% correct: I just weed out things that I know I don't need to consider without even spending any time thinking about it. I still need to check generated moves for legality during the search.If we only talk about orthodox chess evasions, I remeber I did gain some speed up for my old engine with piece list. I had to do some game specific in_check and pinned routines to achive that.