Flying Circus Documentation

Documentos relacionados
WEBDESIGN. Professor: Paulo Marcos Trentin - paulo@paulotrentin.com.br Escola CDI de Videira

Usando o NVU Parte 2: Inserindo imagens

Programação em papel quadriculado

Alguns truques do Excel. 1- Títulos com inclinação. 2- Preencha automaticamente células em branco

Prática 19 e 20 Características de um bom jogo

MATERIAL DE APRESENTAÇÃO DO SCRATCH

Tutorial-Tabela de Preços

Como colocar uma notícia no site internet da UMMSP?

Sumário. 1. Instalando a Chave de Proteção Novas características da versão Instalando o PhotoFacil Álbum 4

Arte em ASCII. Introdução: Python

TUTORIAL COMO CRIAR E EDITAR UM VÍDEO NO WINDOWS MOVIE MAKER*

Tutorial Gerenciador de Conteúdo Site FCASA

2 Pesquisa de valores em uma lista de dados

CONFIGURAÇÃO DO PHL82 PARA BIBLIOTECÁRIOS Belo Horizonte, 22 de maio Ilário Zandonade

Criação da etiqueta para os cartões

SOLID EDGE ST3 TUTORIAL 2 CRIANDO UM DESENHO NO AMBIENTE DRAFT

Python Intermediário. terça-feira, 4 de agosto de 15

INSTALAÇÃO DO FIREFOX E JAVA PORTÁVEL CUSTOMIZADO PELO TRT DA 13ª REGIÃO

CRIANDO GRUPO DE CANAIS

Ela funciona de um jeito parecido com as mídia de RSS próprio: o sistema acessa o feed do twitter e exibe, na tela, os últimos tweets.

Configurando o Controle dos Pais no Windows Vista

TUTORIAL PMS CARD. Acesse o site:

Para criar uma nova apresentação: 1.Escolha a opção Apresentação em Branco Clique no botão Ok

Projeto de Interatividade II

OpenOffice Calc Aula 4

Tutorial ConvertXtoDVD 3

Criando uma Agenda de Reuniões

PRINCÍPIOS DE INFORMÁTICA PRÁTICA OBJETIVO 2. BASE TEÓRICA 3. SEQÜÊNCIA DA AULA. 3.1 Iniciando o PowerPoint

Criação de Módulos no VisTrails

Solução 1 - Copiar e colar a URL de convite do Ariba na barra de endereços do navegador:

PagSeguro-Python Documentation

Sistema topograph 98. Tutorial Módulo Fundiário

Como fazer um jogo usando o editor de apresentação

Intel Teach Program Essentials Course. Tutorial para wik.is

Roteiro para atualização da planilha de múltiplos usando o Excel 2007.

ÍNDICE. Tela de Configuração Dados de Etiqueta Configuração da Impressora Configuração do Papel Itens para Inserção...

Neste tópico, abordaremos a funcionalidade de segurança fornecida com o SAP Business One.

Imagens Mentais Por Alexandre Afonso

Produção de tutoriais. Patrícia Osório Pereira

Produção de tutoriais. Suellem Oliveira

Programação Gráfica Parte 2 Versão em C 2006 PUCPR Tutoria de Jogos 1º Ano

UNIPAMPA Universidade Federal do Pampa. Núcleo de Tecnologia da Informação (NTI)

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos

Pessoal, abaixo fiz um passo-a-passo de como configurar o DVR para acessar a internet, neste caso utilizei os seguintes itens:

Banco de Dados. Microsoft Access. Índice

UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA. Manual do Moodle- Sala virtual

Prática 12 Visibilidade do estado do sistema

Markes Roberto Vaccaro

Passa a passo para construir uma página pessoal - Parte 1

Crie um novo documento de mais ou menos 300x300Selecione a ferramenta Elipse tool (elipse U)

Criar fotos em 3D no Creator

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Omega Tecnologia Manual Omega Hosting

Movie Maker. Fazer download de vídeos no You Tube. Para publicar no You Tube. O Windows Movie Maker 2 torna fácil para qualquer pessoa

Como fazer a Renovação de Matrícula online no Sistema Acadêmico

Transcições de Ficheiros

4o Ano. Aula 1 Prof. Sidnéia Valero Egido

Flash PreLoader. Selecione o primeiro keyframe da layer script, clique no lo local indicado na imagem e cole o seguinte actionscript:

Nome: n.º 3º AT, BT, CT WEB Barueri, 18 / 08 / ª Postagem Disciplina: PRMD

A versão 9.1 oferece agora uma forma de replicar rapidamente ajustes de preço da UM em vários itens de várias listas de preços.

1º PASSO: CRIE NO SEU COMPUTADOR UMA PASTA PARA O SEU PROJETO 2º PASSO: CONHEÇA O MOVIE MAKER

O QUE É A CENTRAL DE JOGOS?

WordPress Instruções de integração com PayPal

Esse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5.

SECRETARIA DE ESTADO DA EDUCAÇÃO DE SANTA CATARINA PONTO SECULLUM 4 SISTEMA DE CONTROLE DE PONTO MANUAL PARA A GERÊNCIA DE GESTÃO DE PESSOAS

CURSO BÁSICO DE CRIAÇÃO DE SITES MÓDULO 2 AULA 1

PROGRAMAÇÃO PARA INTERNET RICA INTRODUÇÃO AO ASP.NET

Banner Flutuante. Dreamweaver

Ajustes para o sistema de web conferências Adobe Connect

OFICINA DE POWER POINT

HOW TO Como criar e liberar/bloquear categorias personalizadas no AWCA

1. MANUAL DO REVENDEDOR - BILLING NETPBX

Capítulo 1. Guia de Início Rápido. Você vai aprender a programar a sua primeira reunião em 5 passos fáceis.

Tuplas e Dicionários. Vanessa Braganholo vanessa@ic.uff.br

PORTAL WISSEN OPERADORA 2011 GUIA PRÁTICO OPERACIONAL. Portal Wissen

Projeto ECA na Escola - Plataforma de Educação à Distância

MAPEAMENTO DIGITAL DA REDE DE ARTICULAÇÃO INTERSETORIAL PARA PROMOÇÃO DA SAÚDE PARTE 2 MOOTIRO MAPS

2 Não possuo o institucional. Como devo proceder? Resposta: Dirija-se ao RH do câmpus e solicite a criação do seu institucional.

Sistemas de Apoio à Decisão

Criação de Aplicativos de redes sociais para Autenticação

Criar um formulário do tipo Diálogo modal ; Alterar a cor de fundo de um formulário; Inserir botões de comando e caixas de texto;

Tutorial de Carga e Atualização Modelo ERP

Conectar diferentes pesquisas na internet por um menu

Slipstream: Adicionando um Service Pack a um CD bootable de Windows XP ou 2000

MANUAL DO OFICIAL DE JUSTIÇA

Índice Static Text (texto estático) Dynamic Text (Texto Dinâmico) Input Text Exercício...8

Como Fazer um Vídeo no Windows Live Movie Maker

7. Gestão de ficheiros em X Window O Konqueror

Recursos Educativos Digitais. Oficina de formação. Formadora: Anabela Triguinho

Projudi Módulo de Correição. Tutorial Juiz Corregedor

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

CURSO BÁSICO DE CRIAÇÃO DE SITES MÓDULO 2 AULA 3

Pais e educadores: Ativem o Controlo Parental no Windows

Manual de Montagem REVISÃO

Manual de Publicação Wordpress

Configurações das notificações do sistema. Mike McBride Tradução: Lisiane Sztoltz

Aula de JavaScript 05/03/10

DIVISÃO DE PATRIMÔNIO

OLÁ! Eldes saullo. Neste GUIA VISUAL você vai descobrir a maneira mais fácil de formatar seu livro e publicá-lo na Amazon e no Kindle.

1 o º ciclo. Índice TUTORIAL

Transcrição:

Flying Circus Documentation Release 0.1.0 Carlo E. T. Oliveira June 27, 2016

Contents 1 Sumário 3 1.1 Como brincar com os desafios...................................... 3 1.2 Criando uma Câmara com Constantes.................................. 3 1.3 Criando uma Câmara com Listas.................................... 4 1.4 Criando uma Câmara com Dicionário.................................. 5 1.5 Uma Câmara Instável.......................................... 7 1.6 Uma Câmara Muito Instável....................................... 8 1.7 Uma Câmara Extremamente Instável.................................. 9 1.8 Primeiro Cenário do Jogo........................................ 11 1.9 Montando a Cena com Ladrilhos.................................... 11 1.10 Cena com Ladrilhos Girados....................................... 14 1.11 Cena com Mais Ladrilhos Girados.................................... 17 1.12 Cena com Muitos Ladrilhos Girados................................... 19 1.13 Colocando Personagens......................................... 21 1.14 Colocando Mais Personagens...................................... 22 1.15 Animando Personagens......................................... 24 1.16 Movimentando Personagens....................................... 25 2 Indices e Tabelas 29 i

