setting up interfaces and game logic