Implementação do Padrão do Observador

7

Para me ensinar programação básica de jogos, vou programar um clone de Pong. Usarei o padrão de design do Observer, com uma interface entre a entrada e o mecanismo do jogo. No entanto, não tenho certeza do que a interface deve fazer. Uma idéia que tive foi que a interface de entrada dissesse ao mecanismo do jogo que (por exemplo) a tela foi clicada e, em seguida, permitisse que o mecanismo de jogo decidisse o que fazer com essa informação (atire uma bala, por exemplo). Outra idéia que tive foi para a interface de entrada, depois de ter captado o clique do mouse, para dizer ao mecanismo do jogo para disparar uma bala.

Qual método seria melhor para eu usar?

Shivam Sarodia
fonte
+1 Você não poderia ter escolhido um lugar melhor para começar
John McDonald
2
As balas em Pong parecem interessantes.
MichaelHouse
11
No futuro, sugiro adicionar linguagem (s) de implementação às suas tags, pois a arquitetura pode ser afetada e o exemplo dado pode ser adaptado às suas necessidades, além de comentar sobre a experiência de um programador que você é nesse idioma, para ajudar os respondentes a conversar com você no nível certo .
Patrick Hughes

Respostas:

7

O primeiro método é uma implementação do padrão observador, o segundo não. O objeto observado (sua interface de entrada) não precisa saber o que o objeto de observação (seu mecanismo de jogo) fará com a notificação, apenas que ele deseja ser notificado.

No entanto, não sei por que você decidiu usar o padrão de observador aqui. A menos que você tenha vários observadores, parece uma complicação que pode ser evitada. Se clicar sempre faz a mesma coisa, basta que a interface diga ao mecanismo do jogo para fazer uma única coisa. Manter as coisas o mais simples possível torna mais fácil para si mesmo. Isso não significa que nunca use padrões de design, mas geralmente você aborda a aplicação deles na direção oposta à que está fazendo. IE: comece com o problema e escolha o padrão de design para resolvê-lo, em vez de começar com o padrão de design e descobrir como resolver seu problema com ele.

Chewy Gumball
fonte
2
Usar novas idéias como Observadores em projetos simples é uma boa maneira de aprender padrões; como o aprendizado é o resultado desejado aqui, não apenas para que um jogo de Pong funcione, acho que seria bom fornecer a resposta para cobrir os dois.
Patrick Hughes
Como ele afirmou que queria aprender programação básica de jogos, não padrões de design, acho que é mais fácil focar apenas nesse aspecto. Se você tentar aprender muito de uma vez, acaba aprendendo muito pouco. Especificamente nesse caso, onde o padrão pode não ser realmente útil, aprender quando NÃO usar um padrão de design é tão valioso quanto o oposto.
Chewy Gumball
Eu pressagiei essa objeção com um comentário na pergunta principal, para que ele incluísse algumas informações sobre o nível de experiência atual em outras áreas, para evitar confusão em perguntas futuras. Baseado em sua letra e da aparência de ter feito alguma leitura à frente não posso concordar com você 100%, mas pode concordar suficiente para um +1, porque é uma resposta útil, no entanto =)
Patrick Hughes
2

Se você deseja manter o padrão Observador, deve ser a primeira ideia. O argumento mais forte que pude pensar é que a interface de entrada é um componente genérico que você provavelmente também desejará reutilizar em outros jogos. Portanto, faz sentido mantê-lo livre de qualquer informação específica do jogo, caso contrário você não poderá usá-lo em outro contexto. Em geral, pense cuidadosamente nas responsabilidades de suas turmas e tente mantê-las focadas e limitadas ao contexto da turma.

David Gouveia
fonte