ii

Aqui vamos ter uma introdução rápida de como programar jogos para Web usando Python. Na verdade vamos usar o Brython que é o Python que funciona dentro de um navegador web como o Firefox. Contents 1

2 Contents

CHAPTER 1 Sumário 1.1 Como brincar com os desafios Entre na plataforma <nome do seu projeto>.is-by.us. Clique no projeto determinado pelo instrutor. Vamos começar importando o circus para criar um jogo. Você faz a sua implementação e depois invoca o circus para conferir o resultado. from _spy.circus.circus import circus # faça aqui a sua implementação do desafio if name == " main ": #circus(<ponha aqui o número do desafio e descomente a linha>, <parâmetro indicado>) Note: Procure ser cooperativo com a sua equipe. 1.2 Criando uma Câmara com Constantes Uma constante é um valor que não se modifica ao longo de um programa. Em Python a constante é escrita com todas as letras maiúsculas como no nome TOPO_ESQUERDA abaixo. Use os ladrilhos nomeados de A a L para montar a câmara mostrada à direita. 3

Flying Circus Documentation, Release 0.1.0 from _spy.circus.circus import circus TOPO_ESQUERDA = "AN" TOPO_DIREITA = "AN" TOPO_CENTRO = "AN" MEIO_ESQUERDA, CENTRO, MEIO_DIREITA = "AN", "AN", "AN" FUNDO_ESQUERDA, FUNDO_CENTRO, FUNDO_DIREITA = "AN", "AN", "AN" # O comando abaixo voce vai entender no próximo desafio circus(1, [[TOPO_ESQUERDA, TOPO_CENTRO, TOPO_DIREITA], [MEIO_ESQUERDA, CENTRO, MEIO_DIREITA], [FUNDO_ESQUERDA, FUNDO_CENTRO, FUNDO_DIREITA]]) Note: No texto AN a primeira letra determina o ladriho e a segunda se está girada para Norte, Leste, Sul ou Oeste. 1.3 Criando uma Câmara com Listas Uma lista é um conjunto de coisas, pode ser um conjunto de números, letras, palavras ou qualquer outro objeto. Em Python a lista é escrita assim: [<uma coisa>, <outra coisa>]. Use os ladrilhos nomeados de A a L para montar a câmara mostrada abaixo, consulte o exercício anterior. from _spy.circus.circus import circus MASMORRA = [[ "AN", "AN", "AN", "AN", "AN", "AN"], [ "AN", "AN", "AN", "AN", "AN", "AN"], [ "AN", "AN", "AN", "AN", "AN", "AN"], 4 Chapter 1. Sumário

circus(2, MASMORRA) [ "AN", "AN", "AN", "AN", "AN", "AN"], [ "AN", "AN", "AN", "AN", "AN", "AN"] ] Note: No texto AN a primeira letra determina o ladriho e a segunda se está girada para Norte, Leste, Sul ou Oeste. 1.4 Criando uma Câmara com Dicionário Uma lista é um conjunto de coisas, pode ser um conjunto de números, letras, palavras ou qualquer outro objeto. Em Python a lista é escrita assim: {<umnome: umvalo>, <outronome: outrovalor>}. Use os ladrilhos nomeados de A a L para montar a câmara mostrada abaixo, consulte o exercício A. Descubra quais posições os nomes misteriosos indicam. 1.4. Criando uma Câmara com Dicionário 5

from _spy.circus.circus import circus MASMORRA = {'Cahuitz': 'AN', 'Cauha': 'AN', 'Coycol': 'AN', 'Huatlya': 'AN', 'Micpe': 'AN', 'Nenea': 'AN', 'Pallotl': 'AN', 'Tetlah': 'AN', 'Zitllo': 'AN'} circus(3, MASMORRA) Note: No texto AN a primeira letra determina o ladrilho e a segunda se está girada para Norte, Leste, Sul ou Oeste. 6 Chapter 1. Sumário

1.5 Uma Câmara Instável Esta câmara embaralha as posições se os ladrilhos não forem colocados corretamente. Você terá que usar uma estratégia para montar os ladrilhos antes que eles embaralhem. Use os ladrilhos nomeados de A a L para montar a câmara mostrada abaixo, consulte o exercício A. Descubra quais posições os nomes misteriosos indicam. from _spy.circus.circus import circus MASMORRA = {'Cahuitz': 'AN', 'Cauha': 'AN', 'Coycol': 'AN', 'Huatlya': 'AN', 'Micpe': 'AN', 'Nenea': 'AN', 'Pallotl': 'AN', 'Tetlah': 'AN', 'Zitllo': 'AN'} 1.5. Uma Câmara Instável 7

circus(4, MASMORRA) Note: No texto AN a primeira letra determina o ladrilho e a segunda se está girada para Norte, Leste, Sul ou Oeste. 1.6 Uma Câmara Muito Instável Esta câmara embaralha as posições e as direçoes se os ladrilhos não forem colocados corretamente. Você terá que usar uma estratégia para montar os ladrilhos antes que eles embaralhem. Use os ladrilhos nomeados de A a L para montar a câmara mostrada abaixo, consulte o exercício A. Descubra quais posições os nomes misteriosos indicam. 8 Chapter 1. Sumário

from _spy.circus.circus import circus MASMORRA = {'Cahuitz': 'AN', 'Cauha': 'AN', 'Coycol': 'AN', 'Huatlya': 'AN', 'Micpe': 'AN', 'Nenea': 'AN', 'Pallotl': 'AN', 'Tetlah': 'AN', 'Zitllo': 'AN'} circus(5, MASMORRA) Note: No texto AN a primeira letra determina o ladrilho e a segunda se está girada para Norte, Leste, Sul ou Oeste. 1.7 Uma Câmara Extremamente Instável Esta câmara embaralha as posições e as direções dependem das posições. Se os ladrilhos não forem colocados corretamente tudo será embaralhado. Você terá que usar uma estratégia para montar os ladrilhos antes que eles embaralhem. Use os ladrilhos nomeados de A a L para montar a câmara mostrada abaixo, consulte o exercício A. Descubra quais posições os nomes misteriosos indicam. 1.7. Uma Câmara Extremamente Instável 9

from _spy.circus.circus import circus MASMORRA = {'Cahuitz': 'AN', 'Cauha': 'AN', 'Coycol': 'AN', 'Huatlya': 'AN', 'Micpe': 'AN', 'Nenea': 'AN', 'Pallotl': 'AN', 'Tetlah': 'AN', 'Zitllo': 'AN'} circus(6, MASMORRA) Note: No texto AN a primeira letra determina o ladrilho e a segunda se está girada para Norte, Leste, Sul ou Oeste. 10 Chapter 1. Sumário

1.8 Primeiro Cenário do Jogo Vamos começar importando o módulo Circus para criar um jogo baseado na biblioteca Phaser. Vamos criar uma organização em Python chamada class que vai ter duas operações preload e create. O objetivo é mostrar a imagem abaixo: from _spy.circus.game import Circus class Jogo(Circus): """Essa é a classe Jogo que recebe os poderes da classe Circus de poder criar um jogo""" def preload(self): """Aqui no preload carregamos os recursos usados no jogo, neste caso a imagem masmorra""" self.image("fundo", "http://<descubra um jeito de achar a url que vai ser posta aqui>") def create(self): """Aqui colocamos a imagem masmorra na tela do jogo""" self.sprite("fundo") if name == " main ": Jogo() Note: Ainda é um programa bem simples. 1.9 Montando a Cena com Ladrilhos Na maior parte dos jogos o cenário tem que ser montado a partir de uma folha de ladrilhos. As folhas de ladrilho são numeradas de 0 a n da esquerda para direita de cima para baixo. Esta é a folha de ladrilhos: 1.8. Primeiro Cenário do Jogo 11

12 Chapter 1. Sumário

