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] .
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- Padrões de Projeto Aplicados ao Desenvolvimento de Jogos Digitais [INTRODUÇÃO]
- Padrões de Projeto Aplicados ao Desenvolvimento de Jogos Digitais: EECLONE
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.