Padrões de Projeto para Games: Mediador

Padroes-de-Projeto-para-Games-Mediador

Olá gurizada,

A saga dos Design Patterns aplicados em jogos continua. No post de hoje trago para você, querido e fiel leitor do Abrindo o Jogo, o padrão Mediador (Mediator).

Como já apresentado no post sobre Observer, falaremos um pouco sobre o conceito deste padrão e em seguida a sua aplicação em jogos. Isso, através da sempre eficaz, técnica do Sr Miyagy ;)

O padrão de projetos Mediator é um padrão comportamental utilizado para gerenciar a comunicação entre dois ou mais objetos. Ele é utilizado pra fornecer uma camada de abstração para essa comunicação. Isso evita que os objetos tenham que se comunicar entre si de forma direta, movendo a lógica para dentro do Mediator.

Ele controla todo acesso e faz as alterações requisitadas pelos objetos. Sendo assim, qualquer requisição que venha a utilizar outro objeto, terá que ser enviada para o Mediator, que irá se comunicar com o objeto alvo e decidir o que fazer caso uma ação seja necessária. Observe no diagrama de classe modelo abaixo:

Perceba que não há relação direta entre as classes colegas, pois o mediador faz esse papel. A grande vantagem deste padrão é que a lógica fica retida em apenas um local, evitando que o código se espalhe por toda a aplicação.
Outra vantagem interessante, é a possibilidade de mudar o comportamento do mediator. É possível extendê-lo e trocar seu funcionamento, sem ter que alterar nenhuma das outras classes existentes.

Aplicação em Games: Um exemplo prático desse padrão aplicado em um jogo, seria em um RPG por turnos. Ao invés de cada classe de personagem/inimigo ter que implementar código para calcular ataque, defesa e modificadores, é possível por exemplo, a classe personagem solicitar que o Mediator faça o cálculo do ataque, sem precisar se comunicar diretamente com o objeto do inimigo¹.

Outro exemplo, que pode deixar bem claro a utilidade do padrão, é de um clássico dos jogos de luta. Bom, na verdade é O Clássico jogo de luta. Nada menos que Street Fighter.

Na implementação de jogos de luta é muito comum utilizar-se o padrão Mediator para definir as regras da batalha. Seria uma classe específica que controla os danos de ataque, energia, condições da luta e tempo -  e nunca os próprios lutadores, como poderia dar a entender. Observe o diagrama de sequência abaixo:

Analisando o diagrama acima, imagine o lutador Ken acertando uma voadora em Ryu. Neste momento, não seria um dos lutadores que define o dano, mas sim a classe Luta (Fight). Ela identifica que houve uma colisão na batalha, analisa o poder do golpe de Ken, a força da defesa de Ryu e calcula o dano. Em seguida configura essa informação no personagem.

É isso ai pessoal, o que acharam do padrão? Comentem logo abaixo.

Até o próximo  :)

¹Agradecimento especial aos meus alunos da Pós Graduação em Jogos SENAC Renan Rangel e Wellington Kleinicke pelo exemplo citado neste post.
Autor: Everton Vieira Ver todos os posts de
Sou Bacharel em Análise de Sistemas pela Universidade Católica de Pelotas (UCPel) no ano de 1999. Minha paixão por games é de longa data. Porém, em 2003 tornei essa paixão uma profissão. Durante oito anos atuei como Game Designer e Arquiteto de Software em mais de 30 projetos de Serious Games (simuladores) para grandes empresas do país. Atualmente sou sócio-fundador da Izyplay Game Studio, onde exerço o cargo de Diretor de Criação. Além do envolvimento corporativo, também participei da organização da Pós Graduação em Arquitetura e Desenvolvimento de Jogos Digitais na FATEC SENAC Pelotas. Minha área de interesse e especialização é Game Design e Inteligência Artificial.

4 Comentários em "Padrões de Projeto para Games: Mediador"

  1. Leandro 16/11/2010 at 10:28 - Reply

    Muito boas essas dicas sobre padrões de projeto, estou lendo o livro “Caia de cabeça – Padrões de Projeto // Head First – Design Patterns” e aconselho pra quem estiver interessado em começar a ler a respeito.

  2. Alessandro 21/02/2011 at 12:11 - Reply

    Design Patterns são fundamentais para desenvolver seus projetos de forma ” rápida, segura e estável” facilitando em muito todos os processos relacionados não só ao código da aplicação mas também a dinâmica e agilidade para se cumprir prazos sem dor de cabeça =).

    Parabéns pelo post e estou no aguardo de mais e mais informação.
    Valeu Everton!!!!

  3. Eduardo Nunes Pereira 15/04/2011 at 12:20 - Reply

    Nunca tinha pensado em uma utilidade melhor para o Mediator do q Street Fighter ! perfeito !

  4. André Luzzardi 24/07/2011 at 00:26 - Reply

    Po muito legal, devia ter pensado nisso enquanto tava fazendo aquelas classes nas aulas do curso

Deixar um Comentário