Buscar

Arquitetura de Jogos Digitais

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Arquitetura de consoles
Diogo Kimura Yamashiro, Júlio César Honório Silva Carvalho
diogokimura94@gmail.com, mestreyodajunior@hotmail.com
RA:1680961513043, RA: 1680961513021
Resumo
O objetivo principal da arquitetura de jogos digitais é proporcionar para todos os stakeholders de um software, uma maior facilidade de entendimento do código e seu processo de desenvolvimento. Quando um programador começa a codificar qualquer software é necessário num preparo e uma organização para que esse software não saia de sua linha de projeto nem fique confuso e com um baixo desempenho. Dentro de qualquer jogo, desempenho é o que todos os jogadores clamam. Portanto, quando se trata do desenvolvimento de jogos digitais, a sua arquitetura, seu design, sua organização, é extremamente necessária.
Palavras-chave: arquitetura de jogos digitais, arquitetura de software, design de software, desempenho nos jogos digitais, desenvolvimento de jogos digitais.
Abstract
The main goal of architecture of games is to propose for all the stakeholder of a software, an easy way to understand the code e its develop process. When a programmer starts to codify any software is necessary of a prepare and an organization for this software don’t get of his planned trail nor get too confuse and a low performance. Inside of any game, performance is what every players wants. Therefore, when it comes to games development, its architecture, its design, and its organization, is extremely needed.
Key-words: games architectures, software architectures, software design, games performance, games development.
1 Introdução
	Sistemas, jogos e todos esses softwares complexos estão atualmente por toda a parte, em qualquer lar e empresa. Tais softwares são extremamente abstrusos e confusos, que o próprio desenvolvedor, muitas vezes, leva uma grande quantidade de tempo para conseguir entender certa parte do código. Exatamente por esses motivos que muitos pesquisadores e programadores tentam desenvolver alguma forma de simplificar e conceitualizar todo esse conjunto de código. E uma dessas formas de simplificação é a arquitetura de software.
	O tema desse artigo é arquitetura de jogos digitais, este, é certamente um software. Portanto, o entendimento da arquitetura de software é crucial para entender a de jogos digitais. Arquitetura de software não é aprender a codificar, mas sim, ter uma noção do que e como codificar. 
	Existem várias formas de conceituar essa técnica de arquitetura de software, também já existem padrões, porém cada pesquisador, cada livro possui uma maneira razoavelmente diferente. Dentro desse artigo abordarei dois livros, o primeiro seria o “Software Engineering For Game Developers” do Ph.D. John P. Flynt, e o livro, “Game Programming Patterns”, do experiente programador Robert Nystrom, que trabalhou na Eletronic Arts.
2 Engenharia de Software Para Desenvolvedores de Jogos Digitais
	O livro, “Software Engineering For Game Developers”, escrito por John FLynt, é extremamente extensor e aborda toda a engenharia de software no contexto de jogos digitais. Portanto, o artigo abordará somente a primeira parte do capítulo 4, que trata sobre design.
	Design e arquitetura de software estão ligados, porém o design traz uma imensa coleção de ferramentas práticas, estas, são usadas para analisar e refinar um sistema em objetos interativos, trazendo também, uma grande conceitualização do software, onde procura sempre organizar os elementos do sistema. Enquanto que a arquitetura dá uma visão do começo ao fim do software. 
Figura 1 – Perspectiva do design e arquitetura de software
Fonte: FLYNT, p.125
	A figura acima mostra a relação entra o design e a arquitetura. A Prática é a junção dessas duas técnicas, que, no lado do design, acarreta princípios e ferramentas, e no lado da arquitetura, conceitos e estilos.
2.1 Princípios de Design
	Design ajuda a refinar o sistema, portanto entender seu princípio dará a compreensão de como reformatar qualquer refinamento incremental. 
Figura 2 – Princípios de Design
Fonte: FLYNT p126
	A imagem acima mostra um índice do mais frequente princípios.
Seek Abstraction(Procura por abstrações): Basicamente, busca pela captura da essência do objeto.
Seek cohesion(Procura por coesão): Como que um tema específica está ligado por operações do sistema.
Avoid Coupling(Evitando Acoplamento): Acoplamento é a dependência das partes do sistema, evita-lo é conseguir desmembrar o sistema por partes, conseguindo entender cada parte separadamente.
Practice Decomposition(Praticando a Decomposição, ou, desacoplando): É eliminar um determinado acoplamento desnecessário no código.
Eliminate Redundancy(Eliminando redundância): Desacoplar partes do código, exige um certo cuidado para que não haja duas ou mais partes que realiza a mesma operação. Esse cuidado refere-se a eliminação de redundâncias.
Share Resources(Compartilhando recursos): Agrupando as inúmeras partes do código que representa um mesmo tipo de operações.
Reduce Hierarchy Depth(Reduzindo a profundidade hierárquica): Profundidade hierárquica quer dizer aumentar o nível de especialização de uma certa classe dentro do código, reduzi-la torna o código propício a menos acoplamento e mais performance.
2.2 Padrões
O assunto mais importante dentro da arquitetura e design de software. Eles são uma extensão aos princípios. Os padrões são geralmente aplicáveis à grupos de elementos dentro do software. Podemos dizer, que, padrões é, aplicar o design em estruturas e aplicações inteiras. São divididos em alguns aspectos.
Controller(controlador): Padrão nos controladores é tudo dentro do sistema que se interage repetidamente por meio de seus vários objetos.
Singleton(“Coisa única”): Singleton pode ser implementada para controlar a profundidade hierárquica.
 Expert(Especiliasta): Experts resolve os problemas de conflitos de um conjunto de informações que pertence a inúmeras fontes.
