(Upcoming engine: not yet finished)
For some time now, I've been writing my own chess engine from scratch in the Rust programming language. I am now at the point of testing the move generator and make/unmake move functions, before I start writing the search function and a simple evaluation to finish the first version.
It has a website in the making, at the address: https://rustic-chess.org/
As soon as it is able to play games and a base ELO-rating can be determined, it will be released on GitHub under the GPLv3 open source license.
Some move generator output is below. It can now do king, knight, and pawn moves, pawn captures and en-passant; it can also classify moves as such (for later move ordering). Things such as hashing and some auxiliary functionality have been implemented. The two things to be implemented are the bitboards for sliders, and the castling move generation (for which I obviously need the slider bitboards first, as I need to be able to detect rook/bishop/queen attacks on the castling squares). After this is done, the move generator can be tested in Perft, and then only Alpha/Beta and the UCI function need to be done. Then the engine should be finished, as the evaluation will, in the beginning, only use material counting and PST's.
It'll take some time yet, because I'm basically only writing this engine in the weekends. So, why do I post this now? Basically it's another motivation to finish it as soon as I'm able, so I can test where its base ELO is at, and then start to improve it. I hope to chronicle the engine's progress the same way as Eric Madsen is doing with Madchess over at madchess.net, and x_r_a_y with Minic on this site.
Code: Select all
Engine: Rustic 0.1
Author: Marcel Vanthoor
8 . B . . . . . .
7 . . . . k N . .
6 . . n . I . . .
5 . . . . . . . .
4 . I . i I . . .
3 . . . . . . . .
2 . i . . . . i .
1 R . . . K . . N
A B C D E F G H
en_passant: 20
Move 1: Ke7d6 capture: -, promotion: -, ep: false
Move 2: Ke7e6 capture: Pawn, promotion: -, ep: false
Move 3: Ke7f6 capture: -, promotion: -, ep: false
Move 4: Ke7d7 capture: -, promotion: -, ep: false
Move 5: Ke7f7 capture: Knight, promotion: -, ep: false
Move 6: Ke7d8 capture: -, promotion: -, ep: false
Move 7: Ke7e8 capture: -, promotion: -, ep: false
Move 8: Ke7f8 capture: -, promotion: -, ep: false
Move 9: Nc6b4 capture: Pawn, promotion: -, ep: false
Move 10: Nc6a5 capture: -, promotion: -, ep: false
Move 11: Nc6e5 capture: -, promotion: -, ep: false
Move 12: Nc6a7 capture: -, promotion: -, ep: false
Move 13: Nc6b8 capture: Bishop, promotion: -, ep: false
Move 14: Nc6d8 capture: -, promotion: -, ep: false
Move 15: b2a1 capture: Rook, promotion: Queen, ep: false
Move 16: b2a1 capture: Rook, promotion: Rook, ep: false
Move 17: b2a1 capture: Rook, promotion: Bishop, ep: false
Move 18: b2a1 capture: Rook, promotion: Knight, ep: false
Move 19: b2b1 capture: -, promotion: Queen, ep: false
Move 20: b2b1 capture: -, promotion: Rook, ep: false
Move 21: b2b1 capture: -, promotion: Bishop, ep: false
Move 22: b2b1 capture: -, promotion: Knight, ep: false
Move 23: g2g1 capture: -, promotion: Queen, ep: false
Move 24: g2g1 capture: -, promotion: Rook, ep: false
Move 25: g2g1 capture: -, promotion: Bishop, ep: false
Move 26: g2g1 capture: -, promotion: Knight, ep: false
Move 27: g2h1 capture: Knight, promotion: Queen, ep: false
Move 28: g2h1 capture: Knight, promotion: Rook, ep: false
Move 29: g2h1 capture: Knight, promotion: Bishop, ep: false
Move 30: g2h1 capture: Knight, promotion: Knight, ep: false
Move 31: d4d3 capture: -, promotion: -, ep: false
Move 32: d4e3 capture: -, promotion: -, ep: true
Done.