At the moment the project is in a big refactoring stage. The current 'naive' move generator is terribly slow, and a new one is coming.
The reason the process is taking so long is that various strategy were tested. The best one for me leverage a 0x88
I will possibly add some mixed bitboard stuff, to short the loops in the current generator.
This is the starting point before I start the refactoring ( from start position ):
As you can see, there is some bugs too. Here below the results with the new generator:
Now the results are correct and the speed is reasonable, and there is still a lot room fro improvement.
The results takes now twice as Crafty, but i suppose I can reach the same result, even if the program in C#.
Regarding errors and debugging, I made some internal unit test based from various Perft test suite found on the net, mostly in Sharper
and in Roce
. You can download the epn file containing the perft move generation test suite
, or just check out the source code and open the project TestGen.
To help solving various annoying bug during the move generator coding, I wrote a tool: Move Generator Scope
useful to automatize a perft/divide comparison with a trusted chess engine.New version: release 220.127.116.11b
A chess engine in C#. A winboard compatible console application included.
This is a chess engine enirely written in C#. It is not a professional engine, so tipically a master in chess is not required to beat it :)
Currently no GUI is avaiable, but the FelpoEngine project is a console application compatible with WinBoard
Using winboard we can enjoy other engines found over the web to create new computer vs computer matches to check the strength of the engine.
If you want to know more about configuring WinBoard to play with a specified engine Have a look here
The core project to play in order to modify the engine behaviour is ChEngine.dll
Currently the following features are implemented:
- Negamax Engine with Alpha/Beta pruning
- Principal Variation Search
- Transposition Tables using Zobrist Key
- Quiescence Search
- Iterative deeping
- -Rotated bitboard avoided using a dictionary based move generator* See Bitboard.cs.- ( This function is under refactoring )
- Opening book in pgn format.
The BitBoard class can be re-used in other chess game program to check move validity.
The included TestGen project is used to generate the bitmask for the dictionary based move generator. More details can be found here