Procure reproduzir este labirinto: from _spy.circus.game import Circus class Jogo(Circus): """Essa é a classe Jogo que recebe os poderes da classe Circus de poder criar um jogo""" def preload(self): """Aqui no preload carregamos os recursos usados no jogo, neste caso a folha de ladrilhos""" self.spritesheet("ladrilho", "http://<advinha!>", 128, 128, 12) def create(self): """Aqui colocamos cada ladrilho indicando a posição na tela e depois selecionando o ladrilho" um_ladrilho = self.sprite("ladrilho", 0, 0) um_ladrilho.frame = 5 # este número seleciona o ladrilho que vai ser colocado 1.9. Montando a Cena com Ladrilhos 13

um_ladrilho = self.sprite("ladrilho", 0, 0) um_ladrilho.frame = 5 # troque o ladrilho! # Coloque mais dois outros ladrilhos # mude a posição do ladrilho if name == " main ": Jogo() Note: Ainda é um programa bem simples. 1.10 Cena com Ladrilhos Girados Vamos montar uma outra masmorrra, mas que agora requer que rotacionemos os ladrilhos. Veja os comando angle e anchor no código. A folha de ladrilhos continua esta: 14 Chapter 1. Sumário

Procure reproduzir este labirinto: 1.10. Cena com Ladrilhos Girados 15

from _spy.circus.game import Circus class Jogo(Circus): """Essa é a classe Jogo que recebe os poderes da classe Circus necessários para criar um jogo""" def preload(self): """Aqui no preload carregamos os recursos usados no jogo, neste caso a folha de ladrilhos""" self.spritesheet("ladrilho", "http://<advinha!>", 128, 128, 12) def create(self): """Aqui colocamos cada ladrilho indicando a posição na tela e depois selecionando o ladrilho" um_ladrilho = self.sprite("ladrilho", 0, 0) um_ladrilho.frame = 5 # este número seleciona o ladrilho que vai ser colocado um_ladrilho.anchor.setto(0.5, 0.5) # este comando faz com que a rotação seja no centro do la 16 Chapter 1. Sumário

um_ladrilho.angle = 90 # está é a rotação em graus do ladrilho um_ladrilho = self.sprite("ladrilho", 0, 0) # mude a posição do ladrilho um_ladrilho.frame = 5 # troque o ladrilho! um_ladrilho.anchor.setto(0.5, 0.5) um_ladrilho.angle = 90 # troque o ângulo! # Coloque aqui o resto dos ladrilhos if name == " main ": Jogo() Note: Observe que ao colocar a âncora no centro do ladrilho, este centro também servirá para posicionar o ladrilho. Ajuste as cordenadas para que tudo fique correto. 1.11 Cena com Mais Ladrilhos Girados Vamos montar uma outra masmorrra, um pouco maior. Em vez de copiar várias vezes o código, vamos usar uma lista de tuplas e o comando for A folha de ladrilhos continua esta: 1.11. Cena com Mais Ladrilhos Girados 17

Procure reproduzir este labirinto: from _spy.circus.game import Circus class Jogo(Circus): """Essa é a classe Jogo que recebe os poderes da classe Circus necessários para criar um jogo""" MOSAICO = [ [(5, 90), (5, 90), (5, 90), (5, 90)], [(5, 90), (5, 90), (5, 90), (5, 90)], [(5, 90), (5, 90), (5, 90), (5, 90)], [(5, 90), (5, 90), (5, 90), (5, 90)] ] # esta é uma lista de listas. Cada lista é uma linha e cada tupla dá o ladrilho (5) e o ângulo 18 Chapter 1. Sumário

def preload(self): """Aqui no preload carregamos os recursos usados no jogo, neste caso a folha de ladrilhos""" self.spritesheet("ladrilho", "http://<advinha!>", 128, 128, 12) def create(self): """Aqui colocamos um for que varre cada linha e cada coluna da matriz""" azulejo = self.mosaico for y in range(4): for x in range(4): frame, angle = self.mosaico[y][x] # este comando desmembra a tupla em duas variáveis, um_ladrilho = self.sprite("ladrilho", 64+x*128, 64+y*128) # cria e muda a posição do l um_ladrilho.frame = frame um_ladrilho.anchor.setto(0.5, 0.5) um_ladrilho.angle = angle if name == " main ": Jogo() Note: Observe que ao colocar a âncora no centro do ladrilho, este centro também servirá para posicionar o ladrilho. Ajuste as cordenadas para que tudo fique correto. 1.12 Cena com Muitos Ladrilhos Girados Vamos montar a masmorra original, bem maior. Em vez de copiar várias vezes o código, vamos usar um dicionário de tuplas e o comando for A folha de ladrilhos continua esta: 1.12. Cena com Muitos Ladrilhos Girados 19

