• Nenhum resultado encontrado

Introdução à Ciência da Computação com Jogos

N/A
N/A
Protected

Academic year: 2021

Share "Introdução à Ciência da Computação com Jogos"

Copied!
16
0
0

Texto

(1)

Introdução à Ciência

da Computação com Jogos

(2)

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

(3)

Introdução à Ciência

da Computação com Jogos

(4)

CIP-Brasil. Catalogação-na-fonte. Sindicato Nacional dos Editores de Livros, RJ

_________________________________________________________________________

_________________________________________________________________________ F328i

F328i 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. CDD: 005.1CDD: 005.1

CDU: 004.42 CDU: 004.42 © 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 sac@elsevier.com.br 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.

(5)

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

(6)

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.

(7)

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,

(8)

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 Inteligên-cial pela University of Edinburgh. Atualmente é professor assoInteligên-ciado da USP, revisor do Journal of Information Technology Research e membro do corpo editorial da Applied Intelligence (Boston).

(9)

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

(10)

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:

(11)

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ênApên-dices 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

(12)

Curso II – Programação Orientada a Objetos e Guiada a Eventos Cap. 7 ao Cap. 9

Material extra no site sobre estruturas de dados

A presente obra é resultado de anos de experiência dos autores no en-sino de programação e de disciplinas de jogos, em três das melhores univer-sidades do país. Este livro representa uma contribuição tanto para iniciar as pessoas na arte da programação como para ajudar na formação básica da mão de obra necessária para as oportunidades que surgem com a indústria do en-tretenimento (jogos e TV digital interativa) e com as aplicações de simulação em tempo real.

(13)

Capítulo 1 – Computadores ... 1

1.1. A Long Long Time ago… ... 1

1.2. al-Khowarizm ... 3

1.3. Para que serve a computação? ... 5

1.4. Qual é o idioma dos computadores? ... 6

1.5. Insetos ... 9 1.6. Sintaxe e semântica ... 10 1.7. Arquitetura de computadores... 11 CPU ... 12 Memória ... 14 Barramento ... 14

1.8. Dispositivos de entrada e saída ... 15

Capítulo 2 – Variáveis, Tipos de Dados e Expressões ... 17

2.1. Primeiros passos, ou melhor, primeiras palavras em Java ... 18

2.2. Saída de dados ... 21 2.3. Comentários ... 22 2.4. Variáveis ... 23 2.5. Entrada de dados ... 29 2.6. Expressões ... 31 Exercícios ... 40

Capítulo 3 – Controle de Fluxo por Comandos de Seleção ... 43

3.1. O comando if-else ... 44

3.2. O comando Switch ... 48

Sumário

(14)

3.3. Um pouco mais sobre controle de fl uxo ... 52

Exercícios ... 52

Capítulo 4 – Métodos e Soluções ... 55

4.1. Métodos ... 55

4.2. Criando um método estático ... 57

4.3. Sobrecarga de métodos... 60

4.4. Soluções Iterativas com laços ... 61

4.4.1. O Laço while ... 62

4.4.2. Erros Numéricos em Soluções Iterativas ... 64

4.4.3. Os Laços for e do-while ... 68

4.5. Soluções recursivas ... 70

Exercícios ... 77

Capítulo 5 – Dados compostos como vetores ... 79

5.1. Vetores unidimensionais ... 80

5.2. Vetores bidimensionais ... 85

Exercícios ... 87

Capítulo 6 – Usando Mais Objetos e Classes Simples ... 89

6.1. Um programa, muitas classes... ... 90

6.2. O tipo de dados String ... 93

6.3. Leitura e gravação de arquivos ... 96

6.4. Classes abstratas e interfaces ... 98

Exercícios ...101

Capítulo 7 – Classes, Objetos e Herança ...103

7.1. Classes e objetos ...104

7.2. O modifi cador Static ...107

7.3. Instância versus estático ...108

7.4. Abstração de classe e encapsulamento ...109

7.5. A referência this ...113

7.6. Herança ...114

7.7. A palavra-chave super ...118

7.8. Classes abstratas ...119

7.9. As classes GameObject e Player ...123

(15)

Capítulo 8 – Programação Gráfi ca ...127

8.1. As classes Graphics e Color ...128

8.2. Escrevendo texto no modo gráfi co ...138

8.3. O Game Loop ...140

8.4. Incrementando o modo gráfi co...144

8.5. Colisão ...153

8.6. Opsss... tratamento de exceção ...156

Exercícios ...160

Capítulo 9 – Programação Guiada a Eventos ...163

9.1. Eventos e ações simples ...164

9.2. Eventos de teclado ...167

9.3. Eventos defi nidos no contexto do jogo ...170

Exercícios ...177

APÊNDICES A – Desenvolvimento e Design de Jogos ...181

A.1. Introdução ...181

A.2. Design de um jogo ...182

A.3. Desenvolvimento artístico ...188

Modelagem 3D ...188

Terrenos ...190

A.4. Programação / Motores de jogos ...191

Módulo de Visualização ...194

Módulo de Física ...196

Módulo de Áudio ...197

Módulo de Inteligência Artifi cial ...197

A.5. Motores de jogos: Qual usar? ...198

Bibliografi a ...199

B – Sugestões de Projetos ...201

B.1. Frogger ...201

B.2. SpaceWar! ...202

(16)

C – O Motor 2D javaPlay ...205

C.1. JavaPlay – Versão Mini ...206

C.1.1. Demo da Versão Mini ...207

C.1.2. javaPlay reduzido para a Versão Mini ...209

C.2. Demo Versão 00 ...213

C.3. Demo da Versão 0 ...222

C.4. javaPlay para as Versões 00 e 0 ...233

D – O Projeto do javaPlay ...250 D.1. Arquitetura geral ...250 D.2. Sistema Motor ...251 D.3. Sistema de estado ...252 D.4. Objetos de jogo ...253 D.5. Sistemas de entrada ...253 D.6. Sistema gráfi co ...254 D.7. Sprites ...256 D.8. Exemplo de loop ...256 Índice Remissivo ...259

Referências

Documentos relacionados

Máquina de Tabular Utilizava cartões perfurados para armazenar dados Herman Hollerith (1860-1929) História da Informática. Odhner inventou uma série de máquinas de

– Ele provou que para qualquer sistema formal existe uma Máquina de Turing que pode ser programada para imitá-lo. Ou em outras palavras: para qualquer procedimento computacional

Como esses computadores se interligam para formar uma

Em função da forma de comunicação entre os processadores e o grau de Em função da forma de comunicação entre os processadores e o grau de compartilhamento da memória principal e

Retirado do Livro de William Stallings (Arquitetura e Organização de

● Fitas >> Disquetes >> Discos (CD/DVD) >> Pendrive >> Computação em Nuvem. ● Interação com

Por exemplo, se um objeto (ator) tem um método (entende uma mensagem) que tem como parâmetro um número inteiro, não podemos enviar a este objeto um número double.. MÉTODOS COM

Computadores em Java”, Livros Técnicos e Científicos Editora, 2003... “Java: