Aprenda a Programar com Minecraft T r a n s fo r m e s e u m u n d o c o m o poder do Python Craig Richardson novatec Copyright © 2015 by Craig Richardson. Title of English-language original: Learn to Program with Minecraft, ISBN 978-1-59327-670-6, published by No Starch Press. Portuguese-language edition copyright © 2016 by Novatec Editora Ltda. All rights reserved. Copyright © 2015 por by Craig Richardson. Título original em Inglês: Learn to Program with Minecraft, ISBN 978-1-59327-670-6, publicado pela No Starch Press. Edição em Português copyright © 2016 pela Novatec Editora Ltda. Todos os direitos reservados. © Novatec Editora Ltda. 2016. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates IG20160408 Assistente editorial: Priscila A. Yoshimatsu Tradução: Patrícia Gavazzi Revisão gramatical: Solange Martins e Smirna Cavalheiro Revisão técnica: Rafael Milléo Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-493-9 Histórico de impressões: Abril/2016 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 E-mail: [email protected] Site: novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec IG20160411 SUMÁRIO AgradecimentosXIII IntroduçãoXV Por que aprender a programar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVI Por que Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVI Por que Minecraft? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVI O que o livro aborda? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVII Fontes online . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIX Vamos começar a aventura! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIX 1 Instalações e configurações: preparando-se para a aventura 21 Configurando o seu PC Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalando o Minecraft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalando o Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalando o Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalando a API do Minecraft Python e o Spigot . . . . . . . . . . . . . . . . . . . . . . Executando o Spigot e criando um jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . Recomeçando um novo mundo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jogando offline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alterando para o Modo de Sobrevivência . . . . . . . . . . . . . . . . . . . . . . . . . . Configurando o seu Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalando o Minecraft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalando o Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalando o Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalando a API do Minecraft Python e o Spigot . . . . . . . . . . . . . . . . . . . . . . Executando o Spigot e criando um jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . Recomeçando um novo mundo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jogando offline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alterando para o Modo de Sobrevivência . . . . . . . . . . . . . . . . . . . . . . . . . . Configurando o seu Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conhecendo o IDLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conhecendo o Shell Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diga olá ao editor de texto do IDLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 22 23 24 26 28 30 31 32 33 33 35 36 37 39 40 41 41 42 44 44 45 Quando usar o Shell Python ou o editor de texto . . . . . . . . . . . . . . . . . . . . . 47 Os Prompts utilizados neste livro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Testando a configuração do Minecraft Python . . . . . . . . . . . . . . . . . . . . . . . . . 48 2 Teletransportando com variáveis O que é um programa? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Armazenando dados em variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A estrutura das linguagens de programação . . . . . . . . . . . . . . . . . . . . . . . . Regras de sintaxe para variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mudando os valores das variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Números inteiros (Integers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Números de ponto flutuante (floats) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reduzindo a velocidade de teletransporte com o módulo time . . . . . . . . . . . . . . Depuração (debugging) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 51 52 53 55 55 56 63 65 69 72 3 Construindo rápido e viajando longe com a matemática73 Expressões e declarações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Subtração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando operadores matemáticos em argumentos . . . . . . . . . . . . . . . . . . . . . Multiplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Divisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Potenciação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parênteses e ordem das operações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Truques úteis de matemática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores abreviados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Brincando com números aleatórios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Comunicando-se com Strings 73 74 75 79 80 85 86 89 89 90 90 91 93 95 O que são strings? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 A função print() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 A função input() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Concatenando strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Convertendo números em strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Concatenando números inteiros e decimais . . . . . . . . . . . . . . . . . . . . . . . . 103 Convertendo strings em números inteiros com int() . . . . . . . . . . . . . . . . . . . . . 104 Recuperando-se dos erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107 O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 VIII Sumário 5 Descobrindo o que é verdadeiro (true) e falso (false) com booleanos 113 Básico sobre o tipo booleano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Concatenando o tipo booleano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Operadores de comparação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Igual a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Diferente de . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Maior que e menor que . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Maior ou igual a e Menor ou igual a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 E (and) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Ou (or) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Negação (not) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Ordem dos operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Meu número está entre dois outros? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 6 Fazendo minigames com declarações if (condicionais) 137 Usando declarações if (se) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Declarações else (senão) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Declarações elif (senão-se) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Encadeando declarações elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Declarações if aninhadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando declarações if para testar diversos valores . . . . . . . . . . . . . . . . . . . . . Operadores booleanos e declarações if . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 141 144 147 150 152 156 159 7 Festas dançantes e desfiles de flores com loops while161 Um simples loop while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Controlando loops com uma variável de contagem . . . . . . . . . . . . . . . . . . . . Loops while infinitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Condições extravagantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores booleanos e loops while . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verificando um intervalo de valores com loops while . . . . . . . . . . . . . . . . . . Declarações if aninhadas e loops while . . . . . . . . . . . . . . . . . . . . . . . . . . . Interrompendo um loop while com break . . . . . . . . . . . . . . . . . . . . . . . . . . . . Declarações while-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Funções: obtendo superpoderes 161 166 169 170 174 174 177 180 182 185 187 Definindo as suas próprias funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Chamando uma função . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Funções recebem argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Sumário IX Refatorando um programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comentários com Docstrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quebras de linhas em argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Valores de retorno da função . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando declarações if e loops while em funções . . . . . . . . . . . . . . . . . . . . . . Declarações if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Loops while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variáveis locais e globais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Acertando blocos com listas e dicionários Usando listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Acessando um elemento de uma lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mudando um elemento de uma lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Manipulando listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adição de um elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inserção de um elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Remoção de um elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tratando strings como listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Definindo variáveis com tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Retornando uma tupla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Outras funcionalidades das listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comprimento da lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Escolhendo um elemento aleatoriamente . . . . . . . . . . . . . . . . . . . . . . . . . . Copiando uma lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Elementos e estruturas if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dicionários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Definindo um dicionário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Acessando elementos em dicionários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mudando e adicionando um elemento em um dicionário . . . . . . . . . . . . . . Removendo elementos de dicionários . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Minecraft fazendo mágica com loops for Um simples loop for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A função range() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Brincando com range() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Outras funções das listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Percorrendo um dicionário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Loops for-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interrompendo um loop for-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Loops for aninhados e listas multidimensionais . . . . . . . . . . . . . . . . . . . . . . . . Pensando em duas dimensões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Acessando valores em listas 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gerando listas 2Ds com loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X Sumário 192 195 196 196 200 201 204 206 211 213 214 215 215 218 218 219 219 222 223 223 226 227 227 230 232 234 237 237 238 241 241 244 245 246 248 251 252 256 258 259 261 261 266 269 Pensando em três dimensões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Saída de listas 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Acessando valores em listas 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 273 278 285 11 Salvando e carregando construções com arquivos e módulos 287 Usando arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abrindo um arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Escrevendo e salvando um arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lendo um arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lendo uma linha de um arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parte 1: escrevendo a lista de tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parte 2: exibindo a lista de tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O módulo pickle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Importando o pickle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Importando uma função com a cláusula from . . . . . . . . . . . . . . . . . . . . . . Importando todas as funções com * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fornecendo um apelido ao módulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parte 1: salvando a construção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Parte 2: carregando a construção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Armazenando grande quantidade de dados com o módulo shelve . . . . . . . . . Abrindo um arquivo com shelve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adicionando, modificando e acessando elementos com shelve . . . . . . . . . . Parte 1: salvando uma estrutura em uma coleção . . . . . . . . . . . . . . . . . . . . Parte 2: carregando uma estrutura de uma coleção . . . . . . . . . . . . . . . . . . Instalando novos módulos com pip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando pip no Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando pip em um Mac ou em um Raspberry Pi . . . . . . . . . . . . . . . . . . . . Usando um módulo do pip: Flask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 288 290 290 291 292 294 295 296 296 297 298 299 300 304 305 306 306 307 308 312 313 314 314 316 12 Dominando a programação orientada a objetos319 Básico sobre programação orientada a objetos . . . . . . . . . . . . . . . . . . . . . . . Criando uma classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Criando um objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Acessando atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Entendendo os métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Retornando valores como métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Criando múltiplos objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Atributos de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Entendendo a herança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Herdando uma classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adicionando novos métodos a subclasses . . . . . . . . . . . . . . . . . . . . . . . . . Alterando métodos e atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 320 321 322 324 330 333 336 338 339 340 343 Sumário XI O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Posfácio351 Guia de IDs dos blocos 353 FONTES359 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Se você estiver usando Windows 7, 8 ou 10 . . . . . . . . . . . . . . . . . . . . . . . . . . Se estiver usando OS X 10.10 ou versão posterior . . . . . . . . . . . . . . . . . . . . . Se estiver usando um Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XII Sumário 359 359 359 360