Add exception to be thrown if a player plays an invalid move
Implement more features and bug fixes