Preencha a ficha de cadastro no final deste livro e receba gratuitamente informações sobre os lançamentos e as promoções da Elsevier. Consulte também nosso catálogo completo, últimos lançamentos e serviços exclusivos no site www.elsevier.com.br computacao.indb 2 18/9/2009 14:51:56 RostoIntrodCienciaComputacaoJogos_SBC_ok.ai 150.00 lpi 45.00° 9/23/09 1:39:23 PM Process Black Bruno Feijó, Esteban Clua e Flavio S. Corrêa da Silva Introdução à Ciência da Computação com Jogos Aprendendo a programar com entretenimento © 2010, Elsevier Editora Ltda. Todos os direitos reservados e protegidos pela Lei no 9.610, de 19/02/1998. Nenhuma parte deste livro, sem autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida sejam quais forem os meios empregados: eletrônicos, mecânicos, fotográficos, gravação ou quaisquer outros. Copidesque: Adriana Kraner Revisão: Marília Pinto de Oliveira Editoração Eletrônica: SBNIGRI Artes e Textos Ltda. Elsevier Editora Ltda. Conhecimento sem Fronteiras Rua Sete de Setembro, 111 – 16o andar 20050-006 – Centro – Rio de Janeiro – RJ – Brasil Rua Quintana, 753 – 8o andar 04569-011 – Brooklin – São Paulo – SP – Brasil Serviço de Atendimento ao Cliente 0800-0265340 [email protected] ISBN 978-85-352-3419-0 Nota: Muito zelo e técnica foram empregados na edição desta obra. No entanto, podem ocorrer erros de digitação, impressão ou dúvida conceitual. Em qualquer das hipóteses, solicitamos a comunicação ao nosso Serviço de Atendimento ao Cliente, para que possamos esclarecer ou encaminhar a questão. Nem a editora nem o autor assumem qualquer responsabilidade por eventuais danos ou perdas a pessoas ou bens, originados do uso desta publicação. CIP-Brasil. Catalogação-na-fonte. Sindicato Nacional dos Editores de Livros, RJ _________________________________________________________________________ FF332288ii Feijó, Bruno Introdução à ciência da computação com jogos : aprendendo a programar com entretenimento / Bruno Feijó, Esteban Clua e Flavio S. Corrêa da Silva. – Rio de Janeiro: Elsevier, 2010. Apêndice ISBN 978-85-352-3419-0 1. Programação (Computadores). 2. Jogos por computador. 3. Ani- mação por computador. 4. Computação. I. Clua, Esteban. II. Silva, Flavio S. Corrêa da. III. Título. 09-4873. CCDDDD:: 000055..11 ____________________________________________________________CC__DD_UU__:: _00_00_44__..44_22__ Cad_00.indd 4 22/9/2009 13:44:07 Agradecimentos Muitas pessoas contribuíram para a realização desta obra. Em primeiro lugar estão as nossas famílias, que se privaram do nosso convívio e da nossa atenção durante a nossa contínua e exagerada jornada extra de trabalho. Para eles vão os agradecimentos, literalmente infi nitos, pelos apoio, compreensão e paciência. Bruno agradece à sua esposa Carmem e aos seus fi lhos Marcelo e Leonardo. Esteban agradece à sua esposa Luciana. Flávio agradece à sua espo- sa Renata e à sua fi lha Maria Clara. Este livro não teria surgido sem o espírito inovador de Karin Breitman (professora e pesquisadora do Departamento de Informática da PUC-Rio) que, na qualidade de Diretora de Publicações da Sociedade Brasileira de Com- putação, deu toda a atenção e todo o estímulo aos autores. Agradecimentos efusivos vão para a equipe da Editora Campus Elsevier que com rigor, competência e muita paciência nos acompanharam passo a passo. Em especial, gostaríamos de citar André Gerhard Wolff , Vanessa Vilas Bôas Huguenin e Silvia Barbosa Lima. Sem a ajuda de Lucas Machado e Rodrigo Martins, o motor javaPlay não teria sido possível. Não temos como agradecer sufi cientemente a dedicação desses dois pesquisadores do VisionLab/PUC-Rio. Raros profi ssionais no país têm a competência desses dois pioneiros da área de jogos digitais. A equipe por detrás deste livro é ainda maior e a muitos devemos pala- vras de agradecimento: Luciana Rocha Mariz Clua, por sua ajuda em design gráfi co; Fernando Ribeiro e Pablo Bioni, pela arte nos elementos visuais dos jogos; Anselmo Antunes Montenegro e Dante Corbucci Filho, professores do Instituto de Computação/UFF, como consultores em Java; e Marcelo Pana- computacao.indb 5 18/9/2009 14:51:56 ro Zamith, pela ajuda no material de demonstração colocado no site. Com o receio de não sermos sufi cientemente abrangentes e considerando o grande número de pessoas, nos limitamos a agradecer, em bloco, a todos os nossos alunos – nossa primeira fonte de inspiração e de colaboração na pesquisa e no ensino – por seus permanentes questionamentos, suas incuráveis mentes criativas e suas alegrias em aprender e ajudar. computacao.indb 6 18/9/2009 14:51:56 Os Autores Bruno Feijó possui graduação em Engenharia Aeronáutica pelo ITA, mestrado em simulação dinâmica pela PUC-Rio e doutorado em CAD (Computer-Aided Design) pela University of London. Atualmente é professor associado do DI (Departamento de Informática) da PUC-Rio, no Grupo de Computação Gráfi ca e Entretenimento Digital, e Coordenador do VisionLab/ PUC-Rio – Laboratório de Visualização, TV/Cinema Digital, Games e Produ- ção de Conteúdo Digital. É pioneiro em 3 áreas de pesquisa em Informática no país: CAD, Animação e Jogos. Foi um dos criadores da Comissão Especial da SBC em Jogos e Entretenimento Digital e foi o seu primeiro Presidente. Ele também é um dos fundadores do SBGames (Simpósio Brasileiro de Jogos e Entretenimento Digital). Foi o idealizador da Rede Brasileira de Visualização (RBV) ligada ao MCT. Também foi um dos principais colaboradores na ideali- zação do curso profi ssionalizante do Núcleo de Pesquisa em Educação, criado pelo Instituto Oi Futuro. Na pós-graduação do Departamento de Informática da PUC-Rio, da qual já foi Coordenador, ministra cursos de jogos, animação e efeitos especiais. Na graduação do DI/PUC-Rio, da qual já foi Coordenador, tem ministrado os cursos de introdução à ciência da computação por cerca de 15 anos. Esteban Clua possui graduação em Computação pela USP, mestrado pela PUC-Rio e doutorado também pela PUC-Rio. Atualmente é professor do Instituto de Computação da UFF e coordenador geral do UFF Media Lab, além de atuar na pós-graduação dessa universidade. Atua especialmente na área de Computação Gráfi ca em tempo real, Games, Realidade Virtual, GPUs, computacao.indb 7 18/9/2009 14:51:56 visualização e simulação. É membro do conselho administrativo da ABRA- GAMES, membro da Comissão Especial de Jogos e Entretenimento Digital da SBC e um dos pioneiros na área de pesquisa científi ca em jogos e entrete- nimento digital. Também é um dos criadores do SBGames e um grande entu- siasta da área de jogos digitais. Flávio S. Correa da Silva possui graduação em Engenharia de Pro- dução pela USP, mestrado pela Politécnica da USP e doutorado em Inteligên- cia Artifi cial pela University of Edinburgh. Atualmente é professor associado da USP, revisor do Journal of Information Technology Research e membro do corpo editorial da Applied Intelligence (Boston). computacao.indb 8 18/9/2009 14:51:56 Prefácio Estamos vivendo a revolução do mundo digital, onde ter noções de programação é tão essencial quanto saber o básico da matemática, da física, da economia, e quem sabe até dos primeiros socorros médicos... Até mesmo artistas e designers já perceberam que programar está na essência das novas mídias. Se você abriu este livro, muito provavelmente você ou é um fi ssurado por jogos, ou é um estudante, ou é um educador, ou pelo menos é um curioso incorrigível (uma das maiores qualidades do novo profi ssional criativo). Em qualquer desses casos, você deve estar buscando uma introdução à arte de pro- gramar que esteja mais próxima das novas demandas do mundo digital e que seja menos maçante para acompanhar. Você também pode estar procurando uma introdução à arte de desenvolver jogos digitais, quer porque você almeja ser um profi ssional da área, quer porque lhe disseram que o jogo digital é uma aplicação onde convergem os maiores desafi os da computação (um jogo tem que ser multimídia, visualmente elaborado, distribuído, artifi cialmente inte- ligente ... e tudo isso rodando em tempo real). Como educador, muito pro- vavelmente você deve estar buscando um texto mais leve e estimulante para a geração de jovens Y. Este livro pretende atender a todas essas expectativas. Muita coisa mudou desde que a primeira linguagem de programação de alto nível foi lançada há mais de 50 anos. Desde então, as linguagens e os para- digmas de programação têm evoluído constantemente. Linguagens caem em desuso e novas surgem. E qual a melhor linguagem para aprender no momen- to? Essa é uma pergunta que vem sendo formulada desde o momento em que surgiram duas linguagens diferentes e os primeiros cursos de computação; e provavelmente continuará a ser feita até o dia em que não precisaremos mais dos computadores... Muito difi cilmente haverá um consenso na resposta a essa computacao.indb 9 18/9/2009 14:51:56 pergunta, mesmo entre os mais conceituados cientistas de computação do país. Não existe a situação ideal de que podemos aprender os conceitos da ciência da computação sem nos incomodarmos com as idiossincrasias e as complexidades de uma particular linguagem. Talvez o Lisp seja a que mais tenha se aproxima- do deste ideal (sua qualidade é atestada pelo fato de ser a segunda mais antiga linguagem do planeta ainda viva). Mas o Lisp está longe de ser uma opção para as novas demandas do mundo digital. A linguagem C já está distante dos novos paradigmas de programação. C++ é muito efi ciente, especialmente no mundo dos jogos 3D, mas além de estar se tornando antiga, não é uma linguagem de fácil aprendizado. Neste livro optamos pela linguagem Java por várias razões. Primeiro, o Java possibilita aplicações em uma grande variedade de plataformas: internet nos servidores, PCs, celulares e sistemas embarcados. Segundo, o Java roda em mais de um sistema operacional (Windows, Linux, ...) e conta com um bom ambiente de desenvolvimento gratuito (NetBeans). Terceiro, o Java é uma linguagem orientada a objetos – um paradigma atual de programação. Quarto, Java é o ponto de partida para a programação da internet – a invenção que de- terminará o futuro da computação. Quinto, a próxima geração de linguagens orientadas a objetos será a evolução natural do Java (como já o é a linguagem C#). Sexto, Java serve muito bem para desenvolver jogos 2D – o tipo de aplica- ção que estamos usando neste livro. Independente da escolha do Java, este livro procura, antes de mais nada, apresentar os conceitos e os bons hábitos da arte de programar. Dessa manei- ra, o livro está organizado em duas partes. A primeira parte se concentra na programação procedimental estruturada (capítulos 2 a 6) e a segunda parte é dedicada aos paradigmas de orientação orientada a objetos e de programação guiada a eventos (capítulos 7 a 9). Introduzir o conceito de orientação a ob- jetos não é uma tarefa fácil, mas é indispensável no cenário atual da ciência da computação. Este livro procura ir trazendo esse novo conceito aos poucos, sem pretender esgotar o assunto, nem aspirar ser usado como um livro de referência. Este é um livro didático que funciona como ponto de partida para os modernos conceitos em ciência da computação. O projeto deste livro inclui uma terceira parte, disponível na internet, que pode sustentar um curso mais avançado e/ou pode dar continuidade a uma especialização na área de desen- volvimento de jogos: www.inf.puc-rio.br/livroicc computacao.indb 10 18/9/2009 14:51:56 A melhor maneira de usar este livro é implementar cada exemplo citado no texto e fazer os exercícios no fi nal de cada capítulo. Um motor de jogo 2D, chamado javaPlay, foi especialmente desenvolvido para este livro. O javaPlay é conciso, didático, mas tem uma estrutura profi ssional, moderna e com pos- sibilidade de ser usado com efi ciência pela indústria. O javaPlay é apresen- tado em várias versões de graus crescentes de complexidade: Mini (a versão minimalista, para começar), Versão 00 (a versão intermediária) e Versão 0 (a versão-base mais completa). A Versão 1 deverá ser a que o leitor mais dedica- do certamente criará. Os apêndices complementam o estudo e servem de referência. Reco- mendamos, em especial, que sejam feitos os projetos de jogos do Apêndice B. Os amantes de desenvolvimento de jogos acharão muito interessante o Apên- dice A. Os Apêndices C e D servem de referência para o motor de jogo java- Play. Este é um livro texto para um primeiro curso de introdução à ciência da computação, usando a criação de jogos digitais como instrumento de apren- dizado e motivação. Esta obra é organizada em uma sequência de tópicos que correspondem a um curso de 64 horas, em blocos de 4h/semana (16 semanas, ao total). Sugestões de sequência de assuntos e material de suporte ao profes- sor e ao aluno podem ser encontrados na página Web citada anteriormente. Uma possível sequência para 16 semanas pode ser: semana 1: apresentação e cap.1 semana 2: cap.2 semana 3: cap.3 semanas 4 a 6: cap.4 semana 7: cap.5 semana 8: cap.6 semanas 9 a 11: cap.7 semanas 12 a 14: cap.8 semanas 15 e 16: cap.9 Uma outra sequência de aprendizado pode ser proposta através de dois cursos, com mais tempo para elaborar os conceitos: Curso I – Programação Procedimental Estruturada Cap. 1 ao Cap. 5 Cap.6 como preparação ao Curso II computacao.indb 11 18/9/2009 14:51:56