Procure reproduzir este labirinto: from _spy.circus.game import Circus A, B, C, D, E, F, G = 0, 128, 256, 256+128, 512, 512+128, 512+256 class Jogo(Circus): """Essa é a classe Jogo que recebe os poderes da classe Circus necessários para criar um jogo""" MOSAICO = { (A, A): (5, 90), (B, A): (5, 90), (C, A):(5, 90), (D, A):(5, 90), (E, A):(5, 90), (F, A):(5, 90), (A, B): (5, 90), (B, B): (5, 90), (C, B):(5, 90), (D, B):(5, 90), (E, B):(5, 90), (F, B):(5, 90), (C, C): (5, 90), (B, C): (5, 90), (C, C):(5, 90), (D, C):(5, 90), (E, C):(5, 90), (F, C):(5, 90), (D, D): (5, 90), (B, D): (5, 90), (C, D):(5, 90), (D, D):(5, 90), (E, D):(5, 90), (F, D):(5, 90), 20 Chapter 1. Sumário

(E, E): (5, 90), (B, E): (5, 90), (C, E):(5, 90), (D, E):(5, 90), (E, E):(5, 90), (F, E):(5, 90), } # este é um dicionário de tuplas. Cada chave é a posição do ladrilho e cada tupla dá o ladrilho def preload(self): """Aqui no preload carregamos os recursos usados no jogo, neste caso a folha de ladrilhos""" self.spritesheet("ladrilho", "http://<advinha!>", 128, 128, 12) def create(self): """Aqui colocamos cada ladrilho indicando a posição na tela e depois selecionando o ladrilho" for (x, y), (frame, angle) in self.mosaico.items(): # coloque o resto aqui if name == " main ": Jogo() Note: Observe que ao colocar a âncora no centro do ladrilho, este centro também servirá para posicionar o ladrilho. Ajuste as cordenadas para que tudo fique correto. 1.13 Colocando Personagens Vamos criar uma outra classe para um personagem monstro. O monstro vai ser criado na invocação init do Jogo. Use a folha de ladrilhos para programar os monstros: 1.13. Colocando Personagens 21

from _spy.circus.game import Circus, Actor class Jogo(Circus): """Essa é a classe Jogo que recebe os poderes da classe Circus de poder criar um jogo""" def init (self): super(). init () # super é invocado aqui para preservar os poderes recebidos do Circus self.ladrilho_monstro = "monstro" self.monstro = Monstro(self.ladrilho_monstro, 0, 0, 0) def preload(self): """Aqui no preload carregamos a imagem masmorra e a folha de ladrilhos dos monstros""" self.image("fundo", "http://<descubra um jeito de achar a url que vai ser posta aqui>") self.spritesheet(self.ladrilho_monstro, "http://<advinha!>", 64, 63, 16*12) def create(self): """Aqui colocamos a imagem masmorra na tela do jogo""" self.sprite("fundo") class Monstro(Actor): """Essa é a classe Monstro que controla os personagens do jogo""" def init (self, nome, frame, x, y): super(). init () self.nome, self.frame, self.x, self.y = nome, frame, x, y def create(self): """Aqui colocamos o sprite do monstro e selecionamos o frame que o representa""" self.monstro = "<troque isto pela criação do sprite, use self.nome, self.x e self.y>" "escolha aqui o frame e use self.frame" self.monstro.anchor.setto(0.5, 0.5) if name == " main ": Jogo() 1.14 Colocando Mais Personagens Vamos criar outros monstros. A operação [f(x) for x in <Coleção>] gera uma lista varrendo a Coleção dada e executando a função f(x) para cada x na Coleção. 22 Chapter 1. Sumário

from _spy.circus.game import Circus, Actor MONSTROS = [(0, 0, 0), (0, 0, 0), (0, 0, 0)] class Jogo(Circus): """Essa é a classe Jogo que recebe os poderes da classe Circus de poder criar um jogo""" def init (self): super(). init () # super é invocado aqui para preservar os poderes recebidos do Circus self.ladrilho_monstro = "monstro" self.monstro = [Monstro(self.ladrilho_monstro, frame, x, y) for frame, x, y in MONSTROS] def preload(self): """Aqui no preload carregamos a imagem masmorra e a folha de ladrilhos dos monstros""" self.image("fundo", "http://<descubra um jeito de achar a url que vai ser posta aqui>") self.spritesheet(self.ladrilho_monstro, "http://<advinha!>", 64, 63, 16*12) def create(self): """Aqui colocamos a imagem masmorra na tela do jogo""" self.sprite("fundo") class Monstro(Actor): """Essa é a classe Monstro que controla os personagens do jogo""" def init (self, nome, frame, x, y): super(). init () 1.14. Colocando Mais Personagens 23

