do jogo/renderização.ulation is running)
current game time;olollisions and collision timemeess;;
ve ccollisions.h coolllliding pair i, j))
// Cálculo aanntteeses dddaa popopppp sisiiçãçãççç oo dedee cccolololisissãoãoo eeee
VectVVecttVVecttoroororor3Doroorr V_iV nit[t[[[[NNNN] =NN inin tialtial velellelocitocittto ies;;;esVVVectVV or3Dor3Dr3r33D3D p_ipp_p_p nit[[[nit[[NNN] =] =N] NN ininin tialal cencennnter ter terrr posiposiss tiont ons;s;s;;VVVectV or3DDDD g(0gggggggg .0, , .0, , 0000.0, -9.9 81);;flflfloatfl masm s[N][[N][Ns[N]NN = p= p= p= p= p= p= ppartiarticle ccle cle massmassmassassmassas es;es;es;es;eses;ees;flflfloatflflflflflfl timtimime_ine_inie iniii it[Nit[Nit[NNN]]] =] = per r partarttrticleiccle staststststs rt tttttiiimesmim ;
floatfloatfloatoataa epsepsepsepsssss ==== c= coeoefficienent ofofff resre tituuuutiotionn;;
// L//// L// L/ oop o prinnprincipaaaal dol dl ddl do jogggo/reendernd izaçzazazaaa ão.ãoãoãoowhilwhiwhilwwwhilee (ge (geee (game meameamee simusimumusimumuullatilatilatil on ionon ion ionooon ss ruruss rurunninnninnninnggg)g)g)))g){{
floato t == curcurcurururrrent gamgammga ee timeme;me;e;e;edetedetdeteet ct cct ccollollollollilisiosionsionsionsiosio s ananndd cod collisllislllill ion ooion o timetimes;ss;s;s;
// R// // R// Resolesolo veve ceve colliollillisisiononsions ss.for rrfor for (eacaceacc(eac(eacch coh coh coh coh coco coh collidiillidlliidii ing ing ingngg g pairairpaairpppp ii, iii, j)jjjj)j))jjjj)
/////// ááláá l d i ã ddd li ã
Este livro foi elaborado por um timede vários profissionais com muita experiência na indústria de jogos.Cada um contribuiu de maneira profunda, cobrindo sua especialidade, para que o resultado fosse uma obra completa,com toda a área de desenvolvimentode jogos explorada.
EditorSteve Rabin
Autores• Bretton Wade• Chuck Walters• David Johnson• Ed Bartlett• Eric Lengyel• Graham Rhodes• Isaac Barry• James Boer• Jeff Selbig• Kathy Schoback• Leslie Stirling• Mark Peasley• Noel Llopis• Peter Lewis• Robert T. Bakie• Stephen Rubin• Sue Bohle• Syrus Mesdaghi• Tito Pagan• Todd M. Fay• Tom Forsyth• Tom Sloper• Tommy Tallarico
Outras obras
Desenvolvimento de gamesTradução da 2ª edição norte-americana
Jeannie Novak
Desenvolvimento de games com Macromedia® Flash® Professional 8Glen RhodesSérie Profissional
Design de games: uma abordagem práticaPaul SchuytemaSérie profissional
Introdução ao desenvolvimento de gamesVolume 1 - Entendendo o universo dos jogos
Tradução da 2ª edição norte-americana
Steve Rabin (ed.)
Programação de games com Java®Tradução da 2ª edição norte-americana
Jonathan S. Harbour
Próximos lançamentos
Introdução ao desenvolvimento de gamesVolumes 3 e 4
Tradução da 2ª edição norte-americana
Steve Rabin (ed.)
VOLUME 2Programação: técnica, linguagem e arquiteturaTradução da 2ª edição norte-americana
DESENVOLVIMENTO DEINTRODUÇÃO AO
STEVE RABIN(EDITOR)
t gamame t mmee;t
i
VeVeVVeVVVV ctctttctctctorororororororororororoooorr3D3D3D3D3 VVVVVVVV_i_i_iiininninit[t[[[[[t[[[[[[[N]N]N]N]N]N]N]N]N]] = iiininininininininiin ttitittititialalalal vvvvvvveleleleeele ocooocococococococococococooocitititiitititiiti iieiiiiessVeVeVeVeVeVeVeVeVeVeVeVeVeVeVeeeeectctctctctctctcctctcttcctcccc orororoororororororororororr33D3D3D3D3D3D3D3D3D3D3D33DD3D3D3D3D pppppppp_i_i_i_i_i_innninniit[t[t[t[t[t[t[[t[t[t[t[t[N]N]N]N]N]N]NN]N]N]NN]N]]]]]] ======= iiiiininininititititialalalaalalllal ccccccceneneneneneenennnennnntetetetetetteteteteteer r r r r r popopopopopopopopopppoppppVeVeVeVeeecctctttttttcttttooororooo 3D3DDDDDD3DDDDDD ggggg(0(0(0(0(0.0.0.000000000000.0,,,,, 000.000.00.0.0000000 0,00,0,000000,0 ------------9.9.9.9.999.999999.99.999 8818888118888888188 ););););););;;;;flflflofloflofloflofloatatattttatttttattttt mmmmmmmmmasasasaassassa s[s[s[s[s[ss[N]N]N]N]N]N] =========== ppppppppppppaarararartitititittiticlclclclclccc eeeee mammamamammammm ssssssssssssssssssssseseseseseseseeesesesesse ;;;;;;;;;;;;;floflofloflflflooatatatttttatat ttttimimimmmmmme__e_e_e_e_innnititititittt[N[N[[[N[N[N[N[N[N[N[N[NNNNNNNNN]]]]]]]]]]]]] === ppeppppepper paapaaaaaaartrtrtttrtticicciccccccccciclelelelelelelelee ssssssssssssstattatatatatttatatattttat rtrtrtrtrtrtrtrttt
flflofloflooooooofloooflooooatatatatatatatatataatatattt eeepsppsss == ccccoooooeo ffififififfififififificicicicicicicicicieneneneneneneenenenenennt t t tttttttt ofofofofofofofffffofofofoffo rrrrrrrrresesesesesessesesestittititititittitututututututuututititititittitionononononononoononnnnnn;;;;;;;;;;
///////////////////////// LLLLLLLLLLLLLLLLooooooooooooooooooooooooooop p p pp p pppp prprprprprprprprprprinininininnnininninncicicicicicicicccciciccc papapapapapapapapapapaapallllllll dodododododododododooodd jjjjjjjjjjogogogogoggogogoggggggggo/o/o/o/o/o/o/o/o/o/oooo rerererereeeeereeer ndndndndndndndndnnndnn ererererrrerrizizizzizizizizizizzzzzzzaçaçaçaçaçaçaçaçaççããããããwhwhwhwwhwhwhwhwhwhhwhwwhilililllllle e ee e e eee e eeeeeeee (g(g(g(g(g(g(g(g(g(g(g(g(g(g((( amamamamamamamamamamamamamammmmammeeeeeeee sisisisisisisisiisssis mumummummumumumumumumumumumumumuulalalallalalalalalalatititititititititititititittittiiiionononononononononononoonononoonnnonn iiiiiiissssssssss ss rururururururuururrrrurrrrr nnnnnnnnnnnnnnnnnnnnnnnnnnininininninininninininininnnninnnng)g)g)g)g)g)ggggggggg{{{{{{
floflooflofloflooflofloofloflooflooooataaatatatatatatattataattatatt tttttttttttttttttt ============ cccccccccc rrrurururrrrrrrrrerererererererereererrrerentntntntntntntntntntntntnttttntnntnt ggggggggggggggggggggggggamamaaamamamamamamamamamamamamamamamamaamame eee ee eeeee tittttititititittitittitititittittttitit mmmmmemememememememememememem ;;;;;;;;dedededdedededddddd teteteteteteteteeeetetectctctctctctctctctctctccc ccccccccccccccccolololololololololololololollilililililililililililililililisisisisisisissisisisisisisisiononononononononononononononnnns sss s ss ssssssss ananananananannnnndddddddddddddd cocococococococcc lllllllllissisississssioioioioioioiioioo
///////////////////////////////////// RRRResesesesesesssssseesesoloolo veeveeeveeeeeee ccccccccccccoloololooloooo lililisisisisisisisssionononononnononononnnono s.ss.s.s.s.s.ss.ssssssfofofofoffof rrrrr (e(eacacaaa h cooolllllllllllidididididdininingggg pppappaiririii iiiii jj)j)j)j))
p pp__ [[ ]] ( _____ [ ]] );pii == pp ++ 000 555555 ***** gg * ((tmtmtiti ** tmmti)i);;;
cuu sisiçççocociddadade ddeee oo EqEqEqEqEqEq ess 4 e 5).).
mm t[j]];;pjj = ppppp__i__ nnit[t[[jj]] + ((VV_V_i ] * ttmti););pjpjpjpjj == pppp + 0000 5.5 ** ggg * (((tt tmtmti)i);vjvjvvvjj == VVVV i_iii_inninn t[[j]j]j]j]j]]]j] ++ * ttmmti;
// C// C// C// C//// C/ áálcáálcuá culolo alo aanteessnttes da da pospppoosippp çção ooo o o ooç de cde cde cde ccde colisolisolisão eoão eão eo// v/// velocelolelocce oce cll idada ee dee objobjjj i i ((EqEquaEquaEquuaaaaçõesççõesçõções 4 ee 55).5flofloatfloaoatatttttfloatoa tmtmtmtmttmtt tttmti =i = i =i = = i =i =i =i ==i timetimetimetimemetimtimet ccoolcocolcollisiisissiislisisislisl ion -n -on -n -onnnononnno timtimtimtimme ine_ine_inee init[iit[iit[iit[i]];];];]]
// C/// C/ álcuálllcuálcl lo aoo ntestess dadd posposipososposip çãçãoçãoção de colisãoão
[jj] + (V_(V_initinitit[[jjj] ] tmmmtmti);ti);55 ** gg* * (tmtmtit * t* tmtmti)tt ;
s;s;oooooooooosisisisisis titititittitiononononononnnononns;s;s;s;sssssss
ttttttttttimimimimimimimim ;
ãoãoãoãoãoãoãoãoãoãoooooooã ......
ooooooonnnnnnnnnnnnn titititititittittit mmmmemem s;s;s;s;s;s;;
poposisiçãçãoo dee ccololisisãoão eebjbj i ((EqEquaaçõçõeseses 444 e 5).).olollilisisisiononon - timimee_iinit[i];itt[i[i]] ** tmtmtiti););
mmtit * ttmtm i);mti;mti;
Tradução da 2ª ed
Jeannie Novak
DesenvolvimentoMacromedia® FlaGlen RhodesSérie Profissional
Design de games:PaPaPaPaPaPaPauululul SSchc uytemaSérie profissional
Introdução ao dett seeVolume 1 - Entende
Tradução da 2ª ed
Steve Rabin (ed.)
Programação deTradução da 2ª ed
Jonathan S. Harb
Próximos la
Introdução ao des;;
Volumes 3 e 4
Tradução da 2ª edeseseseseeses;;;;es;Steve Rabin (ed.)
VVVVVVVVVVVOOOOOOOOLLLLLLUUME 2PrPrPrPrPrPPrPPP ogogooggrararramam ção: técnica, linguagem e arquiteturaTrTrTTradadda uçuçãoãã dda a 2ª edição norte-americana
flofl at tmmtmtii == tititimmeme_c_coolliissiionononon - ttimimmee__ininittt[i[i[i];];]];];float tmti = time_collision - time_init[i];pi = ppp iinniit[t[t[[i]i] ++ ((VVVVV ininininnititititt[[i] ** tmtmtiti);pi = p nit[i] + (V init[i] * tmti)
_pi =pi =pi =p p ipp_i i [it[nit[[[i]]i] +i (V_V(V_VV__initin tiniin [[i]ii]]i[[ * tm* tm* * tm* * tmmmmtiti);ti);;_init[i] + (V_init[i] * tmti);ppi =p = p +pp 0.5555 * gggg * (* (* (** tmtitmtittitmtm i * tttmtmti)mti)mti)tt ;;;+ 0.5 * g * (tmti * tmti);vi vi i =vi =vi =vvvii V iV iV_iV_V_iV_V_iV nitit[nit[nit[nit[[nit[n i] +i] +i] +i] i]i]i] g *g *g *g *g *g *g g tmtmtmtmttmtmtmmtmtm ii;i;;i;_init[i] ++ g *g gg tmttmti;i
// velociddaadadee ddedee oobbjbj i ((EqEquuauaçõçõeseseses 4444 eee 555)).).// velocidade de ob i (Equações 4 e 5)
STESTESTESTESTESTETESTSTSTESSST VEVEVVVEE RRABIN(EED(ED((E ITOR)
Vector3D p_init[N] = initial center positions;Vector3D g(0.0, 0.0, -9.81);float mass[N] = particle masses;float time_init[N] = per particle start times;
float eps = coefficient of restitution;
// Loop principal do jogo/renderização.while (game simulation is running){
float t = current game time;detect collisions and collision times;
// Resolve collisions.for (each colliding pair i, j)
// Cálculo antes da posição de colisão e// velocidade de obj i (Equações 4 e 5).float tmti = time_collision - time_init[i];pi = p_init[i] + (V_init[i] * tmti);pi = p + 0.5 * g * (tmti * tmti);vi = V_init[i] + g * tmti;
// Cálculo antes da posição de colisão e// velocidade de obj j (Equações 4 e 5).tmti = time_collision - time_init[j];pj = p_init[j] + (V_init[j] * tmti);pj = p + 0.5 * g * (tmti * tmti);vj = V_init[j] + g * tmti;
Vector3D V_init[N] = initial velocities;Vector3D p_init[N] = initial center positions;Vector3D g(0.0, 0.0, -9.81);float mass[N] = particle masses;float time_init[N] = per particle start times;
float eps = coefficient of restitution;
// Loop principal do jogo/renderização.while (game simulation is running){
float t = current game time;detect collisions and collision times;
// Resolve collisions.for (each colliding pair i, j)
// Cálculo antes da posição de colisão e// velocidade de obj i (Equações 4 e 5).float tmti = time_collision - time_init[i];pi = p_init[i] + (V_init[i] * tmti);pi = p + 0.5 * g * (tmti * tmti);vi = V_init[i] + g * tmti;
// Cálculo antes da posição de colisão e// velocidade de obj j (Equações 4 e 5).tmti = time_collision - time_init[j];pj = p_init[j] + (V_init[j] * tmti);pj = p + 0.5 * g * (tmti * tmti);vj = V_init[j] + g * tmti;
indústria de games ainda é jovem e se encontra em um ritmo de
expansão impressionante, com tendência a resistir a grandes crises
econômicas, gerando oportunidades para novas ideias, novas formas
de jogar e a necessidade de novos talentos para a indústria.
Esse crescimento inspirou alguns dos especialistas mais brilhantes e respeitados
da indústria de jogos a unir sabedoria e experiência para produzir esta obra, que
aborda o desenvolvimento de um jogo, com a profundidade necessária para entender
e apreciar o estado da arte dos processos tecnológicos.
Introdução ao desenvolvimento de games, Volume 2 – Programação: técnica,
linguagem e arquitetura apresenta uma sólida organização didática, com apresentação
estruturada dos conceitos, sistematização de exemplos e situações modelares. Toda a
abordagem é reforçada por exercícios que cobrem o conteúdo de cada capítulo.
O texto ainda conta com uma considerável quantidade de pseudocódigos e códigos,
o que acentua a característica didático-pedagógica da obra.
Este volume apresenta-se como um material muito útil para todos que estudam,
pensam e pesquisam a grande área da programação de games e também para
aqueles que querem ter acesso a uma referência conceitual sólida e à indicação de
fontes consagradas.
AplicaçõesLivro-texto para o curso de Desenvolvimento de Jogos que tenha disciplinas que
envolvam programação, inteligência artificial, fundamentos matemáticos, gráficos,
animação e áudio. Para os cursos de pós-graduação, é um precioso recurso para a
pesquisa de tópicos avançados.
A
ST
EV
E R
AB
IN (E
d.)
INT
RO
DU
ÇÃ
O A
O D
ES
EN
VO
LV
IME
NT
O D
E G
AM
ES
• V
OL
UM
E 2
Para suas soluções de curso e aprendizado,visite www.cengage.com.br
ISBN-13: 978-85-221-1144-2ISBN-10: 85-221-1144-8
9 7 8 8 5 2 2 1 1 1 4 4 2
C
M
Y
CM
MY
CY
CMY
K
VALE.ESTA.gamesVOL2.18x26.ai 1 14/02/12 23:59
volume 2 Programação: técnica, linguagem e arquitetura
Austrália • Brasil • Japão • Coreia • México • Cingapura • Espanha • Reino Unido • Estados Unidos
Tradução da 2a edição norte-americana
Traduçãoopportunity translations
Revisão Técnicaluís Carlos Petry
Doutor em Comunicação e Semiótica pela PUCS-SP. Professor no Programa de Pós-Gradua ção em Tecnologias da Inteligência e Design Digital e no Curso de Tecnologia Superior em Jogos Digitais da PUC-SP. Coordenador do Núcleo de Pesquisas em Hipermídia e Games da PUC-SP.
Editado por
steve rabin
Introdução aodesenvolvImento
de games
games2.indb 3 3/2/2012 16:47:55
VII
sumário
Prefácio xxviiPrefácio à edição brasileira xxxiiiBiografia dos colaboradores xxxv
PARTE 3 – PRogRAmAção dE jogos: lInguAgEns E ARquITETuRA
3.1 – equIPes e ProCessos 165
visão geral 165
equipes de programação 165
Áreas de programação 166Código do jogo 166Motor do jogo 166Ferramentas 167
organização da equipe 167Habilidades e personalidades 168
metodologias 169
Código e correção 169Cascata 169Iteração 170metodologias ágeis 170
Práticas comuns 171
Controle de versão 171Padrões de codificação 172versões automatizadas diariamente 172
qualidade 173
revisões do código 173assertivas (asserts) e travamento 173testes de unidade 175testes de aceitação 175Base de dados de erros (bugs) 176
aproveitando código existente 176
Plataformas 178
games2.indb 7 3/2/2012 16:47:55
SUmárIoVIII
Computadores pessoais (PCs) 179Consoles de jogo 180Portáteis e celulares 180Jogos de navegador (browser) e de download 181desenvolvimento multiplataforma 181
resumo 183
exercícios 183
referências 183
3.2 – C++, Java e lInguagens de sCrIPt 185
visão geral 185
C++ e desenvolvimento de jogo 185
vantagens 186Desempenho 186Características de alto nível 186Herança C 187Bibliotecas 188
Fraquezas 189Nível muito baixo 189Muito complicado 189Carência de recursos 189Iteração lenta 190
quando utilizar? 190
Java 191
Por que Java? 191desempenho 192Plataformas 193
linguagens de script 194
Por que linguagens de script? 194Facilidade de desenvolvimento 195Tempo de iteração 195O código se torna um recurso 195Recursos 196
desvantagens de linguagens de script 196Desempenho 196
games2.indb 8 3/2/2012 16:47:55
SUmárIo IX
Suporte a ferramentas 197Encontrando erros 197Interface com o restante do do jogo 198
linguagens de script populares 198Python 198Lua 198Outras linguagens padronizadas 199Linguagens customizadas 199
escolhendo uma linguagem de script 199Você precisa de uma linguagem de script? 200De que características você precisa? 200De que tipo de desempenho você precisa? 200Que facilidades de depuração a linguagem possui? 200Em quais plataformas as linguagens de script precisam funcionar? 201Que especialidades e recursos você tem disponível? 201
resumo 201
exercícios 202
referências 202
3.3 – Fundamentos da Programação 205
visão geral 205
estruturas de dados 205
arrays 206listas conectadas 207dicionários 207outro 208empacotamento de bit 209Flags 209Comunicação em rede 211números de ponto flutuante 212outros usos 212
design orientado a objetos nos jogos 213
Conceitos orientados a objetos 213Herança 213Polimorfismo 215Herança múltipla 217
games2.indb 9 3/2/2012 16:47:55
SUmárIoX
sistemas de componente 219
limitações da herança 219Acoplamento forte Fluxo de controle incerto 219Não é flexível o suficiente 220Hierarquia estática 221
organização do sistema de componente 221Composição direcionada a dados 222desvantagens e análises 223
Padrões de design 224
singleton 225Problema 225Solução 225Aplicação ao desenvolvimento do jogo 225Consequências 225
Fábrica de objeto (object Factory) 226Problema 226Solução 226Aplicação ao desenvolvimento do jogo 226Consequências 227
observador (observer) 228Problema 228Solução 228Aplicação ao desenvolvimento do jogo 228Consequências 229
Composto (Composite) 229Problema 229Solução 229Aplicação ao desenvolvimento do jogo 230Consequências 230
outros padrões 231
resumo 231
exercícios 231
referências 232
3.4 – arquItetura do Jogo 233
visão geral 233
games2.indb 10 3/2/2012 16:47:56
SUmárIo XI
estrutura principal 233tipos de arquitetura 234
Arquitetura Ad-Hoc 234Arquitetura modular 234Arquitetura de grafos acíclicos dirigidos (DAG) 235Arquitetura em camadas 236
Ferramentas domésticas 237
visão panorâmica de um jogo 238
etapas de inicialização/desligamento 238visão geral 239aquisição de recurso é inicialização 240otimizações 241
Desligamento rápido 241Reinicialização a quente 241
loop do jogo principal 242
tarefas 242Etapa de tempo 242Input 243Rede 244Simulação 244Colisão 244Atualizações de objeto 245Renderização 245Outros 245
estrutura 245acoplamento 247ordem de execução 247
entidades do jogo 250definição 250organização 251atualizando 251Criação 252Instanciação de nível 256Identificação 258Comunicação 259
resumo 261
exercícios 261
referências 262
games2.indb 11 3/2/2012 16:47:56
SUmárIoXII
3.5 – memórIas e sIstemas I/o 263
visão geral 263
gerenciamento de memória 263
trabalhando com memória 264Segurança 264Conhecimento 264Controle 265
Fragmentação de memória 265alocação estática 266alocação dinâmica 268gerenciador de memória personalizado 269
Operadores globais new e delete 269Operadores específicos de classe new e delete 271Verificação de erro 273Detectando vazamentos de memória 275Agrupamentos de memória 276
arquivo I/o 280
sistema de arquivo unificado independente de plataforma 280arquivos 282Buffering 283empacotamento de arquivos 285extensões e usos avançados 287
recursos de jogos 288
trabalhando com os recursos de jogo 288gerenciador de recurso 288tempo de vida do recurso 290
Tudo de uma vez 290Gerenciamento explícito de tempo de vida 291Contagem de referência 291
recursos e instâncias 292Pré-cache do recurso 292
serialização 293
gravação 293Interface ISerializable 293Implementando o Write 294Identificadores únicos 295Recursos 296
games2.indb 12 3/2/2012 16:47:56
SUmárIo XIII
Ponteiros de gravação 296Carregamento 296
Criando objetos 296Ponteiros de carregamento 297
resumo 299
exercícios 299
referências 300
3.6 – dePurando os Jogos 303
visão geral 303
o processo de depuração em cinco etapas 304
Passo 1: reproduzir o problema de forma consistente 304Passo 2: Coletar pistas 305Passo 3: localizar o erro 305
Método 1: Proponha uma hipótese 305Método 2: Divida e conquiste 306
Passo 4: Corrigir o problema 306Passo 5: testar a solução 307
dicas especializadas de depuração 307
questione suas suposições 308minimize interações e interferência 308minimize aleatoriedade 308divida cálculos complexos em etapas 308verifique as condições-limite 308Interrompa computações em paralelo 308explore ferramentas no depurador 308verifique o código modificado recentemente 309explique o erro para alguém 309depure com um parceiro 309afaste-se um pouco do problema 309obtenha ajuda externa 309
Padrões e cenários de depuração complicada 309
o erro existe no compilado, mas não na depuração 310o erro existe no hardware do console do consumidor, mas não no kit de desenvolvedor 310o erro desaparece quando muda algo inócuo 310
games2.indb 13 3/2/2012 16:47:56
SUmárIoXIV
Problemas verdadeiramente intermitentes 310Comportamento inexplicável 311erros do compilador interno 311quando você tem a suspeita de não ser o seu código 312
entendendo o sistema subjacente 312
adicionando infraestrutura para ajudar na depuração 313
altere variáveis de jogos durante a sessão de jogo 313diagnósticos visuais de Ia 313Capacidade de registro 313Capacidade de gravação e reprodução 313rastreie alocação de memória 314Imprima o máximo de informações durante o travamento 314treine sua equipe inteira 314
Prevenção de erros 314
resumo 316
exercícios 316
referências 317
PARTE 4 – PRogRAmAção dE jogos: mATEmáTIcA, dETEcção dE colIsão E físIcA
4.1 – ConCeItos matemÁtICos 321
visão geral 321
trigonometria aplicada 322Funções trigonométricas 322Identidades trigonométricas 324Funções trigonométricas inversas 326as leis dos senos e cossenos 327
vetores e matrizes 329
aritmética de vetor 329aritmética de matriz 332Produto escalar 336o produto vetorial 340
transformações 343
games2.indb 14 3/2/2012 16:47:56
SUmárIo XV
transformações do sistema de coordenadas 343Coordenadas homogêneas 344transformações comuns 345transformando vetores normais 347
geometria 349
linhas 349Planos 349distância de um ponto para a linha 351Interseção de uma linha e um plano 351
resumo 352
exercícios 352
referências 353
4.2 – deteCção de ColIsão e resolução 355
visão geral 355
detecção de colisão 355
teste de sobreposição 356
resultados 356
limitações do teste de sobreposição 356
teste de interseção 358
limitações do teste de interseção 359
lidando com complexidade 360
geometria simplificada 360
soma de minkowski 361
vinculando volumes 362
alcançando complexidade de tempo o(n) 363
varredura de plano 364
detecção de colisão de terreno 364
redes irregulares trianguladas (tIns) 366
resolução de colisão 368
Prólogo 368
games2.indb 15 3/2/2012 16:47:56
SUmárIoXVI
Colisão 368epílogo 368resolvendo testes de sobreposição 369resolvendo teste de interseção 370
resumo 370
exercícios 371
referências 371
4.3 – FísICa dos Jogos em temPo real 373
visão geral 373
rebobinando: um novo olhar sobre física básica 374
a importância de unidades consistentes 374Cinemática de partículas 375as famosas leis de newton 376o ciclo de movimento 377o efeito de uma força constante em um movimento de partícula 377Consistência de unidades, ainda importante 378movimento de projétil 378resposta de colisão sem atrito 379a história até agora 382
Introdução à simulação de física numérica 384
Integração numérica da equação newtoniana do movimento 385usando integração numérica para simular uma coleção de partículas 387resposta de colisão no loop de simulação 388
Complexidades sutis na resposta de colisão 389Uma breve explicação sobre métodos alternativos de resposta de colisão 389
Problemas de estabilidade numérica e alternativa para integração explícita de euler 391a importância da independência da taxa de frames 393
além das partículas 394
motores de física de terceiros 395
objetos estáticos e cinemáticos 395dinâmicas de corpo rígido 396dinâmicas de corpo flexível 396restrições 398ragdoll e física de personagem 398
games2.indb 16 3/2/2012 16:47:56
SUmárIo XVII
dinâmicas de fluido 399Criação de conteúdo de física 400tendências emergentes 400
resumo 401
material complementar disponível para download 402
exercícios 402
referências 403
PARTE 5 – PRogRAmAção dE jogos: gRáfIcos, AnImAção, IA, áudIo E REdE
5.1 – grÁFICos 407
visão geral 407
Fundamentos dos gráficos 407
Frame buffer e back buffer 408visibilidade e depth buffer 408Stencil buffer 409triângulos 410vértices 410espaços de coordenadas 411texturas 413shaders 413materiais 414
organização de alto nível 414
Interações entre o jogo e o renderizador 414objetos de renderização 415Instâncias de objetos de renderização 415malhas 415esqueletos 416Particionamento do volume de renderização 416Portais 417Particionamento de espaço binário (BsP) 419Quadtrees e Octrees 420Conjunto potencialmente visível (Pvs) 421usos comuns 421velocidade e eficiência 422
games2.indb 17 3/2/2012 16:47:56
SUmárIoXVIII
tipos de renderização de primitivos 423texturas 426
Formatos de texturas 426mapeamento de texturas 429Filtragem de textura 430renderização para textura 432
Iluminação 433
Componentes 434representação do ambiente de iluminação 435representando múltiplas luzes 437Iluminação difusa 439
Mapas normais 440Mais sobre espaço tangente 442Transferência de brilho pré-computada 443
Iluminação especular 444Mapas de ambiente 446
o pipeline de renderização do hardware 447
montagem de entrada 448sombreamento do vértice 448montagem de primitivo, seleção e corte 448Projeção, rasterização e antialiasing 450sombreamento de pixel 451operações de Z, stencil e alpha-blend 451múltiplos alvos de renderização 452Características de shader 452linguagens de programação de shader 454Pipelines de função fixa 454
resumo 455
exercícios 455
referências 456
5.2 – anImação da Personagem 457
visão geral 457
Conceitos fundamentais 458
a hierarquia do esqueleto 458a transformação 459
games2.indb 18 3/2/2012 16:47:56
SUmárIo XIX
Ângulos de euler 460a matriz de rotação 3x3 461quatérnios 462animação versus deformação 463modelos e instâncias 463Controles de animação 464
armazenamento de animação 464
decomposição e eliminação de constante 465Keyframes e interpolação linear 466Interpolação de ordem mais alta 469looping 471
reproduzindo animações 472
scrubbing 473
Combinando animações 474
a lerp 474métodos de combinação de quatérnions 475Combinando múltiplos caminhos 477máscaras de ossos 478lerp mascarada 479Combinação hierárquica 479
extração de movimentos 480
extração de movimento linear 480extração de movimento composto 481extração de delta variável 482encontrando suas raízes 483se uma árvore se anima em uma floresta... 484
deformação da malha 485
1. transformar cada osso em espaço do mundo 4852. encontrar o delta da pose de descanso 4853. deformar as posições de vértice 4864. deformar as normais do vértice 487
Cinemática inversa 488
IK de um único osso 488IK de múltiplos ossos 489IK de dois ossos 491IK por interpolação 492
games2.indb 19 3/2/2012 16:47:56
SUmárIoXX
attachments 495
detecção de colisão 495
resumo 496
exercícios 497
referências 497
5.3 – IntelIgênCIa artIFICIal: agentes, arquItetura e téCnICas 499
visão geral 499
Ia para jogos 500
especialização 501
agentes de jogos 502
Percepção 502Visão 502Audição 503Comunicação 504Tempos de reação 504
Pensamento 504Conhecimento especializado 505Busca 505Aprendizagem da máquina 505Flip-flopping 506
ação 506
aprender e lembrar 507
tornando os agentes estúpidos 507
trapaça do agente 507
resumo dos agentes do jogo 508
máquina de estados finitos 508
a máquina de estados finitos básica 508definindo uma Fsm 509estendendo a Fsm básica 513Fsms múltiplas 514depurando Fsms 514resumo das Fsms 514
games2.indb 20 3/2/2012 16:47:56
SUmárIo XXI
técnicas comuns de Ia 514a* Pathfinding 514
Exemplo de jogo 515Árvore de comportamento 515
Exemplo de jogo 515Hierarquia de comando 515
Exemplo de jogo 516navegação estimada 516
Exemplo de jogo 516Comportamento emergente 516
Exemplo de jogo 516Flocagem 516
Exemplo de jogo 517Formações 517
Exemplo de jogo 517mapeamento de influência 517
Exemplo de jogo 517Ia de nível de detalhe 518
Exemplo de jogo 518distribuição de tarefas do gerenciador 518
Exemplo de jogo 518evitar obstáculos 519
Exemplo de jogo 519scripting 519
Exemplo de jogo 520máquina de estados 520
Exemplo de jogo 520máquina de estados baseada em pilha 520
Exemplo de jogo 520arquitetura de subsunção 521
Exemplo de jogo 521análise de terreno 521
Exemplo de jogo 521sistema de acionamento 521
Exemplo de jogo 522
técnicas promissoras de Ia 522
redes bayesianas 522Exemplo de jogo 522
arquitetura de quadro-negro 522Exemplo de jogo 522
games2.indb 21 3/2/2012 16:47:56
SUmárIoXXII
aprendizado da árvore de decisão 523Exemplo de jogo 523
aleatoriedade filtrada 523Exemplo de jogo 524
lógica fuzzy 524algoritmos genéticos 524
Exemplo de jogo 525Predição estatística n-grama 525
Exemplo de jogo 525redes neurais 526
Exemplo de jogo 526Perceptrons 526
Exemplo de jogo 526Planejamento 526
Exemplo de jogo 527modelagem do jogador 527
Exemplo de jogo 527sistemas de produção 527
Exemplo de jogo 527aprendizado por reforço 528sistema de reputação 528
Exemplo de jogo 528terreno inteligente 528
Exemplo de jogo 529reconhecimento de fala e texto para fala 529aprendizado da modificação de fraqueza 529
Exemplo de jogo 529
resumo 530
exercícios 530
referências 531
5.4 – IntelIgênCIa artIFICIal: vIsão geral da PatHFIndIng 535
visão geral 535
representando o espaço de busca 536
grades 536gráficos de waypoint 537
games2.indb 22 3/2/2012 16:47:56
SUmárIo XXIII
malhas de navegação 539Pathfinding 540
random-trace 541entendendo o algoritmo a* 542Breadth-First 544Best-First 545dijkstra 546a* 548
resumo 549
exercícios 550
referências 551
5.5 – Programação de ÁudIo 553
visão geral 553
Programando áudio básico 554
terminologia básica de áudio e física 555representação digital do som 558Pipeline de áudio e recursos de mixagem 560reprodução de amostra e manipulação 561Fazendo streaming de áudio 562Formatos comprimidos de áudio 563envelopes adsr 564Áudio 3d 565efeitos de ambiente 567Padrões de efeitos de ambiente: I3dl2 e eaX 568
Programando sistemas musicais 569
um reprodutor de música baseado em mIdI 569dls 570iXmF 570um reprodutor de fluxo (stream) de áudio digital 570um sistema de música interativa conceitual 571
Programando áudio avançado 572
Integração de efeitos de ambiente de áudio 3d 572Integração de motor e script de áudio 574tecnologia de sincronização de lábios (lip-sync) 575
games2.indb 23 3/2/2012 16:47:56
SUmárIoXXIV
reprodução avançada de voz 576reconhecimento de voz 576
resumo 576
exercícios 577
referências 577
5.6 – rede e multIJogador 579
visão geral 579
modos multijogador 579
temporização de evento 580Baseado em turnos 580Tempo real 580
I/o compartilhada 580tela cheia 580tela dividida 581Conectividade 582
Protocolos 583
Pacotes 583request for comments [solicitação de comentários] 584
Pilha de protocolos 584
Camada física 585
largura de banda e latência 585meio de conexão 586
Camada de conexão de dados 587
Camada de rede 587
endereços IP 587difusão ponto a ponto 587endereços especiais 588
Multidifusão 588Transmissão local 588Transmissão direcionada 588Loop back 588Endereço qualquer 588
nome de domínio 589
games2.indb 24 3/2/2012 16:47:56
SUmárIo XXV
Camada de transporte 589
Portas 589Protocolo de controle de transmissão 590
Entrega em ordem garantida TCP 590Conectado 590
usar datagram Protocol (udP) 591Broadcasting 591
Camada de sessão 591
soquetes 591origens 592Winsock 592modos de soquete 592modelos de soquete padrão 593
Criação do soquete 593Conexão TCP 593Ouvinte TCP 594Transmissões stream 594Transmissões de datagramas 595
modelos de soquete de alto desempenho 596
Camada de apresentação 597
Compressão 597Criptografia 598serialização 598Buffering 599
Coalescência de pacote 599Latência induzida 599Dados mortos 599Pacotes maiores 600
Camada do aplicativo 600
verificação da versão 600modelos de atualização 600
Reflexão de entrada 600Reflexão de estado 602
sincronização 603Navegação estimada (DR) 603Assistência de IA 603Arbitragem 603
games2.indb 25 3/2/2012 16:47:56
SUmárIoXXVI
Comunicação em tempo real 603
modelos de conexão 604Transmissão (Broadcast) 604Peer to peer 605Cliente/servidor 605Complexidade de conexão 606Largura de banda 606
ambientes assíncronos 607
segurança 607
Criptografia 608Chave pública (assimétrica – pares de chave) 608Chave secreta (simétrica – mesma chave) 608Codificações 608Retenção da mensagem 608Certificados 608
Proteção de cópia 609Marca d’água 609
Criptografia de execução 609Ofuscação do código 609Heap Hopper 609Execução do estouro da pilha 610Hacks inoperantes 610Hacks de temporizador 610Correção de DLL 610
Privacidade do usuário 610Interceptação de nome de usuário e senha 611Firewalls 611
Filtro de pacotes 611Proxies 611Gateways de circuito 612Tradução de endereço de rede (NAT) 612Encaminhamento de porta 612Ativação de porta 613DMZ 613Determinando o IP WAN 613
resumo 613
exercícios 614
referências 616
índice 618
games2.indb 26 3/2/2012 16:47:56
XXVII
Prefácio
Bem-vindo à Introdução ao desenvolvimento de games, Volume 2 – Programação: técnica, lingua-gem e arquitetura. Este é um livro único que combina a sabedoria e a experiência de mais de 20 profissionais do setor de jogos para lhe dar uma visão sem precedentes do desenvolvimento de jogos – desde o design, programação, produção até questões de negócios.
O maior desafio na criação deste livro foi abordar praticamente todo o desenvolvimento de um jogo, tentando manter a profundidade necessária para realmente entender e apreciar o estado da arte dos processos tecnológicos. A solução foi reunir alguns dos especialistas mais brilhantes e respeitados na indústria e permitir que cada autor fosse fundo nos detalhes para cobrir sua espe-cialidade. Esse processo resultou em um livro bastante longo, dividido em quatro volumes. Apesar de ser uma obra longa comparada à maioria, tal aspecto foi peça-chave para manter conceitos e ideias importantes, dando-lhe discernimento profundo para os problemas do desenvolvimento real de jogos.
O histórico dos autores é impressionante. Grande parte tem mais de uma década de experiên-cia na indústria de jogos e são líderes em seus respectivos campos, palestrando regularmente na Game Developers Conference,1 ministrando aulas de desenvolvimento de jogos em nível superior, ou até mesmo escrevendo seus próprios livros. O que destaca esta obra é a incrível percepção e experiência que cada autor traz para seu capítulo, com todas as áreas do desenvolvimento de jogos sendo exploradas. Ninguém poderia criar um livro como este, já que requer vidas de especializa-ção e experiência para entender e refinar os problemas. Contudo, não leve minhas palavras em consideração; observe a biografia dos autores nas páginas a seguir.
estrutura do livro e inspiração A estrutura da obra é totalmente apoiada na Estrutura de Currículo da International Game Deve-lopers Association (IGDA) proposta pelo IGDA Curriculum Development Committee. Por meio da cooperação entre os profissionais respeitados da indústria e da academia, esse comitê foi capaz de definir uma estrutura que daria orientação para escolas e universidades para criar seus próprios programas acadêmicos no desenvolvimento de jogos. Por ser a Estrutura de Currículo da IGDA um continuado processo, ela forneceu a orientação e a inspiração para este livro.
Não é a intenção que todo tópico e capítulo deste livro sejam ensinados completamente em uma aula de desenvolvimento de jogos. Em vez disso, a obra contém uma classificação de assun-tos, divididos em partes, que podem ser misturados e combinados para criar um currículo custo-mizado, porém direcionado a um programa acadêmico particular.
Embora o livro possa ser customizado para criar um foco em particular, há um valor imenso na compreensão de todos os elementos do desenvolvimento de jogos e como eles interagem. O desenvolvimento de jogos não é apenas o design, programação ou criação de modelos 3D. Ele abarca o processo completo e como cada elemento interage e influencia os demais. Especialistas em programação não serão muito úteis se não entenderem as motivações do designer de jogos, artistas ou produtor. Os artistas irão criar uma arte inútil se não levarem em conta as limitações da programação do hardware e não criarem uma arte que combine com o design do jogo. Por fim,
1 N.R.T.: A Game Developers Conference é um evento da indústria de games que se organiza em vários módulos. Consul-te o site da GDC em http://www.gdconf.com/.
games2.indb 27 3/2/2012 16:47:57
PrefáCIoXXVIII
seria prejudicial a um projeto se a área comercial não entendesse os desafios técnicos envolvendo programação e criação de arte. O desenvolvimento de jogos é um processo cooperativo que de-pende de que cada departamento compreenda as motivações, os requisitos e as limitações coloca-das pelos demais. Este livro deseja estabelecer um respeito mútuo e atitude de equipe de trabalho para o desenvolvimento de jogos.
atualizações da segunda edição A primeira edição deste livro foi desenvolvida em 2004-2005, antes do lançamento do Xbox 360, PS3 e Wii. Durante essa última transição dos consoles, vimos os processadores passarem do single core para o multicore,2 os preços dos jogos subirem de US$ 50 para US$ 60, a distribuição digital se tornar cada vez mais aceita mundialmente e um retorno à ênfase na jogabilidade sobre materiais visuais impressionantes. E por mais que o desenvolvimento de jogos tenha mudado nos últimos quatro anos, os fundamentos principais continuam os mesmos. O único modo de ter sucesso é produzir grandes jogos que se concentrem na experiência do jogador.
Nesta segunda edição, tornamos mais eficiente a seção Design de Jogos (no Volume 1), expan-dindo métodos e técnicas para fazer o design dos jogos. Um novo capítulo sobre Escrita de jogos e contando histórias interativas (Interactive storytelling) foi adicionado. Este capítulo, que também faz parte do Volume 1, complementa e completa a seção Design de Jogos, dando orientação na disciplina de como construir e contar uma história dentro de uma experiência interativa. Além disso, atualiza-mos todos os capítulos para refletir o avanço tecnológico no desenvolvimento comercial de jogos.
desenvolvimento de jogos no século XXI Passados são os dias que um desenvolvedor solitário fabricava sozinho o design, o código e a arte do jogo. Desenvolvimento de jogos no século XXI trata da luta de grandes equipes para atingi-rem uma meta comum, em um período de vários anos. A indústria de jogos é um negócio “movi-do por grandes êxitos”, e é necessário incrível talento, experiência, criatividade, marketing e sorte para produzir o próximo jogo de sucesso. Contudo, nessa indústria inovadora e evolutiva, há uma enorme oportunidade para alcançar novas barreiras e empurrar a tecnologia ainda mais além.
Enquanto a primeira edição do livro estava em produção, a indústria de jogos testemunhou o aparecimento do Nintendo DS. Esse sistema de jogos portáteis se mostrou como um exemplo perfeito de como a inovação continua a surgir ao nosso redor, ano após ano. O sistema suporta múltiplas telas, um microfone, um painel de toque, conectividade sem fio, e o jogar por transferên-cia sem fios. Cada um desses elementos já existia há algum tempo, de uma forma ou de outra, mas ao colocarem tudo em um único pacote que milhões de pessoas compraram, os desenvolvedores podem contar com a presença dessas características na exploração de novos modos de jogabili-dade. Centenas de empresas dedicaram seus desenvolvedores mais talentosos na criação de jogos que exploram essa nova interatividade.
Com quase 40 anos de idade, a indústria de videogames ainda é jovem e se encontra em um ritmo de expansão impressionante. A receita global de 2007 foi de US$ 41,9 bilhões e foi estimada em torno de US$ 57 bilhões em 2008. Apesar da crise econômica global ao final de 2008 e 2009,
2 N.R.T.: Os computadores contam atualmente com uma arquitetura de multiprocessamento, designada como multicore, baseada em estudos da indústria e, em pesquisadas do MIT. Maiores detalhes em: http://www.ic.unicamp.br/~rodolfo/Cursos/mc722/2s2007/trabalhos/g20_texto.pdf.
games2.indb 28 3/2/2012 16:47:57
PrefáCIo XXIX
os videogames parecem ser mais à prova de recessão do que as outras indústrias e irá resistir ao ambiente econômico muito bem, talvez alcançando US$ 68 bilhões em receita global em 2012 de acordo com a PricewaterhouseCoopers LLP.
Esse crescimento incrível significa oportunidade para novas ideias, novas formas de jogar e a necessidade de novos talentos para a indústria. Este livro espera inspirar, motivar e guiar gerações futuras de desenvolvedores a criar jogos inovadores que continuem a elevar as fronteiras do que foi criado no passado.
www.Introgamedev.comJuntamente com a publicação do livro, temos um site que serve de suporte aos aspirantes a desen-volvedores de jogos. Nele você encontrará informações sobre tudo o que deve saber e conhecer para o desenvolvimento de jogos. O site funciona como um guia para encontrar artigos e in-formações sobre desenvolvimento de jogos; dicas que não estão disponíveis em qualquer outro local. São mais de 1.300 artigos, categorizados por disciplinas como física, IA ou design de jogos. Utilize-o como ferramenta e recurso quando for explorar as técnicas e conhecimentos de desen-volvimento de jogos. As informações estão disponíveis em inglês.
material complementar disponível para downloadEste livro disponibiliza para download códigos-fonte, demonstrações, arquivos de arte, e outros materiais que podem ser muito úteis para estudos e exercícios apresentados ao longo do texto. Esses materiais estão disponíveis na página do livro, no site da editora em www.cengage.com.br. O conteúdo está disponível em inglês, consulte o link.
Requisitos do sistemaSéries Intel® Pentium®, AMD Athlon ou processadores mais recentes recomendados. Windows XP (64MB RAM) ou Windows 2000 (128MB RAM) ou superior recomendado. Placas gráficas de ví-deo 3D necessária para algumas aplicações de amostra. DirectX 9 ou o mais recente. Software ne-cessário para utilizar todos os arquivos fornecidos: Microsoft Visual Studio .NET 2003, 3ds max 6, Microsoft Word, Microsoft Excel, Microsoft PowerPoint, Adobe Reader e QuickTime Player.
Como utilizar este livroÀ primeira vista , a natureza desta obra pode ser desencorajadora para qualquer estudante, instrutor ou aspirante a desenvolvedor de jogos. Claramente, não é a intenção de que todo o capítulo seja ensinado de modo minucioso em uma aula acadêmica, mas encorajamos que vá-rias partes sejam usadas para criar uma experiência educacional customizada. Personalizando o conteúdo deste livro, muitos programas acadêmicos com propósitos um pouco diferente po-dem ser satisfatoriamente atendidos. As partes e os capítulos são independentes, o que facilita a sua customização. É possível ignorar certas partes ou mover capítulos quando necessário. As informações a seguir fornecem uma orientação e exemplos de como usar o livro em um contexto educacional.
Entender as várias partes deste livro é a chave para criar um currículo customizado. Como mostra a Figura 1, os volumes que compõem o livro estão divididos em quatro categorias prin-cipais: entendendo os jogos, programação de jogos, criação de arte/recursos e negócios/gerencia-mento. Para qualquer currículo, o objetivo é encontrar um equilíbrio entre as quatro categorias.
games2.indb 29 3/2/2012 16:47:57
PrefáCIoXXX
Em um curso de desenvolvimento de jogos, promovido por um departamento de ciência da computação, é, sem dúvida nenhuma, importante se concentrar nos aspectos de programação (Partes 3, 4 e 5 – Vol. 2). Contudo, é essencial para motivar o que está sendo construído (Partes 1 e 2 – Vol. 1), evidenciar que existem limitações relacionadas a recursos que vão ser integrados (Parte 6 – Vol. 3), e como um projeto de jogo é gerenciado (Parte 7 – Vol. 4). Em um curso de dez semanas, seria apropriado dedicar sete a oito semanas em programação, enquanto se intercala o tópico principal, com aproximadamente duas ou três semanas, de entendendo os jogos, criação de arte/recurso, e questões de negócios/gerenciamento.
Cada vez mais em universidades, cursos interdisciplinares especiais estão sendo oferecidos na área do desenvolvimento de jogos, abrangendo estudantes de disciplinas diferentes como ciência da computação, arte, música e negócios. Em um ambiente dinâmico e rico, este livro pode ajudar de diversas maneiras, desde design de jogos, programação, criação de arte até no gerenciamento de projetos de equipes. Nesse tipo de curso, estudantes adotam um papel e interagem uns com os outros como se fossem parte de uma equipe real de desenvolvimento de jogos. As aulas podem ser divididas dentro das quatro categorias principais, observando-se uma maior ênfase na parte da programação. O livro fornece profundidade suficiente para que os estudantes em cada disciplina se aprofundem mais e explorem tópicos individuais.
Outros currículos, como os de design de jogos, podem se beneficiar da exploração das inter- -relações de todos os aspectos do desenvolvimento que este livro oferece. Enquanto a maioria dos tópicos de programação poderia ser abordada superficialmente ou de maneira esparsa, há uma grande quantidade de material a explorar nas Partes 1 e 2 (Vol. 1), 6 (Vol. 3) e 7 (Vol. 4). Um curso sobre design de jogos dedicaria mais ou menos três semanas à história dos jogos e à análise de jogos, outras duas a três ao design principal, então as quatro semanas restantes na relação da programação seriam dedicadas a criação de recurso e questões de negócios (como regulamento de conteúdo) com o design do jogo. Por exemplo, temas como inteligência artificial ou áudio podem ter um grande impacto no design de um jogo proporcionando muitas oportunidades interessan-tes de jogabilidade.
Em resumo, três currículos de exemplo são dados na Tabela 1 para cada um dos três tipos de cursos apresentados. Cada um aborda a maioria dos capítulos deste livro, mas a diferença está no
figura 1 Quatro categorias principais para equilibrar um currículo.
entendendo os Jogos (volume 1)
Programação de Jogos (volume 2)
Criação de arte/recursos (volume 3)
negócios/gerenciamento (volume 4)
Parte 1estudos Críticos
de Jogos
Parte 2 Design
de Jogos
Parte 3Programação de Jogos:
Linguagens e Arquitetura
Parte 4 Programação de Jogos:
matemática, Detecção de Colisão e física
Parte 5 Programação de Jogos:Gráficos, Animação, IA,
áudio e rede
Parte 6 Design Audiovisual e
Produção
Parte 7 Produção de Jogos e o
Negócio dos Jogos
games2.indb 30 3/2/2012 16:47:57
PrefáCIo XXXI
foco e na profundidade. Ao dedicarem tempo apropriado a cada tópico, os estudantes garantem aprofundar-se em um assunto, porém podendo apreciar as questões tecnológicas, artísticas e de negócios que são parte integrante do desenvolvimento do jogo. Observe também que as partes e os capítulos são geralmente independentes e podem ser omitidos, misturados ou distribuídos em pares conforme for necessário.
Tabela 1 Três exemplos de currículos baseados em um curso de nível superior, de 10 semanas.
semana curso orientado à programação curso interdisciplinar curso de design de jogos
1 Visão geral e design de videogames (Caps. 1.1, 1.2, 2.1, 2.2) – Vol.1
Visão geral de videogames (Caps. 1.1, 1.2) – Vol.1
História dos videogames (Cap. 1.1) – Vol. 1
2 equipes e a produção de jogos (Caps. 3.1, 7.1) – Vols. 2 e 4
equipes e a produção de jogos (Caps. 3.1, 7.1) – Vols. 2 e 4
Questões sociais e culturais dos jogos (Cap.1.2) – Vol.1
3Linguagem e arquitetura (Caps. 3.2 – 3.6) – Vol. 2
o papel da indústria de jogos e a economia (Caps.7.2, 7.3, 7.4) – Vol.4
estudando os jogos a partir de uma perspectiva acadêmica (Cap. 1.3) – Vol.1
4 matemática, detecção de colisão e física (Caps. 4.1, 4.2, 4.3) – Vol. 2
Design de jogos (Caps. 2.1, 2.2) – Vol.1
Design de jogos (Caps. 2.1, 2.2) – Vol.1
5Gráficos, modelos 3D, texturas (Caps. 5.1, 6.2, 6.4, 6.7) – Vols. 2 e 3
Criação de recursos e arte (Caps. 6.1 – 6.7) – Vol. 3
Design de jogos (Caps. 2.1, 2.2) – Vol. 1
6Programação de animação e criação (Caps. 5.2, 6.7) – Vols. 2 e 3
Linguagens de programação e arquitetura (Caps. 3.2 – 3.6) – Vol. 2
Influência da inteligência artificial e do áudio no design de jogos (Caps. 5.3, 5.5, 6.8) Vols. 2 e 3
7 Gráficos e animação (Caps. 5.1, 5.2) – Vol. 2
Conceitos de matemática e física 3D (Caps. 4.1, 4.3) – Vol. 2
equipes e produção de jogos (Caps. 3.1, 7.1) – Vols. 2 e 4
8 Inteligência artificial (Caps. 5.3, 5.4) – Vol.2
Visão geral dos gráficos e animação (Caps. 5.1, 5.2) – Vol. 2
Visão geral da criação de arte e recursos (Caps. 6.1 – 6.7) – Vol. 3
9áudio e rede (Caps. 5.5, 5.6) – Vol.2
Visão geral de inteligência artificial, áudio e rede (Caps. 5.3, 5.5, 5.6) – Vol. 2
Papel da indústria de jogos e da economia (Caps. 7.2, 7.3, 7.4) – Vol. 4
10Questões legais e de negócios (Caps. 7.2 – 7.6) – Vol. 4
Propriedade intelectual e regulamento de conteúdo (Caps. 7.5, 7.6) – Vol. 4
Propriedade intelectual e regulamento de conteúdo (Caps. 7.5, 7.6) – Vol. 4
games2.indb 31 3/2/2012 16:47:57
XXXIII
Prefácio à edição brasileira
A primeira edição brasileira de Introdução ao desenvolvimento de games, Volume 2 – Programação: técnica, linguagem e arquitetura, editado por Steve Rabin, liderando uma equipe de profissionais e desenvolvedores com larga e comprovada experiência na área dos jogos, dá mais um passo na promoção da cultura e desenvolvimento de jogos no Brasil.
O conjunto de livros que forma a Introdução ao desenvolvimento de games se caracteriza por uma sólida organização didática, a qual se pauta pela apresentação estruturada dos conceitos, pela sistematização de exemplos e situações modelares, pela discussão de alternativas e opções adicio-nais, sempre acompanhados de exercícios que cobrem o conteúdo de cada capítulo. Além disso, traz uma excelente bibliografia para estudo e materiais de apoio (disponíveis no site da editora) que compõem um conjunto de recursos didático-pedagógico extremamente rico e versátil.
O cenário internacional da teoria e desenvolvimento de jogos sofreu profundas alterações nos últimos cinco anos, com o incremento dos motores de jogos acompanhando a evolução dos pro-cessadores, e com o crescimento da comunidade de desenvolvedores e jogadores.
O Brasil, por sua vez, passou da simples posição de consumidor secundário para a condição de território emergente de consumo e produção. Empresas brasileiras e profissionais começaram a se destacar dentro do plano internacional, seja na participação em projetos de jogos, seja no desenvolvimento de metodologias associadas aos motores de jogos, a progressiva liberação dos motores de jogos e ferramentas para produtores indie e para o uso educacional, conceito até então ignorado pela indústria tecnológica. Nesse tempo, viu-se o surgimento de inúmeros estúdios de desenvolvimento independentes no Brasil e um aumento significativo de cursos universitários que agora voltam sua atenção para a formação de profissionais focados inteiramente na concepção e desenvolvimento de jogos.
É sob esse panorama efervescente que esse volume, que trata da grande área da programação para games (linguagem, arquitetura, inteligência artificial, fundamentos matemáticos e físicos, gráficos, animação, áudio etc.), vem cobrir uma demanda por novos e consistentes materiais conceituais.
Da mesma forma como o primeiro volume (Entendendo o universos dos jogos), este é um ex-celente recurso disponível para todos os que estudam, pensam e pesquisam jogos. Vejo-o como essencial para o ensino e aprendizagem da produção de jogos que buscam uma referência concei-tual sólida e a indicação de fontes consagradas. Se para as graduações de jogos ele pode ser tomado como uma bibliografia básica, já nos cursos de pós-graduação se converterá em precioso recurso para a pesquisa de tópicos avançados.
Assim, como recurso didático-pedagógico, o volume apresenta uma considerável quantidade de pseudocódigos e códigos. Aqui uma observação metodológica que é de interesse para a pro-gramação, bem como para a matemática e para a física dos jogos: os autores utilizam o Sistema Internacional de Unidades, mas seguem a norma norte-americana quanto ao separador decimal. Um dos resultados disso é que utilizam o ponto como separador decimal, e não a vírgula como no Brasil e Portugal. Como essa organização interessa diretamente à programação, na revisão técnica deste volume, seguiu-se a regra da coerência conceitual, que reza manter a estrutura lógica em sua notação original. Ao mesmo tempo, sempre que necessário, notas explicativas e complementares foram introduzidas, todas elas tendo em mente a utilidade didática para os iniciantes no assunto.
games2.indb 33 3/2/2012 16:47:57
PrefáCIoXXXIV
A revisão técnica do livro contou com o apoio de uma comunidade de pesquisadores em jogos, aos quais agradeço pelas contribuições e discussões. Com Leonel Morgado, da Universidade do Mi-nho (Portugal), foram discutidos inúmeros termos e seus usos, desde o primeiro volume, na busca por equilibrar a terminologia dentro da comunidade de língua portuguesa. De Cristiano Natal To-néis, recebi um positivo acolhimento na discussão detalhada das questões referentes aos conceitos matemáticos e físicos presentes no livro. Vários outros pesquisadores colaboraram na discussão dos conceitos desta edição: referente a linguagens, arquiteturas, inteligência artificial e redes, agradeço a contribuição de Rogério Cardoso dos Santos, David de Oliveira Lemes, Reinaldo Ramos, Leonardo Silva, Jaderson Aparecido de Souza, Felipe Dacal Fragoso, Maigon Pontuschka e Carlos Augusto Pinheiro de Sousa; na parte de programação de áudio, agradeço a Lucas Correia Meneguette.
Luís Carlos Petry
games2.indb 34 3/2/2012 16:47:57
XXXV
Biografias dos colaboradores
robert t. Bakie
[email protected] Rob Bakie é um profissional da indústria de jogos desde 1998 e um ávido jogador desde pouco tempo após seu nascimento. Atualmente, trabalha na Nintendo of America como webmaster no grupo de suporte ao desenvolvedor. Antes, trabalhou na divisão on-line multijogador WON.net da Sierra Entertaiment. Já escreveu críticas e revisões de jogos para revistas e sites norte-americanos. Rob é bacharel em Commu-nications-Broadcast Journalism pela University of Washington com formação secundária em Música Computacional.
Isaac Barry
[email protected] Isaac Barry é diretor de Criação para a GameHouse, o primeiro estúdio de desenvolvimento de games casuais em Seattle, Washington. Próximo do final do século XX, começou a procurar trabalho e logo en-controu o de designer de jogos. O trabalho com design em todos os tipos de sistemas e conteúdos o levou a uma paixão pelo desenvolvimento de ferramentas visando à melhoria de seu trabalho e da indústria em geral. Ele teve a sorte de ter encontrado sua segunda casa em um campo no qual os profissionais se dedicam na criação de experiências afetivas, e grato à sua primeira casa por continuar a apoiar e sus-tentar seu processo.
ed Bartlett
[email protected] Ed Bartlett, vice-presidente e cofundador do IGA Worldwide Europa, é um profissional da nova geração de visionários da indústria multidisciplinar, combinando um histórico de 15 anos no setor de video-games com uma perspicácia de negócios e especialidade em mídia e publicidade comprovada. Tendo participado de cargos de produção e criatividade sênior em lançamentos importantes de jogos para produtoras, incluindo a Sega, Virgin Interactive, BMG Interactive, Acclaim e Hasbro Interactive, Bartlett passou para o desenvolvimento de negócios em 1999, como diretor de um renomado estúdio de desen-volvimento de jogos, The Bitmap Brothers.Bartlett é um dos pioneiros da publicidade de jogos, dedicadamente fundando a agência Hive Partners, à frente da concorrência em 2003. Como diretor executivo, levou a empresa a lucrar em seu primeiro ano, conseguindo contas globais de anunciantes como Red Bull, e alcançando acordos revolucionários com pro-dutoras de videogame, incluindo Sega e Vivendi Universal Games. Em 2005, negociou a aquisição da Hive Partners pela IGA Worldwide, unindo as companhias como membro fundador e ajudando a aumentar os US$ 17 milhões de capital de risco da empresa. Desde então é responsável pela construção das fundações da Radial Network, líder no setor, garantindo negócios mundiais com empresas como Electronic Arts, Valve, Sega, Atari e Codemasters. A IGA Worldwide foi selecionada pela Sony Computer Entertainment America e pela Sony Computer Entertainment Europe como a principal parceira para a inserção de publi-cidade a ser realizada no interior de jogos do Playstation3 (os in-game advertising plataform).
games2.indb 35 3/2/2012 16:47:57
BIoGrAfIAS DoS CoLABorADoreSXXXVI
James Boer
[email protected] James Boer está na indústria de jogos desde 1997, trabalhando em títulos como Deer Hunter, Deer Hunter II, Trophy Hunter, Pro Bass Fishing, Microsoft Baseball 2000, Tex Atomic’s Big Bot Battles e Digimon Rumble Arena 2. Também contribuiu de maneira frutífera com a mídia impressa da indústria de jogos, tendo escrito vários artigos para a revista Game Developer, com coautoria no DirectX Complete, autoria em Game Audio Programming e contribuído com quatro volumes de Game Programming Gems. Atualmen-te, trabalha na ArenaNet, onde é responsável pela criação de sistemas de áudio e cinemática, bem como de ferramentas para títulos que ainda estão em produção.
sue Bohle
[email protected] Sue Bohle é uma profissional de relações públicas altamente conceituada. Iniciou sua carreira na Burson-Marsteller, a maior agência de relações públicas do mundo. Ela então foi contratada pela J. Walter Thompson Co. para ajudar a empresa a desenvolver uma presença de relações públicas em Los Angeles.No prazo de três anos, tornou-se a primeira vice-presidente da JWT na Costa Oeste e, um ano depois, a primeira mulher em Los Angeles a ser nomeada gerente geral de um escritório de uma empresa in-ternacional de Relações Públicas. Em 1979, Sue decidiu abrir sua própria empresa de relações públicas. Hoje, The Bohle Company é uma das 50 maiores agências independentes de Relações Públicas nos Es-tados Unidos e a maior empresa focada em tecnologia no Sul da Califórnia. Profissionalmente ativa, é membro e ex-presidente do College of Fellows, PRSA, uma honra concedida a profissionais avaliados como modelo na indústria de Relações Públicas. Ela também é ex-presidente da Counselors Academy, uma organização nacional de chefes de agências, bem como ex-presidente da Los Angeles Chapter of Public Relations Society of America. Sue possui tanto o bacharelado como o mestrado da Northwestern University’s Medill School of Journalism. Antes de entrar em relações públicas, ela era instrutora de jor-nalismo dos ensinos médio e superior.
todd m. Fay
[email protected] Todd M. Fay era o diretor de desenvolvimento para a Game Audio Network Guild (www.audiogang.org). Já trabalhou com Creative Labs ATC, Blizzard Entertainment, THQ, Vivendi Universal, Black Ops Entertain-ment, G4 Media, e Tommy Tallarico Studios. Seu talento chamou a atenção na Game Developer Magazine, Gamasutra.com, Music4Games.net e, no G4: Television for Gamers, a rede 24 horas dedicada a jogos e ao estilo de vida dos jogadores. No G4 Media, Todd supervisionou o desenvolvimento dos programas Filter and Cheat!: Pringle’s Gamer’s Guide, bem como o Special: Splinter Cell da Icon. Enquanto trabalhava com a Creative Labs, contribuiu com o desenvolvimento do EAX 3.0, e foi também autor do guia do designer para essa tecnologia. Todd produziu seu primeiro livro, DirectX 9 Audio Exposed: Interactive Audio De-velopment, para a Wordware Publishing em 2003, que lhe proporcionou o Prêmio G.A.N.G.3 em 2004. Possui bacharelado em música pela University of Massachusetts Lowell (UML), cujo Departamento de Tecnologia em Gravação de Som foi ganhador do Prêmio Lowell (UML).
3 N.R.T. : Consulte o site da G.A.N.G em http://www.audiogang.org/.
games2.indb 36 3/2/2012 16:47:57
BIoGrAfIAS DoS CoLABorADoreS XXXVII
tom Forsyth
[email protected] Tom é um arquiteto de software e hardware na Intel trabalhando no projeto Larrabee. Anteriormente, escreveu software de animação para a RAD Game Tools, motores gráficos de jogos para a Muckyfoot Productions e drivers para placas de vídeo Direct3D para a 3Dlabs. Em seu tempo livre, fez uma varie-dade de pesquisas relacionadas aos gráficos, com foco em sombras, e já escreveu e editou muitos livros e artigos, notavelmente como parte da série ShaderX.
david Johnson
[email protected] David iniciou sua carreira como colorista na CST Technology, em 1994, colorizando desenhos animados e filmes. Após estudar animação e efeitos especiais no Santa Monica College’s Academy of Entertain-ment Technology, tornou-se um modelador 3D. Trabalhou como modelador profissional na 3Name3D e Viewpoint Digital. David tem créditos em um filme, créditos em vários jogos e já criou modelos para diversos sites e comerciais de TV. Está trabalhando em jogos desde 1999 e é um dedicado artista de efeitos desde 1995. Trabalhou em títulos como Shadowrun, Halo 3 e também no Modern Warfare 2, da Infinity Ward.
eric lengyel
[email protected] Eric Lengyel é arquiteto chefe no Terathon Software, onde comanda o desenvolvimento do C4 Engine. Ele se dedica à pesquisa de gráficos 3D há mais de 15 anos e é autor do best-seller Mathematics for 3D Game Programming and Computer Graphics. Também é autor do OpenGL Extensions Guide e já escreveu muitos artigos para publicações da indústria desde o Gamasutra.com até a série Game Programming Gems.
Peter lewis
[email protected] Peter Lewis trabalha com gráficos de computador desde metade dos anos 1980, quando começou a pro-gramar câmeras de controle de movimento para a indústria de filmes. Começou a atuar na indústria de videogames em 1991 com a Dynamix, Sierra Online, onde criou o Cinematics e gráficos 3D para jogos. Foi senior art lead4 na WildTangent, Mad Doc Software, estúdio ACES dentro da Microsoft Game Studio, e é atualmente diretor de arte na Reality Gap. Peter é instrutor no DigiPen Institute of Technology, onde ensina animação de computador para estudantes de arte e programação; tem sido instrutor do programa de animação de computador certificado pela University of Washington Extension.
noel llopis
[email protected] Noel Llopis é fundador da Snappy Touch, desenvolvendo independentemente jogos para iPhone. Ante-riormente cofundou a Power of Two Games. Também foi arquiteto técnico chefe na High Moon Studios onde coordenou a pesquisa e o desenvolvimento de tecnologia de ponta. No Day 1 Studios, arquitetou e
4 N.R.T.: Senior art lead é um cargo da indústria de games. Ele é o responsável pela produção, processamento e a loca-lização das artes e recursos dentro do jogo. O cargo é ocupado por um artista com ampla experiência e conhecimento; uma versão possível seria: artista principal sênior.
games2.indb 37 3/2/2012 16:47:57
BIoGrAfIAS DoS CoLABorADoreSXXXVIII
desenvolveu a tecnologia que está na base de jogos como Mech Assault 1 e 2. É um entusiasta dos méto-dos de desenvolvimento ágil, testes automatizados e desenvolvimento direcionado por testes. É autor do livro C++ for Game Programmers, contribuiu com diversos artigos para a série Game Programming Gems, e atualmente escreve a coluna Inner Product na Game Developer Magazine. Obteve bacharelado pela University of Massachusetts Amherst e mestrado pela University of North Carolina em Chapel Hill.
syrus mesdaghi
[email protected] Syrus Mesdaghi é o engenheiro chefe de IA na Dynamic Animation Systems, onde é o chefe de tecno-logia em um projeto FPS (First Person Shooter) para treinamento tático de tomada de decisões baseadas em equipe, assumindo muitos aspectos do projeto, o que inclui a IA. Anteriormente foi diretor do Curso de IA no programa de Desenvolvimento e Design de Jogos da Full Sail University. Além de sua paixão por IA, dedicou-se à melhoria, demonstração e promoção da tecnologia Java. Desenvolveu e exibiu tec-nologia de jogos de ponta para DAS, Full Sail University e Sun Microsystems em diversas conferências como GDC, SIGGARH, QuakeCon e I/ITSEC em projetos, desde jogos de FPS, RTS, luta e corrida. Realizou apresentações na GDC e é um dos autores de Practical Java Programming. Contribuiu ainda com outras publicações como AI Game Programming Wisdom.
tito Pagan
[email protected] O diretor de arte Tito Pagan é um veterano desenvolvedor de jogos e escritor com 17 anos de expe riência na indústria, além de possuir créditos em dezenas de títulos de jogos. Sua experiência vai desde artista de texturas, designer de nível, chefe de animação, modelador de personagem, artista de conceito, diretor de captura de movimentos e diretor técnico. Há pouco tempo fundou o BoldFist, um estúdio de animação e captura de movimentos em Washington. Anteriormente para a WildTangent, Tito chefiou a direção de arte de títulos de jogos Internet, bem como a edição de jogos para a Internet publicados de forma customizada para os clientes. Os ciclos de desenvolvimento agressivos na WildTangent ensinaram muito a Tito sobre produção e terceirização otimizada de arte nos jogos, com uma média de três jogos por ano durante seus cinco anos de empresa. Com o lançamento da Gas Powered Games, chefiou o trabalho de animação, com a tarefa de coordenar os elementos de movimentação do personagem no jogo Dungeon Siege.
mark Peasley
[email protected] Mark Peasley é um veterano na indústria de jogos, com 20 anos de experiência produzindo ilustrações, cronogramas, gerenciando equipes e fazendo trabalhos impossíveis. Durante esse tempo, foi artista, di-retor de arte, produtor e diretor de projeto. Trabalhou em mais de 25 títulos de PC, 3DO, Xbox e Xbox 360. Recentemente na Microsoft Games Studio, trabalhou com Forza Motorsport, Forza Motorsport 2, Midtown Madness e Rallisport.
steve rabin
[email protected] Steve Rabin é engenheiro de software principal da Nintendo of America, onde pesquisa novas técnicas para as plataformas atuais e futuras da Nintendo, ferramentas de desenvolvimento para arquitetos como o WiiProfiler e dá suporte aos desenvolvedores da empresa. Antes da Nintendo, trabalhou principal-mente como engenheiro IA em diversas empresas iniciantes em Seattle incluindo Gas Powered Games,
games2.indb 38 3/2/2012 16:47:57
BIoGrAfIAS DoS CoLABorADoreS XXXIX
WizBang Software Productions e Surreal Software. Organizou e editou a série de livros da AI Game Programming Wisdom, o livro Introduction to Game Development e tem dúzias de artigos publicados na série Game Programming Gems. Palestrou na conferência AIIDE em Stanford, na Game Developers Conference e em muitas conferências de desenvolvimento da Nintendo na América do Norte e Europa. Organizou a AI Summit com duração de dois dias na GDC 2009 e moderou as mesas-redondas de IA na GDC. Steve também fundou e gerencia um grupo profissional conhecido como AI Game Programmers Guild. Ensina inteligência artificial para jogos na University of Washington Extension e no DigiPen Institute of Technology. Possui bacharelado em Engenharia da Computação e mestrado em Ciência da Computação, ambos pela University of Washington. Por fim, mantém um site que cataloga mais de mil artigos de desenvolvimento de jogos no www.introgamedev.com.
graham rhodes
[email protected] Graham Rhodes começou a fazer jogos nos computadores Commodore e Atari de 8 bits quando ainda estava no ensino médio. Desde então vem criando software para gráficos 3D em tempo real, jogos e si-mulações. Foi programador chefe para uma série de jogos educacionais para o World Book Multimedia Encyclopedia, bem como em diversos “serious games” em primeira/terceira pessoa, além de contribuir em inúmeros projetos de modelagens procedurais de simulações baseadas em física. Graham contri-buiu com capítulos para diversos livros na série Game Programming Gems. É moderador do fórum de matemática e física no site gamedev.net, apresentou-se na Game Developers Conference (GDC) anual e outros eventos e regularmente participa da GDC e da conferência anual ACM/SIGGRAPH. Graham é membro da ACM/SIGGRAPH, da International Game Developer’s Association (IGDA), da North Caro-lina Advanced Learning Technologies Association (NC Alta) e da Long Now Foundation.
dr. stephen rubin , esquire
[email protected] Steve Rubin representa desenvolvedores e distribuidores engajados em todos os aspectos da indústria de jogos em assuntos tais como contratos, licenças, proteção e aplicação da propriedade intelectual e litígio, formação de negócios, aquisições e financiamento. Antes de criar sua própria empresa, Steve era um advogado na Divisão Antitruste do Departamento de Justiça dos Estados Unidos, professor de direito na University of Florida e sócio em um escritório onde chefiava as práticas de propriedade intelectual e an-titruste. Também atuou como special master5 e como mediador na Corte Federal norte-americana para casos de patentes e outros litígios. É autor de diversos livros e artigos sobre antitruste e propriedade inte-lectual. Além disso, é palestrante sobre tópicos de direito e negócios na Game Developers Conference.
Kathy schoback
[email protected] Como vice-presidente executiva e diretora global de marca para a Game Group of Think Ser vices, Kathy supervisiona a série de eventos da Game Developers Conference, localizada em São Francisco, CA; Austin, TX; Vancouver, Canadá; Xangai, China; e Colônia, Alemanha. Também gerencia produtos impres sos e sites para o Game Group, que inclui Gamasutra.com e Game Developer. Uma veterana da indústria de jogos, Kathy começou sua carreira na SEGA of America e em seus nove anos lá ocupou uma variedade de cargos de desenvolvimento de gerenciamento e negócios. Outra experiência profissional inclui trabalhar
5 N.R.T.: O special master é um cargo judiciário nos EUA, designado pelo juiz. Sua função é a de cuidar que as ordens judiciais sejam seguidas criteriosamente.
games2.indb 39 3/2/2012 16:47:57
BIoGrAfIAS DoS CoLABorADoreSXl
como diretora de Operações de Produtos na Eidos e vice-presidente de Aquisição de Conteúdo para AGEIA Technologies, bem como fazer parte do comitê consultivo da Game Developers Conference, como diretora da International Game Developers Association, e participar no comitê de direção do Women in Games International. Kathy se graduou com summa cum laude no bacharelado em Inglês da University of California, Berkeley.
Jeff selbig
[email protected] Jeff trabalha na indústria de jogos desde 2000 como artista 3D, diretor de arte e gerente de terceirização. Anteriormente, atuou como geologista de exploração para ARCO e engenheiro geotécnico no Alasca. Gasta seu tempo livre convencendo sua família de que jogar World of Warcraft e Guild Wars é pesquisa relacionada a trabalho.
tom sloper
[email protected] Tom Sloper é produtor e designer de jogos há mais de 25 anos, projetou e produziu jogos para grandes plataformas desde o Vectrex e Atari 2600 até Playstation, Dreamcast, Nintendo DS, Xbox 360 e IPTV. Trabalhou para Sega, Atari, Activision e Yahoo. Como palestrante, proferiu palestras na KGC, GDC e no Smithsonian. Como autor contribuiu com diversos livros sobre jogos e a indústria (Secrets of the Game Business, Game Design Perspectives, Introduction to Game Development). Sloper está na faculdade da University of Southern California, onde ensina design de videogames, produção e garantia de qualidade. É um autor e um expert internacionalmente reconhecido do clássico jogo chinês de mah-jongg.
leslie stirling
[email protected] Leslie é escritora de jogos e contadora de histórias profissional de jogos. Possui mestrado em Biblioteco-nomia e Ciência da Informação, com ênfase em narrativas e tecnologia pela University of Washington. É uma jogadora de longa data e gerencia ativamente uma guilda MMO on-line com mais de 2.500 jogadores.
tommy tallarico
www.tallarico.com Tommy Tallarico é compositor musical para videogames há mais de 18 anos. Em 1994, fundou o Tommy Tallarico Studios, o maior estúdio de produção de áudio da indústria de multimídia. Foi o primeiro a utilizar um áudio 3D em um jogo (Q-sound) , responsável por trazer o verdadeiro som surround inte-rativo digital 5.1 (seis canais) para a indústria dos jogos. Tommy trabalhou na indústria de jogos como analista de jogos, gerente de produto, produtor, escritor, designer e chefe dos departamentos de Vídeo e Música. É o fundador e presidente da Game Audio Network Guild (G.A.N.G.), uma organização sem fins lucrativos para educar e elevar a percepção do áudio para o mundo interativo (www.audiogang.org). Tommy está no comitê consultivo da Game Developers Conference, é um orgulhoso membro da International Game Developers Association, e membro da comissão de indicação da Academy of Inte-ractive Arts & Sciences. Já ganhou mais de 20 prêmios da indústria pelo melhor áudio de videogames e trabalhou em mais de 20 títulos, até hoje, com total de vendas de mais de 75 milhões de unidades e 2 bilhões de dólares.
games2.indb 40 3/2/2012 16:47:57
BIoGrAfIAS DoS CoLABorADoreS XlI
Bretton Wade
[email protected] Bretton Wade é um veterano da indústria de gráficos e jogos. Atualmente é diretor na SC Technologies and Clockwork 3. Foi diretor de tecnologia da Firaxis Games, gerente da equipe de software do sistema Xbox, líder de um estúdio independente contratado pela Blizzard Entertainment e líder de desenvolvi-mento no projeto do Microsoft Flight Simulator.
Chuck Walters
[email protected] Chuck Walters atualmente contrata desenvolvimento de jogos por meio da Gamegineer Corp. Também instrui cursos sobre Arquitetura de Jogos Multijogador (Multiplayer Game Architecture) e ASP.NET na University of Washington Extension. Seus empreendimentos anteriores incluem Magic The Gathering Online na Wizards of the Coast, jogos para celulares baseados na plataforma Brew para a Tooned In, o jogo de corrida Need for Speed para a Electronic Arts, demonstrações para Microsoft Research Group, transferência de jogos de uma plataforma para outra para Manley & Associates, ferramentas de soft ware para a Tektronix, engenharia de hardware para Attachmate, e um artigo sobre dispositivos de feedback de força para Game Developer Magazine.
games2.indb 41 3/2/2012 16:47:57
Programação de jogos: linguagens e
arquitetura
P a r t e
3
Gameentity
Weapon movingentity
Bow Sword PlayerAvatar AIentity
enemy NPC
games2.indb 163 3/2/2012 16:47:58
visão geral
Há mais para programar um jogo do que sentar à frente de um computador equipado com seu editor e compilador favoritos e teclar a noite inteira. A maioria dos jogos comerciais é criada por grandes equipes, desde centenas de programadores, dependendo do tamanho do grupo e do es-copo do programa. Este capítulo explica como as equipes de programação são organizadas e que técnicas comumente são usadas para coordenar eficazmente o trabalho de todos os integrantes e criar um grande jogo.
equipes de programação
Anos atrás, no início dos anos 1990, os programadores estavam no centro do desenvolvimento de um jogo e eram a visão por trás dele. Contudo, com o crescimento de equipes e orçamentos e a mudança do foco do desenvolvimento de aprimoramentos técnicos para o próprio jogo, as pessoas perceberam que só porque alguém foi um programador brilhante não significa que seria um bom criador de jogos.
3.1 equipes e processos
neste capítulo
■ Visão geral■ equipes de programação■ metodologias■ Práticas comuns■ Qualidade
■ Aproveitando código existente■ Plataformas■ resumo■ exercícios■ referências
games2.indb 165 3/2/2012 16:47:58
PArTe 3 ProGrAmAção De JoGoS: LINGUAGeNS e ArQUITeTUrA166
O papel dos programadores hoje é muito diferente do que era há algumas décadas. Atual-mente, o jogo é desenvolvido pelos criadores de conteúdo (artistas e designers) com pleno su-porte dos programadores. Os programadores são responsáveis por criar alguns códigos (seguindo as instruções dos designers), a tecnologia na qual o jogo irá funcionar (geralmente chamada de “motor do jogo”) e as ferramentas que os artistas e designers irão usar para criar o conteúdo do próprio jogo.
Isso não é de jeito nenhum um papel menos interessante ou prestigioso, mas é mais orientado a servir o resto da equipe de desenvolvimento e lhes fornecer meios para criar um jogo incrível. O destino da equipe está nas mãos dos programadores, e é sua responsabilidade ter certeza de que tudo corra de forma consistente e confiável.
Áreas de programaçãoExistem três áreas distintas da programação envolvidas na criação de um jogo.
Código do jogoO código do jogo é a parte principal em que os profissionais pensam quando se referem à progra-mação de um jogo. Isso inclui tudo diretamente relacionado ao próprio jogo: como a câmera se comporta quando o controle é pressionado, como a pontuação é mantida para um tipo de jogo em particular, ou como as entidades de IA no mundo reagem a certas situações.
Esse tipo de programação envolve escrever uma grande quantidade de código em linguagens de script (opostas à linguagem principal em que o resto do jogo é escrito, como C++). O propósito de usar linguagens de script nesse nível é:
■ Produzir uma iteração mais rápida evitando ciclos demorados de compilação, correção e execução.■ Permitir que designers e artistas inclinados tecnicamente mudem comportamentos diretamen-
te no jogo. ■ Apresentar uma linguagem mais apropriada para lidar com o domínio de problema (por exem-
plo, uma linguagem customizada de alto nível para lidar com problemas de IA é provavelmente mais fácil do que usar C++).
Motor do jogoA programação do motor do jogo envolve todos os códigos utilizados do início ao fim, e não os itens específicos do jogo. Em outras palavras, é todo o código de suporte necessário para que o jogo funcione. Algumas vezes, as pessoas erroneamente pensam em motor de jogo como algo res-ponsável pelo desenho de belos gráficos 3D, mas isso é função do renderizador gráfico (também chamado de “motor gráfico”, o que causa mais confusão), que é uma das muitas partes do motor do jogo.
Um dos propósitos de um motor é isolar o jogo do hardware no qual está funcionando. Isso acontece pela criação de uma camada abstrata entre o jogo e o hardware. Desse modo, o jogo torna-se independente dos detalhes da plataforma e concentra-se exclusivamente na própria lógi-ca do jogo. Exemplo desse tipo de abstração é a coleta de informações enviadas pelo controlador, colocando gráficos na tela, ou reproduzindo sons de fundo.
O motor também fornece funcionalidade comum necessária para partes diferentes do jogo. Por exemplo, ele irá dar suporte à serialização (leitura e escrita do estado dos objetos), comunicação
games2.indb 166 3/2/2012 16:47:58
Visite a página deste livro na Cengage Learning Brasil e conheça também todo o nosso catálogo
do jogo/renderização.ulation is running)
current game time;olollisions and collision timemeess;;
ve ccollisions.h coolllliding pair i, j))
// Cálculo aanntteeses dddaa popopppp sisiiçãçãççç oo dedee cccolololisissãoãoo eeee
VectVVecttVVecttoroororor3Doroorr V_iV nit[t[[[[NNNN] =NN inin tialtial velellelocitocittto ies;;;esVVVectVV or3Dor3Dr3r33D3D p_ipp_p_p nit[[[nit[[NNN] =] =N] NN ininin tialal cencennnter ter terrr posiposiss tiont ons;s;s;;VVVectV or3DDDD g(0gggggggg .0, , .0, , 0000.0, -9.9 81);;flflfloatfl masm s[N][[N][Ns[N]NN = p= p= p= p= p= p= ppartiarticle ccle cle massmassmassassmassas es;es;es;es;eses;ees;flflfloatflflflflflfl timtimime_ine_inie iniii it[Nit[Nit[NNN]]] =] = per r partarttrticleiccle staststststs rt tttttiiimesmim ;
floatfloatfloatoataa epsepsepsepsssss ==== c= coeoefficienent ofofff resre tituuuutiotionn;;
// L//// L// L/ oop o prinnprincipaaaal dol dl ddl do jogggo/reendernd izaçzazazaaa ão.ãoãoãoowhilwhiwhilwwwhilee (ge (geee (game meameamee simusimumusimumuullatilatilatil on ionon ion ionooon ss ruruss rurunninnninnninnggg)g)g)))g){{
floato t == curcurcurururrrent gamgammga ee timeme;me;e;e;edetedetdeteet ct cct ccollollollollilisiosionsionsionsiosio s ananndd cod collisllislllill ion ooion o timetimes;ss;s;s;
// R// // R// Resolesolo veve ceve colliollillisisiononsions ss.for rrfor for (eacaceacc(eac(eacch coh coh coh coh coco coh collidiillidlliidii ing ing ingngg g pairairpaairpppp ii, iii, j)jjjj)j))jjjj)
/////// ááláá l d i ã ddd li ã
Este livro foi elaborado por um timede vários profissionais com muita experiência na indústria de jogos.Cada um contribuiu de maneira profunda, cobrindo sua especialidade, para que o resultado fosse uma obra completa,com toda a área de desenvolvimentode jogos explorada.
EditorSteve Rabin
Autores• Bretton Wade• Chuck Walters• David Johnson• Ed Bartlett• Eric Lengyel• Graham Rhodes• Isaac Barry• James Boer• Jeff Selbig• Kathy Schoback• Leslie Stirling• Mark Peasley• Noel Llopis• Peter Lewis• Robert T. Bakie• Stephen Rubin• Sue Bohle• Syrus Mesdaghi• Tito Pagan• Todd M. Fay• Tom Forsyth• Tom Sloper• Tommy Tallarico
Outras obras
Desenvolvimento de gamesTradução da 2ª edição norte-americana
Jeannie Novak
Desenvolvimento de games com Macromedia® Flash® Professional 8Glen RhodesSérie Profissional
Design de games: uma abordagem práticaPaul SchuytemaSérie profissional
Introdução ao desenvolvimento de gamesVolume 1 - Entendendo o universo dos jogos
Tradução da 2ª edição norte-americana
Steve Rabin (ed.)
Programação de games com Java®Tradução da 2ª edição norte-americana
Jonathan S. Harbour
Próximos lançamentos
Introdução ao desenvolvimento de gamesVolumes 3 e 4
Tradução da 2ª edição norte-americana
Steve Rabin (ed.)
VOLUME 2Programação: técnica, linguagem e arquiteturaTradução da 2ª edição norte-americana
DESENVOLVIMENTO DEINTRODUÇÃO AO
STEVE RABIN(EDITOR)
t gamame t mmee;t
i
VeVeVVeVVVV ctctttctctctorororororororororororoooorr3D3D3D3D3 VVVVVVVV_i_i_iiininninit[t[[[[[t[[[[[[[N]N]N]N]N]N]N]N]N]] = iiininininininininiin ttitittititialalalal vvvvvvveleleleeele ocooocococococococococococooocitititiitititiiti iieiiiiessVeVeVeVeVeVeVeVeVeVeVeVeVeVeVeeeeectctctctctctctcctctcttcctcccc orororoororororororororororr33D3D3D3D3D3D3D3D3D3D3D33DD3D3D3D3D pppppppp_i_i_i_i_i_innninniit[t[t[t[t[t[t[[t[t[t[t[t[N]N]N]N]N]N]NN]N]N]NN]N]]]]]] ======= iiiiininininititititialalalaalalllal ccccccceneneneneneenennnennnntetetetetetteteteteteer r r r r r popopopopopopopopopppoppppVeVeVeVeeecctctttttttcttttooororooo 3D3DDDDDD3DDDDDD ggggg(0(0(0(0(0.0.0.000000000000.0,,,,, 000.000.00.0.0000000 0,00,0,000000,0 ------------9.9.9.9.999.999999.99.999 8818888118888888188 ););););););;;;;flflflofloflofloflofloatatattttatttttattttt mmmmmmmmmasasasaassassa s[s[s[s[s[ss[N]N]N]N]N]N] =========== ppppppppppppaarararartitititittiticlclclclclccc eeeee mammamamammammm ssssssssssssssssssssseseseseseseseeesesesesse ;;;;;;;;;;;;;floflofloflflflooatatatttttatat ttttimimimmmmmme__e_e_e_e_innnititititittt[N[N[[[N[N[N[N[N[N[N[N[NNNNNNNNN]]]]]]]]]]]]] === ppeppppepper paapaaaaaaartrtrtttrtticicciccccccccciclelelelelelelelee ssssssssssssstattatatatatttatatattttat rtrtrtrtrtrtrtrttt
flflofloflooooooofloooflooooatatatatatatatatataatatattt eeepsppsss == ccccoooooeo ffififififfififififificicicicicicicicicieneneneneneneenenenenennt t t tttttttt ofofofofofofofffffofofofoffo rrrrrrrrresesesesesessesesestittititititittitututututututuututititititittitionononononononoononnnnnn;;;;;;;;;;
///////////////////////// LLLLLLLLLLLLLLLLooooooooooooooooooooooooooop p p pp p pppp prprprprprprprprprprinininininnnininninncicicicicicicicccciciccc papapapapapapapapapapaapallllllll dodododododododododooodd jjjjjjjjjjogogogogoggogogoggggggggo/o/o/o/o/o/o/o/o/o/oooo rerererereeeeereeer ndndndndndndndndnnndnn ererererrrerrizizizzizizizizizizzzzzzzaçaçaçaçaçaçaçaçaççããããããwhwhwhwwhwhwhwhwhwhhwhwwhilililllllle e ee e e eee e eeeeeeee (g(g(g(g(g(g(g(g(g(g(g(g(g(g((( amamamamamamamamamamamamamammmmammeeeeeeee sisisisisisisisiisssis mumummummumumumumumumumumumumumuulalalallalalalalalalatititititititititititititittittiiiionononononononononononoonononoonnnonn iiiiiiissssssssss ss rururururururuururrrrurrrrr nnnnnnnnnnnnnnnnnnnnnnnnnnininininninininninininininnnninnnng)g)g)g)g)g)ggggggggg{{{{{{
floflooflofloflooflofloofloflooflooooataaatatatatatatattataattatatt tttttttttttttttttt ============ cccccccccc rrrurururrrrrrrrrerererererererereererrrerentntntntntntntntntntntntnttttntnntnt ggggggggggggggggggggggggamamaaamamamamamamamamamamamamamamamamaamame eee ee eeeee tittttititititittitittitititittittttitit mmmmmemememememememememememem ;;;;;;;;dedededdedededddddd teteteteteteteteeeetetectctctctctctctctctctctccc ccccccccccccccccolololololololololololololollilililililililililililililililisisisisisisissisisisisisisisiononononononononononononononnnns sss s ss ssssssss ananananananannnnndddddddddddddd cocococococococcc lllllllllissisississssioioioioioioiioioo
///////////////////////////////////// RRRResesesesesesssssseesesoloolo veeveeeveeeeeee ccccccccccccoloololooloooo lililisisisisisisisssionononononnononononnnono s.ss.s.s.s.s.ss.ssssssfofofofoffof rrrrr (e(eacacaaa h cooolllllllllllidididididdininingggg pppappaiririii iiiii jj)j)j)j))
p pp__ [[ ]] ( _____ [ ]] );pii == pp ++ 000 555555 ***** gg * ((tmtmtiti ** tmmti)i);;;
cuu sisiçççocociddadade ddeee oo EqEqEqEqEqEq ess 4 e 5).).
mm t[j]];;pjj = ppppp__i__ nnit[t[[jj]] + ((VV_V_i ] * ttmti););pjpjpjpjj == pppp + 0000 5.5 ** ggg * (((tt tmtmti)i);vjvjvvvjj == VVVV i_iii_inninn t[[j]j]j]j]j]]]j] ++ * ttmmti;
// C// C// C// C//// C/ áálcáálcuá culolo alo aanteessnttes da da pospppoosippp çção ooo o o ooç de cde cde cde ccde colisolisolisão eoão eão eo// v/// velocelolelocce oce cll idada ee dee objobjjj i i ((EqEquaEquaEquuaaaaçõesççõesçõções 4 ee 55).5flofloatfloaoatatttttfloatoa tmtmtmtmttmtt tttmti =i = i =i = = i =i =i =i ==i timetimetimetimemetimtimet ccoolcocolcollisiisissiislisisislisl ion -n -on -n -onnnononnno timtimtimtimme ine_ine_inee init[iit[iit[iit[i]];];];]]
// C/// C/ álcuálllcuálcl lo aoo ntestess dadd posposipososposip çãçãoçãoção de colisãoão
[jj] + (V_(V_initinitit[[jjj] ] tmmmtmti);ti);55 ** gg* * (tmtmtit * t* tmtmti)tt ;
s;s;oooooooooosisisisisis titititittitiononononononnnononns;s;s;s;sssssss
ttttttttttimimimimimimimim ;
ãoãoãoãoãoãoãoãoãoãoooooooã ......
ooooooonnnnnnnnnnnnn titititititittittit mmmmemem s;s;s;s;s;s;;
poposisiçãçãoo dee ccololisisãoão eebjbj i ((EqEquaaçõçõeseses 444 e 5).).olollilisisisiononon - timimee_iinit[i];itt[i[i]] ** tmtmtiti););
mmtit * ttmtm i);mti;mti;
Tradução da 2ª ed
Jeannie Novak
DesenvolvimentoMacromedia® FlaGlen RhodesSérie Profissional
Design de games:PaPaPaPaPaPaPauululul SSchc uytemaSérie profissional
Introdução ao dett seeVolume 1 - Entende
Tradução da 2ª ed
Steve Rabin (ed.)
Programação deTradução da 2ª ed
Jonathan S. Harb
Próximos la
Introdução ao des;;
Volumes 3 e 4
Tradução da 2ª edeseseseseeses;;;;es;Steve Rabin (ed.)
VVVVVVVVVVVOOOOOOOOLLLLLLUUME 2PrPrPrPrPrPPrPPP ogogooggrararramam ção: técnica, linguagem e arquiteturaTrTrTTradadda uçuçãoãã dda a 2ª edição norte-americana
flofl at tmmtmtii == tititimmeme_c_coolliissiionononon - ttimimmee__ininittt[i[i[i];];]];];float tmti = time_collision - time_init[i];pi = ppp iinniit[t[t[[i]i] ++ ((VVVVV ininininnititititt[[i] ** tmtmtiti);pi = p nit[i] + (V init[i] * tmti)
_pi =pi =pi =p p ipp_i i [it[nit[[[i]]i] +i (V_V(V_VV__initin tiniin [[i]ii]]i[[ * tm* tm* * tm* * tmmmmtiti);ti);;_init[i] + (V_init[i] * tmti);ppi =p = p +pp 0.5555 * gggg * (* (* (** tmtitmtittitmtm i * tttmtmti)mti)mti)tt ;;;+ 0.5 * g * (tmti * tmti);vi vi i =vi =vi =vvvii V iV iV_iV_V_iV_V_iV nitit[nit[nit[nit[[nit[n i] +i] +i] +i] i]i]i] g *g *g *g *g *g *g g tmtmtmtmttmtmtmmtmtm ii;i;;i;_init[i] ++ g *g gg tmttmti;i
// velociddaadadee ddedee oobbjbj i ((EqEquuauaçõçõeseseses 4444 eee 555)).).// velocidade de ob i (Equações 4 e 5)
STESTESTESTESTESTETESTSTSTESSST VEVEVVVEE RRABIN(EED(ED((E ITOR)
Vector3D p_init[N] = initial center positions;Vector3D g(0.0, 0.0, -9.81);float mass[N] = particle masses;float time_init[N] = per particle start times;
float eps = coefficient of restitution;
// Loop principal do jogo/renderização.while (game simulation is running){
float t = current game time;detect collisions and collision times;
// Resolve collisions.for (each colliding pair i, j)
// Cálculo antes da posição de colisão e// velocidade de obj i (Equações 4 e 5).float tmti = time_collision - time_init[i];pi = p_init[i] + (V_init[i] * tmti);pi = p + 0.5 * g * (tmti * tmti);vi = V_init[i] + g * tmti;
// Cálculo antes da posição de colisão e// velocidade de obj j (Equações 4 e 5).tmti = time_collision - time_init[j];pj = p_init[j] + (V_init[j] * tmti);pj = p + 0.5 * g * (tmti * tmti);vj = V_init[j] + g * tmti;
Vector3D V_init[N] = initial velocities;Vector3D p_init[N] = initial center positions;Vector3D g(0.0, 0.0, -9.81);float mass[N] = particle masses;float time_init[N] = per particle start times;
float eps = coefficient of restitution;
// Loop principal do jogo/renderização.while (game simulation is running){
float t = current game time;detect collisions and collision times;
// Resolve collisions.for (each colliding pair i, j)
// Cálculo antes da posição de colisão e// velocidade de obj i (Equações 4 e 5).float tmti = time_collision - time_init[i];pi = p_init[i] + (V_init[i] * tmti);pi = p + 0.5 * g * (tmti * tmti);vi = V_init[i] + g * tmti;
// Cálculo antes da posição de colisão e// velocidade de obj j (Equações 4 e 5).tmti = time_collision - time_init[j];pj = p_init[j] + (V_init[j] * tmti);pj = p + 0.5 * g * (tmti * tmti);vj = V_init[j] + g * tmti;
indústria de games ainda é jovem e se encontra em um ritmo de
expansão impressionante, com tendência a resistir a grandes crises
econômicas, gerando oportunidades para novas ideias, novas formas
de jogar e a necessidade de novos talentos para a indústria.
Esse crescimento inspirou alguns dos especialistas mais brilhantes e respeitados
da indústria de jogos a unir sabedoria e experiência para produzir esta obra, que
aborda o desenvolvimento de um jogo, com a profundidade necessária para entender
e apreciar o estado da arte dos processos tecnológicos.
Introdução ao desenvolvimento de games, Volume 2 – Programação: técnica,
linguagem e arquitetura apresenta uma sólida organização didática, com apresentação
estruturada dos conceitos, sistematização de exemplos e situações modelares. Toda a
abordagem é reforçada por exercícios que cobrem o conteúdo de cada capítulo.
O texto ainda conta com uma considerável quantidade de pseudocódigos e códigos,
o que acentua a característica didático-pedagógica da obra.
Este volume apresenta-se como um material muito útil para todos que estudam,
pensam e pesquisam a grande área da programação de games e também para
aqueles que querem ter acesso a uma referência conceitual sólida e à indicação de
fontes consagradas.
AplicaçõesLivro-texto para o curso de Desenvolvimento de Jogos que tenha disciplinas que
envolvam programação, inteligência artificial, fundamentos matemáticos, gráficos,
animação e áudio. Para os cursos de pós-graduação, é um precioso recurso para a
pesquisa de tópicos avançados.
A
ST
EV
E R
AB
IN (E
d.)
INT
RO
DU
ÇÃ
O A
O D
ES
EN
VO
LV
IME
NT
O D
E G
AM
ES
• V
OL
UM
E 2
Para suas soluções de curso e aprendizado,visite www.cengage.com.br
ISBN-13: 978-85-221-1144-2ISBN-10: 85-221-1144-8
9 7 8 8 5 2 2 1 1 1 4 4 2
C
M
Y
CM
MY
CY
CMY
K
VALE.ESTA.gamesVOL2.18x26.ai 1 14/02/12 23:59
Top Related