Client-side game logic