This is without question the biggest project in my programming carreer so far. And the end result, while far from perfect, is a playable terminal chess app.
While I didn't follow all OOD principles, I still think that I learned a great deal about OO in general. While it was a grind, it was also very rewarding to be able to build something so complex, mostly without any outside help.
The things I struggled most with logic-wise, were:
- To have the player only be able to choose pieces with legal moves
- To implement rules for en passant
- To implement rules for castling
These parts are also where the code feels most clunky and ad-hoc.
The playing mechanics should be clear from the instructions in the game. Normal chess rules apply. However, the only way this game ends in a draw is with stalemate. No fifty-move-rule or three-fold repetition is implemented.