self.nome, self.frame, self.x, self.y = nome, frame, x, y def create(self): """Aqui colocamos o sprite do monstro e selecionamos o frame que o representa""" self.monstro = "<troque isto pela criação do sprite, use self.nome, self.x e self.y>" "escolha aqui o frame e use self.frame" self.monstro.anchor.setto(0.5, 0.5) if name == " main ": Jogo() 1.15 Animando Personagens Vamos criar uma animação para o monstro. Use os ladrilhos onde o monstro apresenta as diversas posições: from _spy.circus.game import Circus, Actor class Jogo(Circus): """Essa é a classe Jogo que recebe os poderes da classe Circus de poder criar um jogo""" def init (self): super(). init () # super é invocado aqui para preservar os poderes recebidos do Circus self.ladrilho_monstro = "monstro" self.monstro = Monstro(self.ladrilho_monstro, 0, 0, 0) 24 Chapter 1. Sumário

def preload(self): """Aqui no preload carregamos a imagem masmorra e a folha de ladrilhos dos monstros""" self.image("fundo", "http://<descubra um jeito de achar a url que vai ser posta aqui>") self.spritesheet(self.ladrilho_monstro, "http://<advinha!>", 64, 63, 16*12) def create(self): """Aqui colocamos a imagem masmorra na tela do jogo""" self.sprite("fundo") class Monstro(Actor): """Essa é a classe Monstro que controla os personagens do jogo""" def init (self, nome, frame, x, y): super(). init () self.nome, self.frame, self.x, self.y = nome, frame, x, y def create(self): """Aqui colocamos o sprite e o frame do monstro e acrescentamos a animação""" self.monstro = "<troque isto pela criação do sprite, use self.nome, self.x e self.y>" "escolha aqui o frame e use self.frame" self.monstro.anchor.setto(0.5, 0.5) self.monstro.animations.add('mon', [self.frame, self.frame+1, self.frame+2,], 4, True) self.monstro.play('mon') if name == " main ": Jogo() 1.16 Movimentando Personagens Vamos movimentar monstros. Para isso é preciso acrescentar a função update na classe Monstro. 1.16. Movimentando Personagens 25

from _spy.circus.game import Circus, Actor MONSTROS = [(0, 0, 0), (0, 0, 0), (0, 0, 0)] class Jogo(Circus): """Essa é a classe Jogo que recebe os poderes da classe Circus de poder criar um jogo""" def init (self): super(). init () # super é invocado aqui para preservar os poderes recebidos do Circus self.ladrilho_monstro = "monstro" self.monstro = [Monstro(self.ladrilho_monstro, frame, x, y) for frame, x, y in MONSTROS] def preload(self): """Aqui no preload carregamos a imagem masmorra e a folha de ladrilhos dos monstros""" self.image("fundo", "http://<descubra um jeito de achar a url que vai ser posta aqui>") self.spritesheet(self.ladrilho_monstro, "http://<advinha!>", 64, 63, 16*12) def create(self): """Aqui colocamos a imagem masmorra na tela do jogo""" self.sprite("fundo") class Monstro(Actor): """Essa é a classe Monstro que controla os personagens do jogo""" def init (self, nome, frame, x, y): super(). init () 26 Chapter 1. Sumário

self.nome, self.frame, self.x, self.y = nome, frame, x, y self.first = True self.direction = 0 def create(self): """Aqui colocamos o sprite do monstro e selecionamos o frame que o representa""" self.monstro = "<troque isto pela criação do sprite, use self.nome, self.x e self.y>" "escolha aqui o frame e use self.frame" self.monstro.anchor.setto(0.5, 0.5) "ponha aqui a animação" self.enable(self.monstro) def update(self): player = self.monstro def redirect(): self.first = False self.direction = d = int(random() * 8.0) x, y = DIR[d] return x * 150, y * 150 player.angle = (self.direction*45+270) % 360 if int(random() + 0.02) or self.first: player.body.velocity.x, player.body.velocity.y = redirect() if name == " main ": Jogo() 1.16. Movimentando Personagens 27

28 Chapter 1. Sumário

CHAPTER 2 Indices e Tabelas genindex modindex search 29