part 1 refactoring. added visitor
part 2 of the game