Bridge(Ponte):Por meio de bridge, é possível fazer com que uma classe possa ser expandida em outras classe.
3 Arquitetura, Desempenho e Jogos
	Arquitetura, desempenho e jogos é capítulo do livro mencionado na introdução do artigo, “Game Programming Patterns”.
3.1 Arquitetura de software
	Um jogo é certamente um software, que, a grosso modo é a parte lógica do computador. Portanto, antes de falar de arquitetura de jogos digitais, precisaremos entender o que é a arquitetura de software. 
	Entender a arquitetura de um software não é aprender algoritmos, lógica, codificação, criptografia, ou qualquer outra coisa, mas sim, saber como organizar antes de começar a programar. Qualquer pessoa que saiba elaborar um sistema, certamente possui algum tipo de organização, então, como arquitetar um software, ou melhor, como arquitetar bem um software.
	No livro Game Programming Patterns, Robert Nystrom, fala que uma boa arquitetura de software é quando o programa consegue antecipar as suas mudanças, ou seja, podemos solucionar tarefas ou algum problema no código chamando uma ou outra função que se fixa perfeitamente. O autor diz também que a primeira peça chave da arquitetura é essa mudança, sem ela, seria como um corredor que nunca sai da linha de partida.(1ºCapitulo, no subtítulo What is good software arquitecture?)
	Essas mudanças são frequentes, quando encontramos algum problema no código, logo vamos aplicando alterações no mesmo. Porém, antes de apagar, adicionar, alterar alguma parte do código, é necessário entender o código, é necessário fazer uma “compilação” no seu cérebro e procurar apreender o que o código está dizendo, então, aplicar alguma solução. Mas logo após da solução é necessário realizar um limpeza, esta, é um tratamento no código, na qual, será descartado partes ambíguas ou obsoletas do código. Assim, qualquer outra pessoa que for olhar para o código, não conseguirá identificar o que foi alterado.
Figura 3 – ciclo da limpeza de código
Problema identificado
Aprendizado do código
Solução do problema
Limpeza do código
	Aprender o código é algo extremamentelento e doloroso, para isso, é necessário aprender o código por fases, ou seja, desmembrar o código, porém é necessário entender cada membro separadamente. Então, cada parte do código pode ser compreendida e solucionada. Robert Nystrom, diz, “minimize a quantidade de conhecimentos que você precisa aprender para você fazer progresso”. Este conceito é extremamente encantador, desmembrar tudo e programar como nunca. É esse o objetivo da arquitetura de software, produtividade ao máximo. Pensar numa boa arquitetura é planejar em quais partes do código poderá ser adicionadas extensões para que mudanças futuras possam ser facilmente concretizadas.
3.2 Desempenho e velocidade
	Essas inserções no código podem afetar o desempenho, ainda mais em um jogo, porém a razão pela qual a arquitetura existe, é deixar o programa mais flexível, levar menos tempo e esforço para realizar mudanças, a não ser que tenhamos certeza de que mudanças não serão realizadas numa determinada parte do código, essas inserções serão necessárias para que a programação não seja tão massiva e desestimulante. Portanto, criar essa flexibilidade no código nos permite programar com mais facilidade e velocidade. Então, a otimização do código, causará menor flexibilidade no mesmo, acarretando uma maior dificuldade para realizar alguma mudança.
3.3 Simplicidade
	Um código direto, limpo e claro, é com certeza algo muito melhor, mais solúvel. A simplicidade no código torna a sua solução mais direta, portanto, um código simples não significa menos tempo programando, pelo contrário, pode levar até mais tempo, mas sim significa menos código.
4 Conclusão
	Os softwares evoluíram de uma forma que a humanidade depende deles. A sua complexidade evolui proporcionalmente, portanto, fica cada vez mais difícil a compreensão de qualquer jogo digital ou sistema. Para que um software saia como planejado, não é difícil, basta programar, porém, o software não irá muito longe, ou seu código possuirá tantos remendos, correções, redundâncias, etc., que nem o próprio codificador irá entender seu próprio código.
	Irá existir remendos e correções ao longo do desenvolvimento do sistema ou do jogo, exatamente por isso que a arquitetura está para ajudar a todos os stakeholders a entender esse software. A arquitetura é importantíssima para o planejamento de qualquer software, torna o processo de programação muito mais limpo e simples.
5 Referências
ROLLING A., MORRIS D. - Games Architecture and Design -. Disponível em:<https://gamifique.files.wordpress.com/2011/11/6-game-architecture-and-design-a-new-edition.pdf>
FLYNT J.P. - Software Engineering For Game Developers - Cap.4 pág.121. Disponível em:<https://drive.google.com/file/d/0B8TH0Av2gj6oNEV1MlgzSWRRaHc/edit>
NYSTRON R. - Architecture, Performance And Games – Disponível em:<http://gameprogrammingpatterns.com/architecture-performance-and-games.html>

Continue navegando