use a NoUI object instead of a boolean in PerfectComputerPlayer
extract taking of turns into game class, change Game to GameState
move best move calculation to PerfectComputerPlayer
small change to current_player_value in GameState
add number of players to game state
refactor ui
move players to game from controller
separate player name in ui from the data representation of it on the board
refactor
separate controller and ui better, refactor ui
add "Your turn.." to ui on human move
separate input handling from controller
add input mapper
refactor tests game_state
refactor the waiting for valid input and rerender the ui
extract game loop from game
change default winning combinations in game state
add more defaults
extract minimax, update tests
update tests