O duplo despacho (double dispatch) é um padrão de design utilizado para selecionar métodos com base nos tipos dinâmicos de dois objetos em tempo de execução. No contexto do nosso jogo desenvolvido em C++ com SFML, este padrão é aplicado para tratar colisões entre diferentes tipos de entidades, como jogadores, inimigos e obstáculos.
A visitação (visitor) é um padrão de design que aproveita o duplo despacho para permitir a implementação de operações específicas sem modificar as classes das entidades. Este padrão é especialmente útil para manter o código organizado e fácil de estender.
No nosso jogo, a hierarquia de classes de entidades (como Player
, Enemy
e Obstacle
) utiliza o duplo despacho para resolver colisões. Cada classe derivada da classe base Entity
implementa métodos de colisão específicos para lidar com diferentes tipos de entidades.
class Player : public Entity {
public:
void collide(Entity* other) override {
other->collideWithPlayer(this);
}
void collideWithEnemy(Enemy* enemy) override {
// Lógica de colisão Player com Enemy
}
void collideWithObstacle(Obstacle* obstacle) override {
// Lógica de colisão Player com Obstacle
}
// Outros métodos...
};
class Enemy : public Entity {
public:
void collide(Entity* other) override {
other->collideWithEnemy(this);
}
void collideWithPlayer(Player* player) override {
// Lógica de colisão Enemy com Player
}
void collideWithObstacle(Obstacle* obstacle) override {
// Lógica de colisão Enemy com Obstacle
}
// Outros métodos...
};
// Implementações para outras entidades...