{{draft task|Move generation}} This is a sub-task of the Chess player task.

Using suitable data structures, generate a list of valid moves given a chess game position and the side-to-move. You can create a basic (and incomplete) solution or create an advanced solution which covers all possible moves and depends on tracking more of the game state.

Basic implementation: #Moves based on piece type #Promotion to queen #Allow resignation More advanced/full implementation: #Castling (not through check) #En-passant capture #All promotions #Move legality for moving in/out of check #Draw by repetition and 50-move rule

Describe how complete your solution is, and try to create a self-contained component which could be used by a complete chess program.