- #1 (feat) add position parser
- #2 (feat) add move parser (requires #1)
- #3 (feat) add game state check functions
- #4 (test) update the tests to check for game states
- #5 (feat) game state from the previous position can be cached
- #6 (feat) available moves from the previous position can be cached
- #7 (feat) implement a very simplified evaluation function where the pieces are scored according to their distance to the center
- #8 (feat) implement the simplest kind of ai, where the ai uses the minmax algorithm to find an "optimal" move
- #9 (feat) implement alpha-beta pruning
- #10 (test) add info messages about the test commands
- #11 (test) implement better command system that allows subcommands like 'test', 'load-fen' etc.
- [-] #12 (test) depth tests do not create random moves as the test takes not more than few milliseconds, so the seed for the srand function is almost always the same
- #13 (feat) add all of the remaining parts of the fen loader
- #14 (feat) add fen saver
- #15 (feat) implement
DRAW_BY_REPETITION
andDRAW_BY_NO_MOVES
- #16 (feat) implement quick mate search when either players are down to only 1 pieces
- #17 (feat) implement game history
- #18 (feat) eval should return an array of best moves
- #19 (feat) imlement cli like commands (requires #1, #2)
- #20 (feat) implement pvp, pvb and bvb (requires #1, #2, #19)
- #21 (feat)
generate_moves
should generate moves in the order that would help the alpha-beta pruning algorithm, aka best moves first (best moves are usually the moves that get the piece closer to the center or moves that forces the opponent to take the piece) - #22 (chore) some frequently used functions should be placed in headers as inline functions
- #23 (feat) create the endgame tablebase
- #24 (feat) implement memoisation for the ai
- #25 (feat) implement long term memoisation for absolute evaluations like
WHITE_WINS
andBLACK_WINS
- [-] #26 (chore) convert the recursive ai to iterative ai, which will make it possible to find the mate in 6 without having to check 10 nodes deep branches
- #27 (chore) replace
_pawn_pos_adv
and_knight_pos_adv
with prebuilt arrays of advantage values - #28 (feat) eval should not recalculate the board evaluation and instead should always look for the evaluation difference
- #29 (chore) create
piece_t
- #30 (fix) alpha-beta pruning does not generate valid output
- #31 (feat) for cli, update the tty attributes
- #32 (cli) implement the
evaluate
command - #33 (cli) implement the
pieceat
subcommand - #34 (cli) implement the
placeat
subcommand - #35 (cli) implement the
removeat
subcommand - #36 (cli) implement the
undomove
subcommand - #37 (cli) implement the
automove
command - #38 (cli) implement the
status
command - #39 (cli) implement the
allmoves
command - #40 (cli) implement the
countbranches
command - #41 (cli) implement the
playai
command - #42 (cli) implement the
getaimove
command - #43 (cli) create a test command for the new cli system
- #44 (feat) same color square evaluation
- #45 (feat) board hashing
- #46 (feat) same board optimisations (requires #45)
- #47 (feat) implement the
aidepth
command - #48 (chore) generate the advantage tables that use position indeces
- #49 (chore) update the hash value of the board every move instead of calculating it from scratch every time it is needed
- #50 (fix)
placeat
andremoveat
commands do not update the status of the board - #51 (feat) turn
ai_cache_t.memorized
to a linked list - #52 (chore) evaluate should not generate the moves and instead should only return the evaluation information. The ai cache can then be checked to determine the best moves
- #53 (feat) implement delta evaluation with proper test functions
- #54 (feat) implement time management for the api
- #55 (feat) implement time management for the ai
- #56 (feat) implement a notation for game history
- #57 (feat) implement move ordering
- #58 (chore) disable getopt error messages and write our own