Programa(cid:231)ªo em Python e Introdu(cid:231)ªo ao Pygame Kaya Sumire Abe [email protected] C(cid:226)mpus Curitiba (cid:21) 2012 Versªo 0.1 ii Copyright(cid:13)c draft version Kaya Sumire Abe 2012. Versªo rascunho, 0.1. Colaboradores: Bianca Alessandra Visineski Alberton, Diego de Faria do Nascimento Alguns direitos reservados. Este documento Ø uma obra derivada de (cid:16)Invent Your Own Games with Python(cid:17), de Al Sweigart, e estÆ sob a licen(cid:231)a Creative Commons 3.0 de atribui(cid:231)ªo, uso nªo-comercial e compartilhamento pela mesma licen(cid:231)a. Este trabalho foi confeccionado como material de suporte para as atividades do grupo PET Compu- tando Culturas em Equidade. VocŒ pode: • Compartilhar: copiar, distribuir e utilizar o trabalho • Produzir obras derivadas. Com as seguintes condi(cid:231)ıes: • Atribui(cid:231)ªo: vocŒ deverÆ atribuir o trabalho da forma especi(cid:28)cada pelo autor. • Uso nªo-comercial: vocŒ nªo poderÆ utilizar este trabalho para (cid:28)ns comerciais. • Compartilhamento pela mesma licen(cid:231)a: sevocŒalterar, transformarouampliarestaobra, deverÆ distribuir o trabalho em uma licen(cid:231)a semelhante a esta. Em caso de dœvidas sobre esta licen(cid:231)a, visite o link http://creativecommons.org/licenses/ by-nc-sa/3.0/legalcode. SumÆrio 1 The Hard Way - o jeito mais dif(cid:237)cil 1 1.1 O que queremos dizer com (cid:16)o jeito mais dif(cid:237)cil(cid:17)? . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 Leitura e Escrita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.2 Aten(cid:231)ªo aos detalhes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.3 Localizar diferen(cid:231)as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.4 Nªo copie e cole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.5 PrÆtica e persistŒncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 VocŒ pode treinar em casa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Terminal interativo do Python 3 2.1 MatemÆtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.1 Nœmeros inteiros e de ponto (cid:29)utuante . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Resolvendo expressıes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2.1 Expressıes dentro de expressıes . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 Armazenando valores em variÆveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3.1 Sobreencrevendo valores das variÆveis . . . . . . . . . . . . . . . . . . . . . . . 6 2.4 Usando mais de uma variÆvel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.5 Resumo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.6 Exerc(cid:237)cios complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3 Strings 9 3.1 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.1.1 Concatena(cid:231)ªo de strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2 Escrevendo o primeiro script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.2.1 (cid:16)Hello World!(cid:17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.3 Como o programa (cid:16)Hello World(cid:17) funciona. . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3.1 ComentÆrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3.2 Fun(cid:231)ıes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3.3 Finalizando o programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.4 Nome de variÆveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.5 Resumo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.6 Exerc(cid:237)cios complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4 Adivinhe o nœmero 14 4.1 O jogo (cid:16)adivinhe o nœmero(cid:17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2 Modelo de execu(cid:231)ªo do (cid:16)adivinhe o nœmero(cid:17) . . . . . . . . . . . . . . . . . . . . . . . 14 4.3 C(cid:243)digo-fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.4 A senten(cid:231)a import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.5 A fun(cid:231)ªo random.randint() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.5.1 Chamando fun(cid:231)ıes que pertencem a m(cid:243)dulos . . . . . . . . . . . . . . . . . . . 17 4.6 Passando argumentos para fun(cid:231)ıes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.7 Saudando o jogador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.8 La(cid:231)os de repeti(cid:231)ªo (loops) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.9 Blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.10 Dado booleano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.11 Operadores de compara(cid:231)ªo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.12 Condi(cid:231)ıes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.13 Loops com senten(cid:231)as while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.14 As tentativas do jogador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.14.1 Convertendo strings para inteiros . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.14.2 Incrementando variÆveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.15 Senten(cid:231)as if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 iii iv SUM`RIO 4.16 Saindo de loops com o comando break . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.17 Veri(cid:28)car se o jogador venceu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.17.1 Veri(cid:28)car se o jogador perdeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.18 Resumo: o que exatamente Ø programa(cid:231)ªo? . . . . . . . . . . . . . . . . . . . . . . . 23 4.19 Exerc(cid:237)cios complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5 O Reino do Dragªo 25 5.1 Introdu(cid:231)ªo (cid:224) fun(cid:231)ıes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.2 Como jogar (cid:16)O Reino do Dragªo(cid:17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.2.1 Modelo de sa(cid:237)da do jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.3 C(cid:243)digo-fonte do programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.4 Como o programa funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.4.1 De(cid:28)nindo fun(cid:231)ıes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.4.2 Operadores booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.4.3 Tabelas-verdade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.4.4 Obtendo a entrada do jogador . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.4.5 Retorno de valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.4.6 Escopo de variÆveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.4.7 De(cid:28)nindo a fun(cid:231)ªo checkCave(chosenCave) . . . . . . . . . . . . . . . . . 29 5.4.8 Onde de(cid:28)nir fun(cid:231)ıes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.4.9 Mostrando o resultado do jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.4.10 Decidindo em que caverna estÆ o dragªo amigÆvel . . . . . . . . . . . . . . . . 30 5.4.11 Onde o programa realmente come(cid:231)a . . . . . . . . . . . . . . . . . . . . . . . . 31 5.4.12 Chamando fun(cid:231)ıes no programa . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.4.13 Perguntando se o jogador quer jogar novamente . . . . . . . . . . . . . . . . . 31 5.5 Projetando um programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.6 Resumo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.7 Exerc(cid:237)cios complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6 Jogo da forca 34 6.1 Modelo de sa(cid:237)da do jogo de forca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 6.2 Arte ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.3 Projetando um programa atravØs de um (cid:29)uxograma . . . . . . . . . . . . . . . . . . . 37 6.4 C(cid:243)digo-fonte do jogo de forca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 6.5 Como funcionam algumas coisas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.5.1 Strings de vÆrias linhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.5.2 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.5.3 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.5.4 O operador in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 6.5.5 Removendo itens de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 6.5.6 Listas de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.5.7 MØtodos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.5.8 Os mØtodos de lista reverse() e append() . . . . . . . . . . . . . . . . . . 45 6.6 A diferen(cid:231)a entre mØtodos e fun(cid:231)ıes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6.6.1 O mØtodo de lista split() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6.7 Como o c(cid:243)digo funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6.7.1 Mostrando a ilustra(cid:231)ªo para o jogador . . . . . . . . . . . . . . . . . . . . . . . 47 6.7.2 As fun(cid:231)ıes range() e list() . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.7.3 Loops for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.7.4 Mostrando os espa(cid:231)os para as letras da palavra secreta . . . . . . . . . . . . . 49 6.7.5 Substituindo sublinhados por letras adivinhadas corretamente . . . . . . . . . 50 6.7.6 Obtendo os palpites do jogador . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.8 Senten(cid:231)as elif (else if) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.8.1 Ter certeza que o jogador deu um palpite vÆlido . . . . . . . . . . . . . . . . . 52 6.8.2 Perguntando se o jogador deseja jogar novamente. . . . . . . . . . . . . . . . . 52 6.9 Revisªo das fun(cid:231)ıes criadas para este jogo . . . . . . . . . . . . . . . . . . . . . . . . 53 6.10 C(cid:243)digo principal do jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 SUM`RIO v 6.10.1 Mostrando a ilustra(cid:231)ªo ao jogador . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.10.2 Permitindoojogadorafazerumpalpiteeveri(cid:28)candoseopalpiteestÆnapalavra secreta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.10.3 Veri(cid:28)car se o jogador venceu ou perdeu o jogo . . . . . . . . . . . . . . . . . . 54 6.10.4 Iniciando uma nova rodada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.11 Resumo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.12 Exerc(cid:237)cios complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 7 Jogo da velha 56 7.1 Modelo de sa(cid:237)da do jogo da velha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 7.2 C(cid:243)digo-fonte do jogo da velha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 7.3 Projetando o programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 7.4 Representando o tabuleiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 7.5 Racioc(cid:237)nio do jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 7.6 Como o programa funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 7.6.1 Imprimindo o tabuleiro na tela . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 7.6.2 Permitindo o jogador a escolher o s(cid:237)mbolo desejado . . . . . . . . . . . . . . . 63 7.6.3 Decidindo quem inicia o jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 7.6.4 Perguntando se o jogador deseja jogar novamente. . . . . . . . . . . . . . . . . 64 7.6.5 Mostrando a jogada no tabuleiro . . . . . . . . . . . . . . . . . . . . . . . . . . 64 7.7 ReferŒncias de lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 7.8 Veri(cid:28)car se o jogador venceu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 7.9 Duplicando o tabuleiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 7.10 Veri(cid:28)cando se um espa(cid:231)o no tabuleiro estÆ livre . . . . . . . . . . . . . . . . . . . . . 65 7.11 Permitindo que o jogador entre com a sua jogada . . . . . . . . . . . . . . . . . . . . 65 7.12 Escolhendo um movimento da lista de movimentos . . . . . . . . . . . . . . . . . . . 65 7.12.1 O valor None . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 7.13 Criando a inteligŒncia arti(cid:28)cial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 7.13.1 O computador veri(cid:28)ca se pode vencer em um movimento . . . . . . . . . . . . 66 7.13.2 O computador veri(cid:28)ca se o jogador pode vencer em uma jogada . . . . . . . . 66 7.13.3 Veri(cid:28)cando os cantos, o centro e os lados (nesta ordem) . . . . . . . . . . . . . 66 7.14 Veri(cid:28)cando se o tabuleiro estÆ cheio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 7.15 O in(cid:237)cio do jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 7.15.1 Rodando a vez do jogador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 7.15.2 Rodando a vez do computador . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 7.15.3 Finalizando o jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 7.16 Exerc(cid:237)cios complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8 Bagels 68 8.1 Modelo de execu(cid:231)ªo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 8.2 C(cid:243)digo-fonte do jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 8.3 Projeto do jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 8.4 Como o programa funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 8.4.1 Operadores compostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 8.4.2 Retornando a dica ao jogador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 8.4.3 O mØtodo de lista sort() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 8.4.4 O mØtodo de string join() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 8.4.5 Veri(cid:28)cando se a string possui apenas nœmeros. . . . . . . . . . . . . . . . . . . 71 8.5 In(cid:237)cio do jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 8.5.1 Interpola(cid:231)ªo de strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 8.5.2 Utilizando as fun(cid:231)ıes descritas e veri(cid:28)cando a vit(cid:243)ria do jogador . . . . . . . . 72 9 O Criptograma de CØsar 74 9.1 Criptogra(cid:28)a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 9.2 A encripta(cid:231)ªo de CØsar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 9.3 ASCII, utilizando nœmeros para localizar letras . . . . . . . . . . . . . . . . . . . . . 74 9.4 As fun(cid:231)ıes chr() ord() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 9.5 Modelo de execu(cid:231)ªo do programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 vi SUM`RIO 9.6 C(cid:243)digo-fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 9.7 Como o c(cid:243)digo funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 9.7.1 Decidindo se o usuÆrio quer encriptar ou desencriptar uma mensagem . . . . . 77 9.7.2 Obtendo a mensagem do jogador . . . . . . . . . . . . . . . . . . . . . . . . . . 77 9.7.3 Obtendo a chave do jogador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 9.7.4 Encriptando ou desencriptando a mensagem com a chave dada . . . . . . . . . 77 9.7.5 Encriptando e desencriptando cada letra. . . . . . . . . . . . . . . . . . . . . . 77 9.7.6 O in(cid:237)cio do programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 9.8 O mØtodo de string isalpha() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 9.9 Os mØtodos de string isupper() e islower() . . . . . . . . . . . . . . . . . . . . 78 9.10 For(cid:231)a Bruta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 9.10.1 Adicionando um mØtodo de for(cid:231)a bruta ao programa . . . . . . . . . . . . . . . 78 9.11 Exerc(cid:237)cios complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 10 Introdu(cid:231)ªo (cid:224) GrÆ(cid:28)cos e Anima(cid:231)ªo (parte 1) 80 10.1 Pygame. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 10.2 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 10.3 C(cid:243)digo-fonte do Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 10.4 Importando o m(cid:243)dulo Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 10.5 Fun(cid:231)ıes e mØtodos do programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 10.5.1 pygame.init() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 10.5.2 pygame.display.set_mode() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 10.6 ReferŒncias de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 10.7 Cores em Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 10.8 Fontes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 10.8.1 A fun(cid:231)ªo pygame.font.SysFont() . . . . . . . . . . . . . . . . . . . . . . . 83 10.8.2 O mØtodo render() para objetos Font . . . . . . . . . . . . . . . . . . . . . 84 10.9 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 10.10 MØtodos get_rect() para os objetos pygame.font.Font e pygame.Surface . 85 10.11 Fun(cid:231)ªo construtor e type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 10.12 O mØtodo fill() para objetos Surface . . . . . . . . . . . . . . . . . . . . . . . . 86 10.13 Mais fun(cid:231)ıes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 10.13.1 pygame.draw.poligon() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 10.13.2 Desenhos genØricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 10.14 O tipo de dado pygame.PixelArray . . . . . . . . . . . . . . . . . . . . . . . . . . 87 10.14.1 O mØtodo blit() para objetos Surface . . . . . . . . . . . . . . . . . . . . 87 10.15 A fun(cid:231)ªo pygame.display.update() . . . . . . . . . . . . . . . . . . . . . . . . . 87 10.16 Eventos e loop do jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 10.16.1 A fun(cid:231)ªo pygame.event.get() . . . . . . . . . . . . . . . . . . . . . . . . . 88 10.16.2 A fun(cid:231)ªo pygame.quit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 10.17 Exerc(cid:237)cios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 11 Introdu(cid:231)ªo (cid:224) GrÆ(cid:28)cos e Anima(cid:231)ªo (parte 2 90 11.1 C(cid:243)digo-fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 11.2 Como o programa funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 11.2.1 Movendo e rebatendo os blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 11.3 Como o programa funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 11.3.1 Criando a janela principal e iniciando o Pygame . . . . . . . . . . . . . . . . . 92 11.3.2 Iniciando as estruturas de dados dos blocos . . . . . . . . . . . . . . . . . . . . 93 11.3.3 Rodando o loop principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 11.3.4 Movendo cada bloco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 11.3.5 Veri(cid:28)cando se o bloco foi rebatido . . . . . . . . . . . . . . . . . . . . . . . . . 93 11.3.6 Mudando a dire(cid:231)ªo do bloco rebatido . . . . . . . . . . . . . . . . . . . . . . . 94 11.3.7 Desenhando os blocos em suas novas posi(cid:231)ıes . . . . . . . . . . . . . . . . . . . 94 11.4 Exerc(cid:237)cios complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 12 Detec(cid:231)ªo de colisıes 95 12.1 C(cid:243)digo fonte: colisªo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 SUM`RIO vii 12.2 Como o programa funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 12.2.1 A fun(cid:231)ªo de detec(cid:231)ªo de colisªo . . . . . . . . . . . . . . . . . . . . . . . . . . 97 12.2.2 Determinando se um ponto estÆ dentro de um ret(cid:226)ngulo . . . . . . . . . . . . . 98 12.2.3 O objeto pygame.time.Clock e o mØtodo tick() . . . . . . . . . . . . . . 98 12.2.4 Colidindo com os quadrados verdes. . . . . . . . . . . . . . . . . . . . . . . . . 98 12.2.5 Nªo adicione ou remova itens de uma lista enquanto houver itera(cid:231)ıes sobre ela 99 12.2.6 Removendo os quadrados verdes . . . . . . . . . . . . . . . . . . . . . . . . . . 99 12.2.7 Desenhando os quadrados verdes na tela . . . . . . . . . . . . . . . . . . . . . . 99 12.3 C(cid:243)digo-fonte: entrada do usuÆrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 12.3.1 Iniciando os movimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 12.3.2 Lidando com as variÆveis do teclado . . . . . . . . . . . . . . . . . . . . . . . . 101 12.3.3 O evento MOUSEBUTTONUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 12.3.4 Movendo o (cid:16)jogador(cid:17) pela tela . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 12.3.5 O mØtodo colliderect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 12.4 Exerc(cid:237)cios complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 13 Dodger 103 13.1 Revisªo dos tipos bÆsicos de dados do Pygame . . . . . . . . . . . . . . . . . . . . . . 103 13.2 C(cid:243)digo-fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 13.3 Como o programa funciona e recursos adicionais . . . . . . . . . . . . . . . . . . . . . 108 13.3.1 Importando os m(cid:243)dulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 13.3.2 Explorando o uso de constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . 108 13.3.3 Explorando o uso de fun(cid:231)ıes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 13.3.4 Cursor do mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 13.3.5 Modo fullscreen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 13.3.6 Mostrando a tela inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 13.3.7 O mØtodo move_ip() para objetos Rect e evento de movimento do mouse . 109 13.3.8 Movendo a personagem do jogador . . . . . . . . . . . . . . . . . . . . . . . . . 109 13.3.9 A fun(cid:231)ªo pygame.mouse.set_pos() . . . . . . . . . . . . . . . . . . . . . . 109 13.3.10 Desenhando o placar do jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 13.4 Finalizando o projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 A Fluxogramas 111 A.1 Criando um Fluxograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 ReferŒncias BibliogrÆ(cid:28)cas 116 Lista de Figuras 1 Uma expressªo Ø constru(cid:237)da com valores e operadores. . . . . . . . . . . . . . . . . . . 4 2 VariÆveis sªo como caixas que podem guardar valores. . . . . . . . . . . . . . . . . . . 5 3 As variÆveis fizz e eggs ilustradas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4 Blocos e indenta(cid:231)ªo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5 Funcionamento de um loop while. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 6 Senten(cid:231)as if e while.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 7 Partes de uma de(cid:28)ni(cid:231)ªo de fun(cid:231)ªo no Python. . . . . . . . . . . . . . . . . . . . . . . . 27 8 Fluxograma para o jogo (cid:16)O Reino do Dragªo(cid:17).. . . . . . . . . . . . . . . . . . . . . . . 32 9 Fluxograma para o jogo da forca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 10 ˝ndices em uma lista que contØm outras listas.. . . . . . . . . . . . . . . . . . . . . . . 45 11 Fluxograma para o jogo da velha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 12 Representa(cid:231)ªo do tabuleiro para o jogo da velha. . . . . . . . . . . . . . . . . . . . . . 62 13 Representa(cid:231)ªo do tabuleiro do jogo da velha para o computador. . . . . . . . . . . . . 62 14 Expansªo do passo (cid:16)Obter o movimento do computador(cid:17) no (cid:29)uxograma. . . . . . . . . 63 15 Fluxograma para o jogo Bagels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 16 Alfabeto substitu(cid:237)do por caracteres 3 casas (cid:224) frente. . . . . . . . . . . . . . . . . . . . 74 17 Resultado da execu(cid:231)ªo do c(cid:243)digo 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 18 TØcnica de anti-aliasing aplicada a uma reta. . . . . . . . . . . . . . . . . . . . . . . . 84 19 Resultado da execu(cid:231)ªo do c(cid:243)digo 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 20 Formas de colisªo poss(cid:237)veis neste programa. . . . . . . . . . . . . . . . . . . . . . . . . 92 21 Resultado da execu(cid:231)ªo do c(cid:243)digo 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 22 Execu(cid:231)ªo do programa Dodger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 23 Come(cid:231)ando seu (cid:29)uxograma com as caixas in(cid:237)cio e (cid:28)m. . . . . . . . . . . . . . . . . . . 111 24 Desenhando os trŒs primeiros passos do Fluxograma. . . . . . . . . . . . . . . . . . . . 112 25 Rami(cid:28)cando o (cid:29)uxograma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 26 Criando os la(cid:231)os no (cid:29)uxograma.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 27 Alterando o segundo comando e adicionando a nova caixa. . . . . . . . . . . . . . . . . 113 28 Incluindo as novas caixas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 29 Fluxograma completo: Incluindo a nova caixa e o novo la(cid:231)o. . . . . . . . . . . . . . . . 115 viii Lista de Tabelas 1 Opera(cid:231)ıes matemÆticas bÆsicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Comandos para caracteres especiais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3 Operadores de compara(cid:231)ªo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4 Tabela-verdade do operador and . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5 Tabela-verdade do operador or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 6 Tabela-verdade do operador not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 7 Tabela ASCII. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 8 Cores RGB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 9 Atributos dos objetos Rect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 10 Constantes de evento para as teclas pressionadas. . . . . . . . . . . . . . . . . . . . . . 109 ix Lista de C(cid:243)digos 1 Primeiro script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2 Jogo (cid:16)adivinhe o nœmero(cid:17). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 O Reino do Dragªo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4 Jogo de forca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5 Jogo da velha.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6 Bagels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 7 Criptograma de CØsar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 8 Hello World grÆ(cid:28)co. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 9 Anima(cid:231)ıes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 10 Detec(cid:231)ªo de colisıes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 11 Detec(cid:231)ªo de entrada do usuÆrio.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 12 Jogo (cid:16)Dodger(cid:17). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 x
Description: