The before code mixes player position and score directly in the Game class without a clear state container. The after code introduces GameStateManager to centralize and control all game state updates, enabling saving and loading state easily.
### Before: No clear state management
class Game:
def __init__(self):
self.player_x = 0
self.player_y = 0
self.score = 0
def move_player(self, dx, dy):
self.player_x += dx
self.player_y += dy
def add_score(self, points):
self.score += points
### After: Using a GameStateManager class
class GameStateManager:
def __init__(self):
self.state = {
'player_position': (0, 0),
'score': 0
}
def update_position(self, dx, dy):
x, y = self.state['player_position']
self.state['player_position'] = (x + dx, y + dy)
def add_score(self, points):
self.state['score'] += points
def save_state(self):
return self.state.copy()
def load_state(self, saved_state):
self.state = saved_state.copy()
class Game:
def __init__(self):
self.manager = GameStateManager()
def move_player(self, dx, dy):
self.manager.update_position(dx, dy)
def add_score(self, points):
self.manager.add_score(points)
def save(self):
return self.manager.save_state()
def load(self, saved_state):
self.manager.load_state(saved_state)