Sei sulla pagina 1di 6

Padres de Projeto Aplicados Construo de Jogos

Eletrnicos
Roberto Tenorio Figueiredo, Carla Brando de Carvalho Figueiredo
Faculdade de Cincias Aplicadas e Sociais de Petrolina (FACAPE)
Campus Universitrio S/N Vila Eduardo 56.328-903 Petrolina PE Brasil
tenorio.petrolina@bol.com.br, carlabfigueiredo@terra.com.br

Abstract. Software Engineering is a collection of good practice which aims


to make software development easier and faster resulting in a quality
product. Many of these practices are used in commercial applications,
focused on the internal use in companies, however, other types of software
can also make use of these practices with the same goal of improving the
development and quality of the product generated. One example is video
games, products with great quality and perfect graphics, but that takes years
to get ready and requires an effort of great teams and high financial
investment, they need to give the expected return. To aid development,
reduce project risks and increase quality, it is important to use various
techniques of software engineering, leaving the project safer for investors
and better for developers and also for plays. This work demonstrates how to
use design patterns that was originally defined for commercial applications
to develop electronic games, based on a classic RPG game in turns, due to
its characteristic of being an inclusive type of game, maximizing the
demands on programming and design patterns, in this research.
Keywords: Software Engineering, Electronic Games, Design Patterns,
Game Development.
Resumo. Engenharia de Software a reunio de boas prticas, que tem o
intuito de tornar o desenvolvimento de software mais simples e gil
resultando em um produto de qualidade. Muitas dessas prticas so
utilizadas em aplicaes comerciais, voltada para o uso interno nas
empresas, porm, outros tipos de software tambm podem fazer uso dessas
prticas com o mesmo objetivo de melhorar o desenvolvimento e a
qualidade do produto gerado. Um exemplo disto so os jogos eletrnicos,
produtos com extrema qualidade e perfeio grfica, mas que demoram anos
para ficarem prontos e requer um esforo de grandes equipes e altos
investimentos financeiros, que precisam dar o retorno esperado. Para
auxiliar o desenvolvimento, diminuir os riscos do projeto e aumentar a
qualidade importante o uso de diversas tcnicas da Engenharia de
Software, deixando o projeto mais seguro para quem investe e melhor para
quem desenvolve e tambm para quem joga. Este artigo demonstra como
utilizar os padres de projeto da engenharia de software gerados para
aplicaes comerciais, no desenvolvimento de jogos eletrnicos, tomando
como base um jogo de RPG clssico em turnos, devido a sua caracterstica
de ser um tipo de jogo abrangente, maximizando as demandas na
programao e nos padres de projeto, foco desta pesquisa.
No permitido fazer cpias deste trabalho visando o lucro ou vantagem comercial. necessrio ostentar a primeira pgina. Este
trabalho foi publicado nos Anais do 2 Simpsio Interinstitucional de Computao do Vale do So Francisco (SICOMP 2011), 18 - 20
de maio de 2011- Juazeiro - Bahia - Brasil - www.sicomp.org - ISSN 2236-2215.

Palavras Chaves: Engenharia de Software, Jogos Eletrnicos, Padres de


Projeto, Desenvolvimento de Jogos.

1. Introduo.
O uso dos conceitos de Engenharia de Software, que geralmente so aplicados em
programas comerciais/industriais (PRESSMAN, 1995), tambm podem ser aplicados
para melhoria no desenvolvimento de jogos eletrnicos. Dentre as tcnicas bsicas de
engenharia de software esto os padres de projeto, que podem melhorar o
desenvolvimento de um jogo, tornado-o mais rpido, barato e cujas bibliotecas podero
ser reutilizadas em outros projetos.
O uso de padres de projeto visa reduzir o esforo utilizado na soluo de
problemas que surgem durante o desenvolvimento, como a implementao de novas
funcionalidades, correo de erros, alterao de regras e leis no domnio da aplicao,
entre outros, propondo uma soluo j testada para estes eventuais problemas, deixando
o desenvolvimento mais simples e gil. Este trabalho vem a complementar a literatura
sobre o desenvolvimento de jogos eletrnicos inserindo neste contexto, conceitos, que
at ento eram utilizados somente na produo de aplicaes comerciais/industriais.
Projeto e desenvolvimento de jogos representam uma rea bastante adequada
para aplicao de padres de projeto, uma vez que mesmo as aplicaes mais simples
em jogos necessitam de mecanismos criacionais, de representao (cenrios e elementos
do jogo), comportamentais, de interao e de distribuio.

2. Definio dos padres de projeto a serem utilizados


Em grandes empresas de desenvolvimento, como a Sony, Microsoft e Nintendo, padres
de projeto tm sido extensivamente aplicados a jogos. Existem quatro contextos bsicos
para aplicao de padres em jogos: projeto do jogo (game design), projeto de nvel
(level design), projeto de game engine e implementao do jogo (SILVEIRA e SILVA,
2006).
No projeto de um jogo, as abordagens de projeto orientado a objetos e a aspectos
recebem fortes aplicaes de padres de projeto. Um exemplo disso a realizao de
um projeto completo de um jogo do tipo tabuleiro para duas pessoas utilizando o padro
MVC (Model-View-Controller), feito pelos pesquisadores D. Nguyen e S. B. Wong
(SILVEIRA e SILVA, 2006). Outro exemplo a apresentao de um conjunto bastante
extenso de aplicaes de padres nas diversas fases do projeto de jogo (gameplay,
movimentos, fsica, IA, dentre outros), feita pelos pesquisadores S. Bjrk e J.
Holopainen (SILVEIRA e SILVA, 2006).
No contexto de projeto de nvel, so definidos os cenrios e refinamentos dos
elementos de jogos, bem como a especializao dos fluxos dentro dos nveis. Aqui,
padres de interao desempenham papel fundamental.
Os contextos de projeto de game engines e implementao do prprio jogo so
as duas sub-reas com maior concentrao de aplicaes de padres de projeto. O
pesquisador R. Rucker desenvolveu um game engine completo aplicando

extensivamente padres de atribuio de responsabilidades GRASP (General


Responsibility Assignment Software Patterns) e padres de projeto GoF (Gang of Four)
(SILVEIRA e SILVA, 2006). O pesquisador D. H. Eberly faz aplicaes de padres de
projeto bem conhecidos em softwares comerciais e programao na construo do seu
game engine Wild Magic (SILVEIRA e SILVA, 2006). Estes so alguns dos exemplos
discutidos na literatura sobre as tcnicas de desenvolvimento de jogos onde a aplicao
de padres de projetos representou grandes ganhos em termos de desempenho e
facilidade de escalabilidade e manuteno.
Para a elaborao deste artigo, foi desenvolvido o jogo de RPG clssico Os
Federa 4 e a Mquina do Tempo, que a continuao de uma srie de jogos cuja
estria se passa em um universo de super heris e focada em um grupo de heris
conhecido como Os Federa. Telas do jogo podem ser vistas nas figuras 1 e 2.

Figura 1: Tela do jogo


Fonte: os autores

Figura 2: Tela do jogo


Fonte: os autores

Analisando os principais padres de projeto existentes no planejamento de


softwares comerciais (Abstract Factory, Builder, Factory Method, Prototype, Singleton,
Adapter, Bridge, Composite, Decorator, Faade, Flyweight, Proxy, Chain of
Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State,
Strategy, Template Method, Visitor) e baseado na anlise anterior e nas demandas do
jogo proposto, foram identificadas a necessidade de uso de alguns padres, descritos no
tpico a seguir, com o objetivo de simplificar a criao do software e garantir o reuso de
suas classes.
2.1. Padres de Projeto
A simples utilizao dos conceitos de orientao a objetos no garantem, por si s,
aplicaes reutilizveis, extensveis e de fcil manuteno. Para que esses objetivos
sejam atingidos importante tambm se preocupar com a forma com que essas
aplicaes e seus cdigos so estruturados (GAMMA, 1995).
Os padres de projeto descrevem solues para problemas de projeto
recorrentes, que so similares entre si e esto presentes em diferentes contextos. Esses
padres so exaustivamente testados e configuram a melhor soluo para um
determinado problema.

Na literatura, existem diversos autores que identificam e explicitam padres de


