2.9 KiB
2.9 KiB
Misc
- Code is in C (gnu11 = C11 + some GNU extensions), tested only on Linux x86-64.
- URL: https://git.raoult.com/bruno/brchess
Done or partially done
Text interface
- basic commands like "init", "fen xxxx", "depth n", "search", "pvs", etc…
Dual 0x88 / bitboard representations
- I started with a 0x88 board representation
- But… wanted to switch to bitboard lately
- Today there is a messy mix of the two representations.
A pseudo-legal move generator
- Does not check for some invalid moves (especially king-pinned pieces moves, which could be very expensive). I believe some programs do not do it too, and prefer to see invalid positions at next ply (TODO).
- Still with 0x88 board (needs to be rewritten with bitboards).
Very expensive pieces and moves list
- They should be converted into arrays, to allow fast duplication for move_do(), the function which actually makes a move.
A basic eval function
- preferred squares for pieces
- mobility
"Move Search" funstions
Basic negamax search function
Principal Variation Search (PVS) function
- Alpha-beta pruning
- Basic moves pre-ordering It makes the PVS/alpha-beta pruning quite decent (for depth 6 on start pos, 1,196 secs/125,799 Knodes vs 14 secs/ 1,575 Knodes)
- Both make search at a fixed depth (still no quiescence search at terminal nodes).
Missing
All Chess rules
- Mate/Pat detection (!) Not trivial, as using pseudo-valid moves implies mate/pat detection is late
- Special rules like 50 moves/position repetition
Actual game management
Search improvement
- Book-keeping of moves during search (did not decide the method).
- Positions hashing / transposition detection
Next steps planned
Replace the current interface with a basic xboard one
- Check which commands are necessary/mandatory.
- This will allow easy testing with common software