Curtindo a vida adoidado
Esta é a terceira publicação da série “Padrões de Projetos Aplicados ao Desenvolvimento de Jogos Digitais” de Yves Nogueira, ex-aluno do curso de Sistemas de Informação da FA7. Neste post rápido, apresenta-se a aplicação de padrões em um jogo comercial, o Valet Parking 1989, que possui várias versões, inclusive uma para iPhone.

yves_nogueira
Yves Nogueira
Especial para Include[SI]

Feito originalmente para a plataforma Nintendo DS, este projeto foi uma adaptação do jogo Valet Parking 1989 para o iPhone. Nele o jogador assume o papel de um manobrista em um estacionamento, devendo administrar os carros de clientes no espaço do estacionamento. Clientes constantemente chegam e saem do local e o jogador deve conseguir atender às suas demandas no tempo determinado para cada cliente. Para cada cliente servido com sucesso o jogador recebe pontos e para cada batida com um carro de um cliente parte destes pontos são perdidos. O jogador deve servir um número determinado de clientes para ganhar, perdendo caso falhe em servir um cliente no tempo determinado [1] .

Estratégia para utilização de Padrões

O autor da adaptação do jogo para iPhone selecionou e utilizou os padrões explicitados somente à medida em que as necessidades por cada um foram aparecendo ao longo do projeto e não de forma premeditada, aproximando-se mais de uma abordagem mercadológica de desenvolvimento se comparado com o EEClone. O autor faz a ressalva de que os padrões selecionados e a utilização dos mesmos no projeto não são necessariamente sempre os melhores para todo e qualquer tipo de jogo, mas que foram o suficiente para este caso de adaptação de um jogo de pequeno porte de uma plataforma para outra [2] .

Os padrões utilizados no projeto foram o MVC, State, Singleton e Observer [2], sendo os três últimos já apresentados no EEClone. Abaixo são apresentadas as situações nas quais foram utilizados no projeto.

 

Padrão MVC

No Valet Parking o elemento modelo do MVC representa a lógica de jogo, a visão representa a renderização e o controle representa o controle de entradas de usuário e fluxo de aplicação não relacionado a gameplay. O modelo não depende da visão, ou seja, a simulação do mundo do jogo pode rodar completamente por si só, sem uma representação gráfica associada. A visão referencia o modelo para determinar como deve renderizar os objetos do jogo, pegando do modelo as propriedades atualizadas dos objetos para isto. O controle conecta a visão ao modelo, fornecendo as respostas às entradas de usuário e repassando requisições [1] .

O padrão MVC separa a apresentação e interação com o sistema de seus dados, possuindo três componentes lógicos que interagem entre si. O modelo administra os dados do sistema e suas operações associadas; a visão trata de como estes dados são apresentados ao usuário; por fim, o controle trata a interação com o usuário e repassa comandos à visão e ao modelo [3] 

Padrão Singleton

Algumas classes do jogo utilizam este padrão para fornecer instâncias únicas de si mesmas. Algumas destas classes incluem GameLogic, CarManager, CharacterManager, StateManager e MapManager.

Segundo o autor, a utilização do Singleton facilitou na chamada de métodos destas classes e possibilitou uma inicialização tardia das mesmas [1], que antes precisavam ser propagadas em cascata pelos objetos na aplicação através da passagem de referência como parâmetro, piorando a legibilidade do código. Portanto, com a diminuição dos níveis de indireção nas chamadas de métodos, o código se tornou mais legível.

Padrão Observer

O padrão Observer é utilizado na tela de seleção de carros: o controle identifica um toque de usuário na tela em um determinado carro, enviando a informação para o modelo, que altera seus dados internos de acordo, notificando então a visão, que é atualizada.

O modelo neste caso é o Subject, a visão é o Observer e o evento de modelo que dispara a atualização da visão faz o papel do Notify da descrição teórica do padrão Observer. Outra utilização deste padrão é na atualização gráfica dos atributos de cada NPC (non-player character) em tela quando estes são alterados [1].

Padrão State

O padrão State é utilizado nas transições de tela: o jogo possui vários estados possíveis com cenas associadas a cada um deles. Quando o estado do jogo muda, a cena é modificada de acordo.

O padrão State também é utilizado na determinação dos comportamentos dos personagens do jogo, seguindo a mesma lógica da transição de telas, ou seja, cada personagem possui vários estados possíveis e cada um destes estados possui um comportamento associado [1].

Confira as outras publicações da série Padrões de Projeto Aplicados ao Desenvolvimento de Jogos Digitais 

Conclusão

A aplicação de padrões no caso do Valet Parking foram mais brandas em comparação à do EEClone, mas servem para mostrar como é possível encontrar pontos de otimização de manutenibilidade em projetos de jogos não acadêmicos caso mantenha-se esta necessidade em mente no processo de desenvolvimento.

REFERÊNCIAS

[1] A. Ilja. Use of design patterns for mobile game development. 2012

[2] M. I. Chowdhury; M. Katchabaw. A Software Design Pattern Based Approach to Adaptative Video Games. 2013.

[3] I. Sommerville. Software Engineering. 9. Ed. 2011.

Comentários

comentários

De volta para o futuro, OCT 21 2015 e as peraltices de uma criança [Causos]
O paradigma dos apps [opinião]