projeto de software, sendo eles, resultados de experincias anteriores no
desenvolvimento de sistemas. Este trabalho tem como principal referncia o livro
Design Patterns: Elements of Reusable Object-Oriented Software dos autores Erich
Gamma, Richard Helm, Ralph Johnson e John Vlissides, conhecidos como a Gang of
Four ou simplesmente "GoF" (GAMMA, 1995). Tomando com base os padres
GoF, os seguintes padres foram identificados como necessidade para o jogo de RPG
clssico Os Federa 4 e a Mquina do Tempo:
Interface
a. Caracterstica: Mantm uma classe que usam dados e servios providos por
instncias de outras classes independente dessas, atravs do acesso a tais
instncias obrigatoriamente atravs de uma interface (DCC, 2008);
b. Problema no Jogo: Subsistemas diferentes (Classe, Eventos, Personagens,
Grupo de Inimigos, Cenrios, Animaes, Sons, Mapas, Sistema) querem se
comunicar com o motor;
c. Resultados: Comunicao com o motor atravs de um nico canal, gerando
facilidade na comunicao entre os subsistemas e o motor;
Singleton
a. Caracterstica: Garante a existncia de apenas uma instncia de uma classe,
mantendo um ponto global de acesso ao seu objeto (DCC, 2008);
b. Problema no Jogo: A classe que gera o menu de opes, define a moeda
corrente no jogo, configuraes do jogo e vocabulrio no pode ser duplicada, a
fim de evitar confuses ao jogador;
c. Resultados: Garantia que a classe do sistema do jogo nica;
Adapter
a. Caracterstica: Utilizado para adaptar a interface de uma classe, permitindo
que classes com interfaces incompatveis possam interagir, ou seja, um objeto
cliente poder utilizar-se de servios de outros objetos com interfaces diferentes
por meio de uma interface nica (DCC, 2008);
b. Problema no Jogo: Muitos subsistemas, cada um com sua interface prpria, a
fim de se comunicar com o motor;
c. Resultados: Facilidade na comunicao do motor com seus subsistemas;
Flyweight
a. Caracterstica: Utilizado quando vrios objetos devem ser manipulados todos
da mesma maneira, sem a necessidade de dados adicionais. Neste padro
inexistem ponteiros para os mtodos do dado, para economizar memria. Neste
caso, objetos diferentes, com os mesmos dados, compartilham os dados em
comum (DCC, 2008);
b. Problema no Jogo: Diversos inimigos ocasionais, andando em grupos, que
possuem as mesmas caractersticas so instncias de objetos que gastam
memria com informaes repetidas;
c. Resultados: O jogo ocupa menos espaos em memria, pois armazena as
caractersticas dos monstros apenas uma nica vez;
d. Diagrama de uso:
Command

a. Caracterstica: Encapsula uma solicitao como um objeto, desta forma a


permitir que clientes parametrizem diferentes solicitaes, enfileirem ou faam o
registro de solicitaes e suportem operaes que podem ser desfeitas;
b. Problema no Jogo: Salvar o progresso do jogo. Isso significa salvar o status
atual de todos os personagens e eventos do jogo;
c. Resultados: Guarda, em um objeto, as modificaes nos eventos e personagens
realizados durante a jogatina, e, no momento de salvar, basta apenas guardar os
dados armazenados nos objetos da classe Command;
Iterator;
a. Caracterstica: Fornece uma maneira de acessar de forma seqencial os
elementos de um objeto agregado sem expor sua representao subjacente;
b. Problema no Jogo: O objeto que controla a classe na qual pertence um
personagem deve analisar, um a um, todos os itens, armas e armaduras que um
determinado heri pode usar;
c. Resultados: A anlise de itens, armas e armadura fica mais rpida e simples;
Mediator
a. Caracterstica: Define um objeto que encapsula a interao entre um conjunto
de objetos. Promove o acoplamento fraco ao evitar que os objetos se refiram uns
aos outros, permitindo a variao das interaes independentemente;
b. Problema no Jogo: Alguns subsistemas do jogo precisam se comunicar entre si,
sem a interveno do motor, o que pode causar um forte acoplamento entre eles;
c. Resultados: Com a classe Mediator, as iteraes entre os subsistemas ficam
com fraco acoplamento, permitindo uma maior reusabilidade destes subsistemas;
Memento
a. Caracterstica: Sem violar o encapsulamento do objeto, captura e externaliza
um estado interno de um objeto, de modo que o mesmo possa posteriormente ser
restaurado para este estado (DCC, 2008).
b. Problema no Jogo: Ao salvar a progresso do jogo, so salvos todos os eventos
modificados, cada evento um objeto. Alguns desses objetos so grandes e
ocupam muito espao no arquivo de salvamento;
c. Resultados: O arquivo de salvamento recebe apenas as informaes
modificadas do objeto e no o objeto inteiro, reduzindo drasticamente o tamanho
do arquivo salvo, facilitando a restaurao dos dados salvos no motor e nos
subsistemas do jogo;
Observer
a. Caracterstica: Define uma dependncia 1 para N, entre objetos de modo que
quando um objeto muda o estado, todos seus dependentes sejam notificados e
atualizados automaticamente. Permite que objetos interessados sejam avisados
da mudana de estado ou outros eventos ocorrendo num outro objeto (DCC,
2008).
b. Problema no Jogo: Atualizaes da tela grfica, cenrios e elementos visuais
exibidos para o usurio (Graphical User Interface GUI), devem ser feitas
sempre que exista atualizao dos subsistemas que manipulam os eventos
lgicos e visuais do jogo, causando um forte acoplamento entre a GUI e esses
subsistemas;

