Máquinas de Estados Finitos Aplicados a Jogos Eletrônicos
Transcrição
Máquinas de Estados Finitos Aplicados a Jogos Eletrônicos
1 Revista Eletrônica da Faculdade Metodista Granbery http://re.granbery.edu.br - ISSN 1981 0377 Curso de Sistemas de Informação – N.14, JUL/DEZ2013 Máquinas de Estados Finitos Aplicados a Jogos Eletrônicos César Roberto de Sousa Loureiro Júnior 1 Elena Dias Bastos2 Munir Cheik Kaled de Moraes 3 Paola Jenifer Cañete Rodrigues Gonçalves 4 Sérgio Muinhos Barroso Lima 5 RESUMO: Atualmente, no mercado, percebe-se um crescimento significativo das tecnologias na área dos jogos eletrônicos. Os games têm conquistado uma posição de destaque. O mercado oferece uma gama de possibilidades de acordo com o gosto de cada usuário. Com o uso da inteligência artificial, os jogos têm proporcionado desafios, de forma a atrair usuários de diversas faixas etárias, possibilitando o sentimento e a sensação de outra realidade, com o uso do mundo virtual. Esse artigo tem por objetivo apresentar a utilização de Máquinas de estados finitos e suas aplicações em Inteligência Artificial (IA) nos jogos, além de um estudo de caso do jogo Pac-Man. PALAVRAS-CHAVE: Jogos Eletrônicos, Inteligência Artificial, IA, Máquinas de Estados Finitos, Pac-Man. ABSTRACT: Currently on the market, there is a significant growth of the technologies in the field of electronic games. The games have earned a prominent position. The market offers a range of possibilities according to the taste of each user. With the use of artificial intelligence, games have provided challenges in order to attract users of 1 Bacharelando em Sistemas de Informação, Faculdade Metodista Granbery, [email protected]. Bacharelando em Sistemas de Informação, Faculdade Metodista Granbery, [email protected]. 3 Bacharelando em Sistemas de Informação, Faculdade Metodista Granbery, [email protected]. 4 Bacharelando em Sistemas de Informação, Faculdade Metodista Granbery, [email protected]. 5 Mestre em Ciência da Computação, UNICAMP, [email protected]. 2 2 different ages, allowing the feeling and sense of another reality with the use of the virtual world. This article aims to present the use of handling techniques, finite state machines and their applications in Artificial Intelligence in games, and a case study of the game Pac-Man. KEY-WORDS: Electronic games, Artificial Intelligence, Finite State Machines, Pac-Man. 1. INTRODUÇÃO A tecnologia e o avanço no desenvolvimento de softwares, têm se reproduzido em máquinas do mundo real. Para que essa interação entre o mundo virtual e o real ficasse cada vez mais atrativa e parecida com tarefas do nosso cotidiano, utilizou-se das técnicas da Inteligência Artificial, que teve seu inicio após a Segunda Guerra Mundial, com os estudos do matemático Alan Turing. Desde essa época, começou, então, um avanço na IA, com aplicações em jogos eletrônicos, no intuito de serem cada vez mais atrativos para seus usuários. Para fazer essa interação da interface dos jogos com os usuários, utilizam-se várias técnicas de controle dos personagens autônomos. Uma dessas é a máquina de estados finitos, que pode ser usada de forma a se estabelecer um padrão de ações ou execuções a partir de condições atendidas no decorrer dos jogos, o que pode levar o jogo a se tornar previsível; como também pode ser programada e configurada a fim de tornar o jogo complexo e imprevisível. A abordagem do estudo de caso Pac-Man exemplifica o uso da máquina de estado finito. Apesar de antiquada em comparação às modernas tecnologias de IA, tais como agentes inteligentes, redes neurais, algoritmos genéticos, buscas heurísticas, dentre outras, as máquinas de estados finitos voltaram a ser utilizadas em grande escala para jogos em celulares e outros dispositivos móveis. Esses dispositivos não suportam os jogos modernos, que consomem muitos recursos de máquina: CPU, memória, processamento gráfico, sonoro, etc. Nesses dispositivos, ressurgiram, das cinzas, os antigos jogos clássicos, como Pac-Man, Space Invaders, e outros jogos simples, que utilizam, basicamente, máquinas de estados finitos no controle de seus personagens. 3 O estudo de caso, o jogo Pac-Man, demonstra o surgimento de um importante marco na aplicação e evolução da IA em jogos. A utilização de máquinas de estados finitos abriu as portas para novas descobertas e melhorias na sua aplicação. O Jogo Pac-Man não foi apenas um novo game, e sim um novo conceito de utilização da IA aliada às Máquinas de Estados Finitos em jogos. Com uma interface simples, o jogo Pac-Man encobriu sua complexa programação, que o torna dinâmico, mesmo sendo uma máquina que realize sempre o tipo de execução que se espera de uma máquina de estados finitos. Através das personalidades (algoritmos de busca) implementadas em cada fantasma, o jogo ganha uma imagem de desafio e superação, pois quanto maior o cenário a ser percorrido, mais difícil é a tarefa de escapar dos fantasmas “inteligentes”. Apesar de, hoje, se configurar como um jogo antiquado sob o ponto de vista estético e tecnológico, o Pac-Man é um marco histórico na indústria dos games e um exemplo clássico da utilização das máquinas de estados finitos. 2. Histórico da IA nos Jogos Eletrônicos. As ciências da computação têm realizado estudos sobre as diversas tecnologias e as diferentes formas de programar, a fim de desenvolver estruturas capazes de ser inteligentes, de maneira que possam ter a capacidade de aprender novas informações. Dessa forma, é possível que uma máquina ou software tenha a capacidade de reagir e ter comportamentos de acordo com regras determinadas, estímulos ou até mesmo ações humanas, isto é, da mesma maneira que um ser humano reagiria, pensaria ou faria. O conceito de IA (Inteligência Artificial) iniciou-se após a Segunda Guerra Mundial, com alguns estudos e trabalhos do matemático Alan Turing, que produziu o artigo "Computing Machinery and Intelligence" (TURING, 2014), na década de 50, dando início aos estudos mais aprofundados de IA. Já para os acadêmicos, a IA é uma gama de possibilidades infinitas de como criar um ser inteligente, usando computadores, ou, interdisciplinaridade: ao menos, psicologia, simulá-lo. cognição, É uma sociologia, ciência linguística, de intensa neurologia, computação, matemática, dentre outas. No ano de 1978, os jogos eletrônicos tiveram uma grande reviravolta, pois todos os jogos eram estáticos e não possuíam qualquer inteligência para tornar o ato 4 de “jogar” mais divertido e dinâmico. Baseando-se nestes conceitos, o inventor Tomohiro Nishikado desenhou o primeiro jogo com IA no mundo chamado de “Space Invaders”. Este jogo fazia grandes referências a invasões alienígenas e lutas com espaçonaves. Seus algoritmos de IA, majoritariamente máquinas de estados finitos, eram simples, de forma que era possível aprender os padrões de movimentação dos inimigos e prever os seus movimentos. O jogo Space Invaders foi lançado pela empresa desenvolvedora de jogos japonesa Taito Corporation e, logo depois, continuado pela empresa americana Midway Games. O game fez tanto sucesso que foi um dos primeiros jogos Arcade a ser transferido para o console do antigo Atari. Para Coppin (2012), “inteligência artificial envolve utilizar métodos baseados no comportamento inteligente de humanos e outros animais para solucionar problemas complexos”. Para os programadores de jogos eletrônicos, o significado de IA difere do meio acadêmico, pois, para este último, a preocupação está em desenvolver aplicações para resolver problemas complexos, como, por exemplo, imitar o reconhecimento fácil de imagens e objetos que o ser humano é capaz de realizar. No entanto, os desenvolvedores de jogos se preocupam com a diversão que os jogos serão capazes de proporcionar. O objetivo final deles é o resultado e não como o sistema alcança esses resultados, pois os jogos são negócios, e seus consumidores não estão preocupados em como a IA foi usada, e sim com a diversão e o desafio que o jogo proporciona para seus consumidores. Seus personagens devem tomar decisões coerentes com o contexto em que estão sendo aplicados, de forma lógica, porém não repetitiva, nem previsível. Os primeiros jogos eletrônicos lançados são considerados muitos simples se comparados com os jogos da atualidade (ver figura 1), pois, com a evolução da tecnologia e da IA em jogos, estes foram ficando mais parecidos com a realidade, com imagens de alta resolução (figura 2). Os personagens são programados para usarem técnicas inteligentes de ações humanas, tornando-se mais atrativos para os usuários de jogos eletrônicos. A visão atual da inteligência artificial é direcionada a contribuir com o gamedesign, para facilitar as modificações de acordo com a concepção do jogo, com o intuito de traduzir sentimentos e sensações, tornando a imersão dos jogos muito maior. 5 Figura 1 - Imagem do jogo Pac-Man, lançado em 1980. Fonte: (Pac Man, 2013). Figura 2 - Jogo Ms. Pac-Man, lançado no ano 2000. Fonte: Fonte: (Pac Man, 2013). Os jogadores buscam jogos com certo equilíbrio de dificuldade, pois eles não querem algo muito fácil de ganhar, nem muito difícil. Para se chegar nesse equilíbrio de nível de dificuldade, usa-se então a IA, pois é ela que irá proporcionar a inteligência aos personagens que não serão controlados pelos seres humanos. 6 Vale ressaltar, com essa evolução dos games, a necessidade de hardwares potentes para rodar essas aplicações dos jogos atuais. Já os pequenos dispositivos móveis ainda contam com poucos recursos computacionais, o que vem trazendo à tona os jogos antigos e suas técnicas de IA. 3. Técnicas de IA aplicadas a jogos Uma das mais interessantes áreas de estudo para aplicação da inteligência artificial, atualmente, tem sido a sua utilização em jogos eletrônicos, com o objetivo de tornar o mundo eletrônico mais próximo da realidade humana. A Inteligência Artificial sistematiza e automatiza tarefas intelectuais e, portanto, é potencialmente relevante para qualquer esfera da atividade humana. Os softwares que usam a IA são produtos que utilizam, no seu processo de construção, recursos intelectuais humanos, que vão desde sua especificação até sua distribuição e pleno funcionamento. Inteligência Artificial é uma das ciências mais recentes, que, atualmente abrange uma variedade enorme de subcampos, que vão desde áreas de uso geral, como aprendizado e percepção, até tarefas mais específicas, como jogos de xadrez. A IA otimiza as tarefas que exigem raciocínio, e, portanto, é um modo de ampliação das atividades intelectuais humanas como meio de auxiliar os processos que precisam de uma determinada lógica interativa. Há varias técnicas de IA que podem ser utilizados em jogos eletrônicos, dentre elas, destacam-se: Sistemas especialistas, Sistemas Baseados em Regras, Sistemas Fuzzy, Raciocínio Baseado em Casos, redes neurais, máquinas de estados, algoritmos genéticos, algoritmos de busca, etc. Para melhor contextualizar a respeito da utilização de IA em jogos, Artero(2009, p.20) explica que: A atuação em um jogo envolve o uso de estratégias e raciocínio, próprio de seres inteligentes. Assim, ao longo dos anos, a área de jogos tem sido um laboratório importante para o desenvolvimento de varias técnicas de IA. Atualmente, vários jogos de última geração agregam técnicas de IA, o que significa que os personagens controlados pela máquina têm o seu comportamento alterado dependendo do tipo de comportamento do usuário ou, ainda, modificam sua estratégia após uma derrota, caracterizando um aprendizado com a sua própria experiência. 7 Pensando nisso, a indústria de jogos eletrônicos tem investido cada vez mais em sistemas de jogos que envolvam raciocínio lógico, despertando, assim, o instinto de desafio em seus jogadores. Alguns anos após os lançamentos de jogos com IA, iniciou-se a corrida para se desenvolver cada vez mais técnicas e “Engines”, tecnologias capazes de tornar os games mais interativos, inteligentes e dinâmicos. Foram criadas técnicas para aperfeiçoar todas as atividades e tomadas de decisão que um game precisaria fazer. Desta forma, foi possível ampliar a diversidade, a interatividade e a mobilidade do jogo. Alguns jogos foram desenvolvidos com a técnica de Máquina de Estado Finito, principalmente os jogos antigos e os atuais utilizados em hardware com capacidade limitada de processamento, como celulares, por exemplo. Nesse contexto, o jogo é baseado em um algoritmo sequencial que realiza a busca das informações em uma ordem paralela ao acontecimento do jogo. Sendo assim, o algoritmo se torna uma IA responsável por entender onde o jogo se localiza e quais as informações ele deve apresentar ao usuário. 4. Máquina de Estados Máquinas de estados finitos (do inglês, finite state machine), ou autômato finito, é uma forma matemática de representar programas de computadores. Pode ser definida como um conjunto de estados, alguns dos quais podem ser denominados estados finais, incluindo-se as transações entre os estados e as ações. À medida da interação, o controle de uma máquina pode variar de um estado a outro, que será definido de acordo com o conjunto de regras de transição especificadas para o autômato, como exemplificado na figura 3. 8 desarmar armado em espera armar intrusão tempo expirado desarmar sirene Figura 3: Máquina de Estado para controle de um alarme. Fonte: desenvolvido pelos autores. Percebe-se, pela figura 3, que as máquinas de estados finitos são ideais na modelagem e comportamentos simples e previsíveis, como de um alarme, por exemplo. Essas vantagens, porém, tornam-se, ironicamente, suas desvantagens em jogos complexos, pois essa limitação e essa previsibilidade são justamente as causas para que os usuários se cansem de jogar, pois, uma vez dominada a estratégia da máquina, o jogo perde a sua atratividade. A utilização das máquinas de estado finito foi extremamente ampla, em especial na prática de jogos de luta, nos quais os oponentes tinham uma série finita de movimentações e comportamentos a partir de condições pré-definidas e programadas para os mesmos. Máquinas de estados finitos têm o conceito muito importante em diversas áreas da informática e são utilizadas em estudos de processos sistemáticos. “[...] são estruturas lógicas compostas por um conjunto de estados e um conjunto de regras de transição entre os estados. São ferramentas úteis em qualquer aplicação que envolva o controle de processos, na qual seja possível descrever cada uma das situações discretas em que os processos podem se encontrar a cada momento”. (SANTOS, 2004, p. 11). 9 É necessário tratar os dois tipos de máquinas de estados, a determinística e a não determinística, mostrando suas diferenças. Em seguida, abordaremos um estudo de caso sobre o Pac-Man, e como funciona toda a lógica de busca de cada um dos fantasmas que estão inseridos no jogo. Numa máquina determinística ou autômato finito determinístico (AFD), as entradas que rotulam as transições de um dado estado são mutuamente exclusivas, ou seja, não partilham símbolos comuns. Nestas máquinas, se conhecermos o estado inicial e a sequência de entrada então toda a trajetória de estados e a sequência de saída podem ser determinadas. É um padrão muito usado em jogos para definir o comportamento de agentes reativos em games. Como vantagem, esses algoritmos são fáceis de programar, de depurar e simples de entender, além de seu processamento ser de baixo custo; mas possuem uma desvantagem, pois à medida que o usuário vai jogando o game, ele aprende as medidas a serem tomadas nas ações, devido à previsibilidade que esta técnica propõe. Nas máquinas não determinísticas, a IA possui um grau de indeterminação, podendo ser variável a cada implementação. Estas técnicas são difíceis de manipular, entender e testar. São mais lentas, se comparadas com as técnicas determinísticas, além de serem imprevisíveis. Um bom exemplo seria o aprendizado que o NPC (Non Player Character – personagem não controlado pelo jogador) adquire ao jogar com um usuário de game. O comportamento do NPC pode variar de acordo com as medidas tomadas pelo jogador, aumentando, assim, o tempo do jogo e a diversão. As máquinas de estado não determinísticas vêm suprir, em maior grau, a imprevisibilidade comportamental dos agentes autônomos. Para este desenvolvimento de IA, é necessário mais processamento, pois os algoritmos são mais complexos, mais difíceis de depurar, mais complicados de entender e ainda exigem uma atenção dos desenvolvedores para que as possíveis ações do computador estejam no contexto do jogo. 10 5 Estudo de caso: Pac-Man. Após o surgimento dos primeiros jogos com IA, a Empresa Midway Games deu continuidade a esta revolução, dando origem ao famoso game Pac-Man. O jogo Pac-Man foi baseado em um algoritmo com uma lógica simples. A lógica do jogo é controlada por uma máquina de estados finitos. O jogo consiste em um mapa, onde o jogador deve percorrer todo o labirinto de forma a recolher todos os objetos dispostos no mesmo. Além de percorrer o labirinto, o jogador também deverá fugir dos fantasmas que o perseguem durante todo o jogo. Os fantasmas são: Inky, Pinky, Blinky e Clyde. O jogo utiliza máquinas de estados finitos para controlar os comportamentos dos fantasmas, conforme ilustra figura 4. Esses fantasmas têm três tipos de comportamentos, também conhecidos como personalidades. A forma de implementação de cada personalidade com uma ação varia com o tipo de cada fantasma. As personalidades são: Caçar (Chase) Fugir (Evade) Dispersar (Scatter) Figura 4: Movimentação baseada em máquina de estados: dispersar, caçar e fugir. Fonte: (LIMA, 2012). Detalhando cada comportamento previsto para os “fantasmas”, temos: 11 Dispersar: o estado de dispersão é acionado ao início do jogo; é responsável por mover os personagens em direção aos cantos e andar em círculos, ficando o mais longe possível do Pac-Man, como demonstra a figura 5. Figura 5: dispersão baseada em máquina de estados. Fonte: (LIMA, 2012). Fugir: quando a ação “fugir” é acionada, quando o usuário “come” uma pastilha de “força”, cada fantasma movimenta-se mais lentamente, com movimentos aparentemente aleatórios, como demonstra a figura 6. Figura 6: Movimentação: fugir. Fonte: (LIMA, 2012). Apesar da aparente simplicidade, cada fantasma tem sua própria “personalidade” ao evadir, controlada por um algoritmo modelado por uma máquina 12 de estados particular, que leva em conta a posição do usuário, o nível do jogo, a posição dos demais fantasmas, dentre outras variantes. Caçar: existem quatro funções de caçar; de acordo com a cor de cada fantasma, o algoritmo age de forma diferente. • BLINCK : movimenta-se de acordo com a posição do Pac-Man, seguindo-o, como demonstra a figura 7. Figura 7: Movimentação do fantasma Blinky. Fonte: (LIMA, 2012). • PINK: movimenta-se mirando quatro pontos à frente do Pac-Man tentando, assim, prever seu caminho, como demonstra a figura 8. 13 • • • Figura 8: Movimentação: prevendo movimentação do Pac-Man. Fonte: (LIMA, 2012). • INKY: movimenta-se mirando uma combinação da direção e posição do Pac-Man e do BLINCK. Esse é um código mais apurado, que está sempre mais próximo do ator, como demonstra a figura 9. • • 1. 2. Figura 9: Movimentação do fantasma Inky. Fonte: (LIMA, 2012). 14 • CLYDE: quando fica longe do Pac-Man, movimenta-se em sua direção; quando está perto, movimenta-se em direção ao canto da tela, procurando encurralá-lo, como demonstra a figura 10. Figura 10: Movimentação: encurralar Pac-Man. Fonte: (LIMA, 2012). O jogo não foi feito, aparentemente, para ter um fim. Porém, no nível 256, o jogo entra em bug. Não são acessíveis outras fases após essa. O erro é gerado e o sistema começa a gerar anomalias como: não entende quando o Pac-Man morre, as esferas que alteram a função do fantasma para fugir não funcionam, metade do mapa fica danificada, dentre outros bugs, como demonstra a figura 11. Isso sugere uma falha na modelagem da máquina de estados que controla os níveis do jogo e/ou em sua implementação, ou mesmo um erro intencional. 15 Figura 11: Nível 256 do Jogo Pac-Man. Fonte (Pac-Man 2013). 6. CONCLUSÃO A partir dos temas descritos neste artigo, percebe-se a grande importância da IA nos jogos eletrônicos. Sem ela, seria praticamente impossível assegurar a atenção dos usuários de games, pois os jogos seriam uma tarefa muito fácil, previsível e repetitiva. A IA propõe técnicas de inteligência humana nos games, tornando-os atrativos e desafiadores para seus usuários. Com o avanço significativo da tecnologia, as técnicas de IA vêm sendo cada vez mais aprimoradas, tornando a realidade virtual muito próxima do mundo real. As máquinas de estados finitos é uma das técnicas de IA mais antigas, no entanto, vem sendo utilizada, atualmente, por motivos como a rapidez e as facilidades de modificação, facilidade de depuração, além de utilizar pouco processamento, sendo intuitivas e flexíveis. O estudo de caso do Pac-Man, um dos primeiros jogos a utilizar a IA, exemplificou como as máquinas de estados finitos pode ser usada em um game. Com o passar dos anos, novas técnicas são desenvolvidas e cada vez mais os jogos se parecem com a realidade, sempre utilizando técnicas de inteligência artificial. As máquinas de estados finitos, como no exemplo do o Pac-Man, antecessores dos atuais games, demonstraram um grande avanço para sua época. Permitiram o avanço dos investimentos em descobertas de novas implementações e novos gêneros de jogos. 16 Apesar de antiga, essa técnica volta a chamar atenção no mercado de games para dispositivos móveis, um filão em pleno crescimento, em um mercado milionário, com amplas perspectivas para o profissional da computação. REFERÊNCIAS BIBLIOGRÁFICAS ARTERO, Almir Olivette. Inteligência Artificial : Teoria e Pratica. Livraria da Física - São Paulo, 2009. BONATO, Vanderlei. Máquinas de Estados. Elementos de lógica digital II. Disponível em: < http://wiki.icmc.usp.br/images/6/60/Aula_3_-_StateMachineSSC0110_2010.pdf >. Data de Acesso: 28/11/2013. COPPIN, Ben. Inteligência Artificial. 1º ed. LTC. 2012 CORREA, Bruno Duarte, THIAGO, Dias Pastor. A evolução das técnicas de Inteligencia Artificial. Disponível em:<http://sbgames.org/sbgames2012/ proceedings/papers/tutoriais/tutorial-04.pdf>. Acessado em: 28/11/2013. FERRER, Rafael. Empresa usa inteligência artificial em jogos de RH EXAME.com. Disponível em: <http://exame.abril.com.br/tecnologia/noticias/empr esa-usa-inteligencia-artificial-em-jogos-de-rh?page=1>. Acessado em: 12/10/2013. FILHO, Glauco B.R. Aplicação de Inteligência Artificial em Jogos Eletrônicos. Disponível em: <http://fatecindaiatuba.edu.br/reverte/index.php/revista/search/advan cedResults?subject=jogos%20eletr%C3%B4nicos>. Acessado em : 09/11/2013 GOLDSTONE, Will. Unity Game Development Essentials. Packt Publishin, 2009. LAICHT, Glauco David. A INFLUÊNCIA DOS JOGOS ELETRÔNICOS NA INTELIGÊNCIA ARTIFICIAL. Disponível em:<http://www.ceavi.udesc.br/arquivos/ id_submenu/387/glauco_david_laicht.pdf>. Acessado em: 26/11/2013 LIMA, Edirlei Soares de. Inteligência Artificial. Disponível em : <http://edirlei.3dgb. com.br/aulas/ia_2012_1/IA_Aula_26_Maquinas_de_Estados_Finitos.pdf>. Data de acesso: 07/11/2013 17 Pac Man. A História do Pacman, Disponível <http://www.webartigos.com/artigos/a-historia-do-pacman/46005/> Acessado em: em: 05/11/2013 RICARTE, Ivan L. M. Autômatos finitos. Disponível em: <http://www.dca.fee.un icamp.br/cursos/EA876/apostila/HTML/node46.html>. Data de acesso: 30/11/2013. SANTOS, Gilliard Lopes dos. Máquinas de Estados Hierárquicas em Jogos Eletrônicos. Disponível em: <http://www2.dbd.puc-rio.br/pergamum/tesesabertas/ 0220940_04_cap_02.pdf>. Data de acesso: 04/11/2013. VIEIRA, Everton. Inteligência Artificial nos Games – Mais Aplicações | Abrindo o Jogo. Disponível em: <http://abrindoojogo.com.br/inteligencia-artificial-nos-games%E2%80%93-mais-aplicacoes>Acessado em: 04/11/2013 VIEIRA, Everton. Inteligência Artificial nos Games – Categorias e Aplicações ....Disponível em: < http://abrindoojogo.com.br/inteligencia-artificial-nosgames-%E2%80%93-categorias-e-aplicacao > Acessado em: 09/11/2013. TURING, Alan M. Computing Machinery and Intelligence. Disponível em: <http://www.jstor.org/stable/2251299>. Acesso em: 4 nov. 2014.
Documentos relacionados
Máquinas de Estados Finitos Aplicados a Jogos
Revista Eletrônica da Faculdade Metodista Granbery http://re.granbery.edu.br - ISSN 1981 0377 Curso de Sistemas de Informação – N.14, JUL/DEZ2013
Leia mais