c. Resultados: Atualizao automtica da GUI, com fraco acoplamento entre os


subsistemas lgicos/visuais e a GUI do jogo;

State;
a. Caracterstica: Usado para permitir que um objeto altere o seu comportamento
quando o seu estado muda. Ao utilizar este padro, parecer que o objeto mudou
de classe;
b. Problema no Jogo: As alteraes e evolues ocorridas em cada objeto
personagem e cada objeto evento devem ser diferenciadas, dependendo da
caracterstica de cada personagem e evento;
c. Resultados: Alteraes e evolues feitas em objetos personagens e eventos
tornam-se independentes do estado que o objeto se encontra. O State se
encarrega de avaliar o estado do objeto e fazer as devidas alteraes/evolues;
Como mostrado, esses e outros padres podem ser utilizados no desenvolvimento de
jogos, com ligeiras adaptaes, viabilizando a soluo de problemas aparentemente
difceis, mas que j foram lies aprendidas em outros projetos de sistemas.
3. Concluso
Com este trabalho, foi possvel aprender a lio de que a Engenharia de Software
perfeitamente aplicvel no desenvolvimento de jogos eletrnicos, mesmo usando
tcnicas especficas de aplicaes comerciais, principalmente quando trata-se, mais
especificamente, de Padres de Projeto. Com a criao do jogo de RPG Os Federa 4 e
a Mquina do Tempo, observa-se que as aplicaes dos padres otimiza a fase de
desenvolvimento e torna seu cdigo reutilizvel para jogos futuros e de fcil
entendimento, alm do cumprimento total do escopo no tempo previsto. Um jogo
precisa de uma equipe de desenvolvimento e o uso de padres tambm facilita a
comunicao entre os membros da equipe.
Uma boa sequncia deste trabalho uma pesquisa focada em jogos de outros tipos,
como aventura, luta ou esporte que poder trazer muito mais contribuies para o
desenvolvimento de jogos, alm da criao de padres especficos para jogos de
computador.
4. Referncias
DCC. Disciplinas do curso de Cincia da Computao [Online]. Central das Disciplinas
do DCC/UFBA. - UFBA, 2008. Disponvel em https://disciplinas.dcc.ufba.br/.
Acessado em 11 de maro de 2011.
GAMMA, Erich & HELM, Richard & JOHNSON, Ralph & VISSIDES, John.
Design Patterns: Elements of Reusable Object-Oriented Software [Livro]. - [s.l.] :
ADDISON WESLEY, 1995.
PRESSMAN, Roger S. Engenharia de Software - So Paulo : Makron Books, 1995.
SILVEIRA, Ismar & SILVA, Luciano. Aprendizagem de Padres de Projeto em
Cincia da Computao atravs de Jogos Digitais. Anais do XXVI Congresso da
SBC. - So Paulo : [s.n.], 2006.

Potrebbero piacerti anche