Bem Vindos ao Circo Voador da Programação Python

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.

_images/PPFC.jpg

Manual

Vitollino - Classes Principais

See also

Auxiliares Vitollino - Classes Auxiliares

Jogo

class _spy.vitollino.vitollino.Jogo[source]

Bases: object

algo

Acessa a classe Elemento

cena

Acessa a classe Cena

nota

Acessa a classe Texto

quarto

Acessa a classe Sala

sala

Acessa a classe Salao

Musica

class _spy.vitollino.vitollino.Musica(sound, loop=True, autoplay=True, sound_type='audio/mpeg')[source]

Bases: object

Inventario

class _spy.vitollino.vitollino.Inventario(tela=<browser.BrythonMock object>)[source]

Bases: object

Os objetos que estão de posse do jogador.

Parameters:tela – Div do HTML onde o inventário será anexado
GID = '00000000000000000000'
bota(nome_item, item='', acao=None)[source]

Os objetos que estão de posse do jogador.

>>> inv.bota("uma_coisa")
>>> "uma_coisa" in inv.inventario
True
Parameters:
  • nome_item – uma string com o nome do item, ele será criado e colocado no inventário
  • item – URL da imagem do item nomeado por nome_item
  • acao – ação associada com o item nomeado quando ele é clicado
desmonta(_=0)[source]
inicia()[source]
monta(_=0)[source]
mostra(_=0)[source]
score(casa, carta, move, ponto, valor)[source]
static send(operation, data, action=<function Inventario.<lambda>>, method='POST')[source]
tira(nome_item)[source]

Cena

class _spy.vitollino.vitollino.Cena(img='', esquerda=<CenaNula>, direita=<CenaNula>, meio=<CenaNula>, vai=None, nome='', xy=(0, 0), score={}, **kwargs)[source]

Bases: object

Use para construir uma cena.

from _spy.vitollino import Cena

cena_esq = Cena(img="esq.jpg")
cena_mei = Cena(img="mei.jpg", cena_esq)
cena_mei.vai()
Parameters:
  • img (str) – URL da imagem
  • esquerda (Cena) – Cena que está à esquerda desta
  • direita (Cena) – Cena que está à direita desta
  • meio (Cena) – Cena que está à frente desta
  • vai – Função a ser chamada no lugar da self.vai nativa
bota(nome_item)[source]
static c(**cenas)[source]
portal(esquerda=None, direita=None, meio=None, **kwargs)[source]
static q(n=<CenaNula>, l=<CenaNula>, s=<CenaNula>, o=<CenaNula>, nome='', **kwargs)[source]
static s(n=<CenaNula>, l=<CenaNula>, s=<CenaNula>, o=<CenaNula>, nome='', **kwargs)[source]
sai(saida)[source]
score(**kwargs)[source]
tira(item)[source]
vai(ev=<NoEvent>)[source]
vai_direita(_=0)[source]
vai_esquerda(_=0)[source]
vai_meio(_=0)[source]

Sala

class _spy.vitollino.vitollino.Sala(n=<CenaNula>, l=<CenaNula>, s=<CenaNula>, o=<CenaNula>, nome='', **kwargs)[source]

Bases: object

static c(**cenas)[source]
leste
norte
oeste
p()[source]
sul

Salao

class _spy.vitollino.vitollino.Salao(n=<CenaNula>, l=<CenaNula>, s=<CenaNula>, o=<CenaNula>, nome='', **kwargs)[source]

Bases: _spy.vitollino.vitollino.Sala

static c(**cenas)[source]
leste
norte
oeste
p()[source]
sul

Elemento

class _spy.vitollino.vitollino.Elemento(img='', vai=None, style={}, tit='', alt='', cena=Inventario, score={}, **kwargs)[source]

Bases: object

Um objeto de interação que é representado por uma imagem em uma cena.

papel = Elemento(
img=”papel.png”, tit=”caderno de notas”, vai=pega_papel, style=dict(left=350, top=550, width=60))
Parameters:
  • img – URL de uma imagem
  • vai – função executada quando se clica no objeto
  • style – dicionário com dimensões do objeto {“left”: …, “top”: …, width: …, height: …}
  • tit – Texto que aparece quando se passa o mouse sobre o objeto
  • alt – Texto para leitores de tela
  • cena – cena alternativa onde o objeto vai ser colocado
  • score – determina o score para este elemento
  • kwargs – lista de parametros nome=URL que geram elementos com este nome e a dada imagem
classmethod c(**kwargs)[source]
entra(cena, style={})[source]
limbo = <browser.BrythonMock object>
score(**kwargs)[source]

Portal

class _spy.vitollino.vitollino.Portal(cena=None, debug_=False, **kwargs)[source]

Bases: object

L = {'left': '90%', 'min-height': '60%', 'position': 'absolute', 'top': '20%', 'width': '10%', 'margin': '0%', 'cursor': 'e-resize'}
N = {'left': '20%', 'min-height': '20%', 'position': 'absolute', 'top': 0, 'width': '60%', 'margin': '0%', 'cursor': 'n-resize'}
O = {'left': 0, 'min-height': '60%', 'position': 'absolute', 'top': '20%', 'width': '10%', 'margin': '0%', 'cursor': 'w-resize'}
PORTAIS = {'L': {'left': '90%', 'min-height': '60%', 'position': 'absolute', 'top': '20%', 'width': '10%', 'margin': '0%', 'cursor': 'e-resize'}, 'S': {'left': '20%', 'bottom': 0, 'position': 'absolute', 'min-height': '10%', 'width': '60%', 'margin': '0%', 'cursor': 's-resize'}, 'Z': {'width': '10%', 'min-height': '10%', 'position': 'absolute', 'margin': '0%', 'cursor': 'zoom-in'}, 'N': {'left': '20%', 'min-height': '20%', 'position': 'absolute', 'top': 0, 'width': '60%', 'margin': '0%', 'cursor': 'n-resize'}, 'O': {'left': 0, 'min-height': '60%', 'position': 'absolute', 'top': '20%', 'width': '10%', 'margin': '0%', 'cursor': 'w-resize'}}
S = {'left': '20%', 'bottom': 0, 'position': 'absolute', 'min-height': '10%', 'width': '60%', 'margin': '0%', 'cursor': 's-resize'}
Z = {'width': '10%', 'min-height': '10%', 'position': 'absolute', 'margin': '0%', 'cursor': 'zoom-in'}
p(**kwargs)[source]
vai(*_)[source]

Texto

class _spy.vitollino.vitollino.Texto(cena=<CenaNula>, tit='', txt='', **kwargs)[source]

Bases: _spy.vitollino.vitollino.Popup

POP = <Popup>
d(cena, tit='', txt='')
esconde(ev=<NoEvent>)[source]
mostra(tit='', txt='', **kwargs)[source]
static texto(tit='', txt='', **kwars)[source]
vai(ev=<NoEvent>)[source]

Labirinto

class _spy.vitollino.vitollino.Labirinto(c=<CenaNula>, n=<CenaNula>, l=<CenaNula>, s=<CenaNula>, o=<CenaNula>)[source]

Bases: object

static m(cenas)[source]

Dropper

class _spy.vitollino.vitollino.Dropper(dropper)[source]

Bases: object

drag_start(ev)[source]
mouse_over(ev)[source]

Dragger

class _spy.vitollino.vitollino.Dragger(dragger)[source]

Bases: object

ACTION = ''
POINTER = ''
drag_start(ev)[source]
highten(dy)[source]
mouse_down(ev)[source]
static mouse_over(ev)[source]
mouse_up(_)[source]
no_mouse_move(ev)[source]
pre_mouse_down(ev)[source]
pre_mouse_move(ev)[source]
static pre_mouse_over(ev)[source]
pre_mouse_up(_)[source]
widen(dx)[source]

Droppable

class _spy.vitollino.vitollino.Droppable(droppable, dropper_name='', action=None, cursor=None)[source]

Bases: object

drag_over(ev)[source]
drop(ev)[source]

Cursor

class _spy.vitollino.vitollino.Cursor(alvo, cena=<browser.BrythonMock object>)[source]

Bases: object

Note

Biblioteca Cliente para criação de Jogos.

Vitollino - Classes Auxiliares

See also

Classes Principais Vitollino - Classes Principais

NoEv

class _spy.vitollino.vitollino.NoEv[source]

Bases: _spy.vitollino.vitollino.NoEv

Representa um evento vazio.

>>> print(ev.x, ev.y)
-100 -100
stopPropagation()[source]
x = -100
y = -100

SalaCenaNula

class _spy.vitollino.vitollino.SalaCenaNula[source]

Bases: _spy.vitollino.vitollino.SalaCenaNula

Define uma Sala ou uma Cena vazia.

>>> cena = Cena(SalaCenaNula())  # A próxima cena
>>> uma_cena = Cena(SalaCenaNula(), cena)  # Cena nula à esquerda, proxima no meio
>>> uma_cena.vai_esquerda()  # tenta navegar para a cena à esquerda
>>> # não vai, pois a cena é nula e não deixa que se navegue para ela
>>> print(INVENTARIO.cena == cena)
True

Deve ser usado quando um parâmetro requer uma cena mas não deve ter uma cena válida ali.

init()[source]
portal(*_, **__)[source]
vai()[source]

parametrized

_spy.vitollino.vitollino.parametrized(dec)[source]

wraps_class_to_mimic_wrapped

_spy.vitollino.vitollino.wraps_class_to_mimic_wrapped(original_cls)[source]

Empacota uma classe decoradora para que apareça corretamente nos documentos.

>>> @wraps_class_to_mimic_wrapped
... class Exemplo:
...     ...
...
>>> print(Exemplo.__doc__)
Atualiza wrapper_cls para se assemelhar à classe original_cls.
Parameters:original_cls – A Classe a ser empacotada
Returns:O empacotador da classe

singleton

_spy.vitollino.vitollino.singleton(cls_to_decorate)[source]

Decora um classe para ser um singleton e retornar sempre a mesma instância.

>>> @singleton
... class Mono:
...     def __init__(self):
...             self.x = 0
...
>>> Mono().x, Mono().x = 1, 2
>>> print(Mono().x == Mono().x, Mono().x)
True 2
Parameters:cls_to_decorate – A classe para ser definida como singleton
Returns:O decorador de singleton

main

_spy.vitollino.vitollino.main()[source]

setup

_spy.vitollino.vitollino.__setup__()[source]

Note

Biblioteca Cliente para criação de Jogos.

Tutorial

Vitollino - Jogo da Marcela

Treinamento de Manuseio Alimentar

Treinamento de Manuseio de Alimentos.

Gerador de labirintos e jogos tipo ‘novel’.

Vitollino em Github

class lab.views.marcela.Config[source]

Bases: object

CONFIGURA

Dicionário de configuração das cenas.

CONFIGURA = dict(origem=["vestiário#armário#Asseio#Por o avental", True, dict(left=429))
Origem, Destino, Título e Texto Com Popup Hot Spot
“Origem#Destino#Título#Texto” True or False {“top”:1}
Origem, Destino, Título e Texto

String com partes separadas por #

Origem
Nome da cena de origem, precisa ser uma chave de CONFIGURA
Destino
Nome da cena de destino, precisa ser uma chave de CONFIGURA
Título
Título do popup de texto
Texto
Texto do popup de texto
Com Popup
Determina se vai aparecer o popup de texto na transição de cenas
Hot Spot

Dicionário com as dimensões do hot spot que vai receber o click

dict(left=429, top=112, width=109, height=300)
CONFIGURA = {'descontaminando': ['descontaminando#saindo#o_asseio#acionou_a_pia', True, {'width': 181, 'left': 610, 'height': 676, 'top': 116}], 'vestiário': ['vestiário#abriu_o_armário#Asseio#Você deve por o avental', True, {'width': 109, 'left': 429, 'height': 300, 'top': 112}], 'saindo': ['descontaminando#saindo#o_asseio#acionou_a_pia', True, {'width': 181, 'left': 610, 'height': 676, 'top': 116}], 'abriu_o_armário': ['abriu_o_armário#o_asseio#Asseio#Você deve lavar as mão', True, {'width': 109, 'left': 437, 'height': 300, 'top': 127}], 'as_bactérias': ['as_bactérias#enxaguando#o_asseio#acionou_a_pia', True, {'width': 62, 'left': 349, 'height': 79, 'top': 666}], 'acionou_a_pia': ['acionou_a_pia#molhando_as_mãos#o_asseio#acionou_a_pia', True, {'width': 171, 'left': 313, 'height': 96, 'top': 390}], 'secando': ['secando#descontaminando#o_asseio#acionou_a_pia', True, {'width': 49, 'left': 449, 'height': 109, 'top': 256}], 'origem': ['vestiário#vestiário#Asseio#Você deve por o avental', True, {'width': 109, 'left': 429, 'height': 300, 'top': 112}], 'enxaguando': ['enxaguando#secando#o_asseio#acionou_a_pia', True, {'width': 81, 'left': 381, 'height': 121, 'top': 252}], 'molhando_as_mãos': ['molhando_as_mãos#usando_sabão#o_asseio#acionou_a_pia', True, {'width': 54, 'left': 316, 'height': 95, 'top': 276}], 'usando_sabão': ['usando_sabão#as_bactérias#o_asseio#acionou_a_pia', True, {'width': 188, 'left': 310, 'height': 121, 'top': 403}], 'o_asseio': ['o_asseio#acionou_a_pia#o_asseio#acionou_a_pia', True, {'width': 60, 'left': 354, 'height': 60, 'top': 653}]}
class lab.views.marcela.JogoMarcela(legendas=['vestiário', 'abriu_o_armário', 'o_asseio', 'acionou_a_pia', 'molhando_as_mãos', 'usando_sabão', 'as_bactérias', 'enxaguando', 'secando', 'descontaminando', 'saindo'], momentos=[(1, 1), (1, 2), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (3, 1)])[source]

Bases: object

Constroi o jogo completo da Marcela.

Parameters:
  • legendas – lista contendo nomes das cenas [<nome da cena>, …]
  • momentos – lista de tuplas indicando o quadro e o momento [(<q0>, <m0>), … ]
static _cria_cenas(cenas)[source]

Cria um conjunto de objetos Cena a partir de um dicionário.

Usa a função cria de criar cenas do Vitollino: JOGO.c.c

:param cenas:dicionário contendo <nome da cena>: <url da imagem> :return: cenário, uma lista de quadros criados

static _decorador_do_vai_do_texto(port)[source]

Decorador do texto para refinamento, publica as dimensões do cursor no popup de texto.

Parameters:port – portal que vai ser decorado
Returns:Nenhum
_inicia_jogo()[source]

Configura o momento inicial e ativa a primeira tela.

Returns:Nenhum
configura_momentos(cena)[source]

Configura a cena do momento para ativar seu portal segundo os dados em CONFIGURA.

configura_portal_com_texto

Portal decorado com texto.

@JOGO.n.texto
decorador que adiciona um popup de texto. A ação do portal acontece quando se fecha o popup.
um_portal = configura_portal_com_texto("vestiário", "armário", hot_spot=dict(left=10, top=90)):
Parameters:cena – Nome do momento a ser configurado, tem que ser chave de CONFIGURA.
Returns:Proxi da cena construída pela classe interna PreviaDoMomento.
class lab.views.marcela.PreviaDoMomento(jogo, destino)[source]

Bases: object

Cria um proxi para a cena que ativa os portais somente quando é montrada pelo comando vai.

self.destino
nome da cena que surge ao clicar no portal.
self._destino
objeto cena referente à cena destino, recuperada como atributo da classe Cena.
Parameters:
  • jogo – Instância da classe JogoMarcela
  • destino – nome da cena destino
vai(*_, **__)[source]

Mostra a cena destino e configura o portal nela.

Parameters:
  • _ – captura lista de argumento para evitar erros
  • __ – captura dicionário de argumento para evitar erros
Returns:

Nenhum

lab.views.marcela.main(*_)[source]

Chamada do jogo, feita a partir do HTML.

Parameters:_ – Parametros recebidos do HTML
Returns:Instância do Jogo da Marcela

Note

Ambiente de treinamento para manuseio alimentar.

Vitollino - Jardim Radical

Aventura no Jardim Botânico

ROTEIRO DO GAME JARDIM RADICAL.

Gerador de labirintos e jogos tipo ‘novel’.

Sequência de forma lógica para o funcionamento do jogo, ou seja, “costurar” as histórias das cenas.

class lab.views.jardim.Config[source]

Bases: object

CONFIGURA

Dicionário de configuração das cenas.

CONFIGURA = dict(origem=["vestiário#armário#Asseio#Por o avental", True, dict(left=429))
Origem, Destino, Título e Texto Com Popup Hot Spot
“Origem#Destino#Título#Texto” True or False {“top”:1}
Origem, Destino, Título e Texto

String com partes separadas por #

Origem
Nome da cena de origem, precisa ser uma chave de CONFIGURA
Destino
Nome da cena de destino, precisa ser uma chave de CONFIGURA
Título
Título do popup de texto
Texto
Texto do popup de texto
Com Popup
Determina se vai aparecer o popup de texto na transição de cenas
Hot Spot

Dicionário com as dimensões do hot spot que vai receber o click

dict(left=429, top=112, width=109, height=300)
CONFIGURA = {'gruta': ['gruta#guarita#gruta#guarita', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'bambus': ['bambus#bambuzal#bambus#bambuzal', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'serpabrandao': ['serpabrandao#tartarugas#serpabrandao#tartarugas', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'clarisse': ['clarisse#comoro#clarisse#comoro', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'orquidario': ['orquidario#ossanha#orquidario#ossanha', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'portal': ['portal#portao#portal#portao', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'mirante': ['mirante#narciso#mirante#narciso', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'tartarugas': ['tartarugas#tetis#tartarugas#tetis', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'comoro': ['comoro#entrada#comoro#entrada', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'entrada': ['entrada#gruta#entrada#gruta', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'palmeiras': ['palmeiras#pesquisa#palmeiras#pesquisa', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'aleiapalmeiras': ['aleiapalmeiras#bambus#aleiapalmeiras#bambus', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'portao': ['portao#relogio#portao#relogio', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'relogio': ['relogio#serpabrandao#relogio#serpabrandao', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'lago': ['lago#macaco#lago#macaco', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'macaco': ['macaco#mexicano#macaco#mexicano', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'tomjobim': ['tomjobim#vitoriaregia#tomjobim#vitoriaregia', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'japones': ['japones#lago#japones#lago', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'pesquisa': ['pesquisa#portal#pesquisa#portal', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'narciso': ['narciso#orquidario#narciso#orquidario', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'bromeliario': ['bromeliario#cascata#bromeliario#cascata', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'mexicano': ['mexicano#mirante#mexicano#mirante', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'guarita': ['guarita#herborizada#guarita#herborizada', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'vitoriaregia': ['vitoriaregia#xochipili#vitoriaregia#xochipili', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'academia': ['academia#aleiapalmeiras#academia#aleiapalmeiras', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'tetis': ['tetis#tomjobim#tetis#tomjobim', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'cascata': ['cascata#clarisse#cascata#clarisse', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'insetivoras': ['insetivoras#jambeiros#insetivoras#jambeiros', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'herborizada': ['herborizada#insetivoras#herborizada#insetivoras', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'origem': ['abrico#academia#abrico#academia', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'jambeiros': ['jambeiros#japones#jambeiros#japones', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'bambuzal': ['bambuzal#bromeliario#bambuzal#bromeliario', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'abrico': ['abrico#academia#abrico#academia', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}], 'ossanha': ['ossanha#palmeiras#ossanha#palmeiras', True, {'left': 0, 'width': 100, 'height': 100, 'top': 0}]}
class lab.views.jardim.JogoJardim(legendas=['abrico', 'academia', 'aleiapalmeiras', 'bambus', 'bambuzal', 'bromeliario', 'cascata', 'clarisse', 'comoro', 'entrada', 'gruta', 'guarita', 'herborizada', 'insetivoras', 'jambeiros', 'japones', 'lago', 'macaco', 'mexicano', 'mirante', 'narciso', 'orquidario', 'ossanha', 'palmeiras', 'pesquisa', 'portal', 'portao', 'relogio', 'serpabrandao', 'tartarugas', 'tetis', 'tomjobim', 'vitoriaregia', 'xochipili'])[source]

Bases: object

Constroi o jogo completo do Jardim.

Parameters:legendas – lista contendo nomes das cenas [<nome da cena>, …]
static _cria_cenas(cenas)[source]

Cria um conjunto de objetos Cena a partir de um dicionário.

Usa a função cria de criar cenas do Vitollino: JOGO.c.c

:param cenas:dicionário contendo <nome da cena>: <url da imagem> :return: cenário, uma lista de quadros criados

static _decorador_do_vai_do_texto(port)[source]

Decorador do texto para refinamento, publica as dimensões do cursor no popup de texto.

Parameters:port – portal que vai ser decorado
Returns:Nenhum
_inicia_jogo()[source]

Configura o momento inicial e ativa a primeira tela.

Returns:Nenhum
configura_momentos(cena)[source]

Configura a cena do momento para ativar seu portal segundo os dados em CONFIGURA.

configura_portal_com_texto

Portal decorado com texto.

@JOGO.n.texto
decorador que adiciona um popup de texto. A ação do portal acontece quando se fecha o popup.
um_portal = configura_portal_com_texto("vestiário", "armário", hot_spot=dict(left=10, top=90)):
Parameters:cena – Nome do momento a ser configurado, tem que ser chave de CONFIGURA.
Returns:Proxi da cena construída pela classe interna PreviaDoMomento.
class lab.views.jardim.PreviaDoMomento(jogo, destino)[source]

Bases: object

Cria um proxi para a cena que ativa os portais somente quando é montrada pelo comando vai.

self.destino
nome da cena que surge ao clicar no portal.
self._destino
objeto cena referente à cena destino, recuperada como atributo da classe Cena.
Parameters:
  • jogo – Instância da classe JogoMarcela
  • destino – nome da cena destino
vai(*_, **__)[source]

Mostra a cena destino e configura o portal nela.

Parameters:
  • _ – captura lista de argumento para evitar erros
  • __ – captura dicionário de argumento para evitar erros
Returns:

Nenhum

lab.views.jardim.main(*_)[source]

Chamada do jogo, feita a partir do HTML.

Parameters:_ – Parametros recebidos do HTML
Returns:Instância do Jogo da Marcela

Note

Aventura no Jardim Botânico.

Primeiro Cenário do Jogo

Vamos começar importando o módulo vitollino para criar um jogo baseado na biblioteca Vitollino.
Neste módulo vamos usar a classe Cena, que vai permitir a criação da primeira cena, o lago das tartarugas:
_images/tartarugas.png
from _spy.vitollino import Cena

TARTARUGAS = "https://activufrj.nce.ufrj.br/studio/labase/lago.jpg?disp=inline&size=G"

def main():
    uma_cena = Cena(img=TARTARUGAS)
    uma_cena.vai()

if __name__ == "__main__":
    main()

Note

Ainda é um programa bem simples.

Desenvolvimento

Vitollino - Introdução

Engenho de Games para Ensino de Programação LABASE

 

Visão Global

Vitollino é um engenho para construção de jogos inteligentes para ensino de programação ou qualquer outro asunto que possa ser ensinado por games.

Este ambiente facilita a aprendizagem da linguagem Python

O jogo é dirigido principalmente ao ensino de programação de computadores para jovens e crianças do ensino médio e fundamental.

O engenho Vitollino é baseado no Phaser e é programado em Brython

  Código Fonte  Github
  Registro de Tiquets  Github-Issues

 

Especificações e Qualidade

  Atividades em Waffle.io  Stories in Ready
  Integração em Codeship  Build Status
  Manual em Read the Docs  Document Build Status

Equipe de Desenvolvimento

 Carlo Emmanoel Tolla de Oliveira
Activ Github Lattes

Gráfico de Produção

Copyleft 2016 Carlo E. T. Oliveira

Vitollino - Módulos

Vitollino é programado em Brython

Funcionalidades Documentadas:

Vitollino - Jogo de Novelas

Vitollino

Gerador de labirintos e jogos tipo ‘novel’.

Gerador de labirintos e jogos tipo ‘novel’.

Vitollino em Github

class _spy.vitollino.vitollino.Bloco[source]

Bases: object

conta_pecas(valor_peca)[source]
inicia_de_novo()[source]
nao_monta()[source]
vai()[source]
class _spy.vitollino.vitollino.Cena(img='', esquerda=<CenaNula>, direita=<CenaNula>, meio=<CenaNula>, vai=None, nome='', xy=(0, 0), score={}, **kwargs)[source]

Bases: object

Use para construir uma cena.

from _spy.vitollino import Cena

cena_esq = Cena(img="esq.jpg")
cena_mei = Cena(img="mei.jpg", cena_esq)
cena_mei.vai()
Parameters:
  • img (str) – URL da imagem
  • esquerda (Cena) – Cena que está à esquerda desta
  • direita (Cena) – Cena que está à direita desta
  • meio (Cena) – Cena que está à frente desta
  • vai – Função a ser chamada no lugar da self.vai nativa
bota(nome_item)[source]
static c(**cenas)[source]
portal(esquerda=None, direita=None, meio=None, **kwargs)[source]
static q(n=<CenaNula>, l=<CenaNula>, s=<CenaNula>, o=<CenaNula>, nome='', **kwargs)[source]
static s(n=<CenaNula>, l=<CenaNula>, s=<CenaNula>, o=<CenaNula>, nome='', **kwargs)[source]
sai(saida)[source]
score(**kwargs)[source]
tira(item)[source]
vai(ev=<NoEvent>)[source]
vai_direita(_=0)[source]
vai_esquerda(_=0)[source]
vai_meio(_=0)[source]
class _spy.vitollino.vitollino.Cursor(alvo, cena=<browser.BrythonMock object>)[source]

Bases: object

class _spy.vitollino.vitollino.Dragger(dragger)[source]

Bases: object

ACTION = ''
POINTER = ''
drag_start(ev)[source]
highten(dy)[source]
mouse_down(ev)[source]
static mouse_over(ev)[source]
mouse_up(_)[source]
no_mouse_move(ev)[source]
pre_mouse_down(ev)[source]
pre_mouse_move(ev)[source]
static pre_mouse_over(ev)[source]
pre_mouse_up(_)[source]
widen(dx)[source]
class _spy.vitollino.vitollino.Droppable(droppable, dropper_name='', action=None, cursor=None)[source]

Bases: object

drag_over(ev)[source]
drop(ev)[source]
class _spy.vitollino.vitollino.Dropper(dropper)[source]

Bases: object

drag_start(ev)[source]
mouse_over(ev)[source]
class _spy.vitollino.vitollino.Elemento(img='', vai=None, style={}, tit='', alt='', cena=Inventario, score={}, **kwargs)[source]

Bases: object

Um objeto de interação que é representado por uma imagem em uma cena.

papel = Elemento(
img=”papel.png”, tit=”caderno de notas”, vai=pega_papel, style=dict(left=350, top=550, width=60))
Parameters:
  • img – URL de uma imagem
  • vai – função executada quando se clica no objeto
  • style – dicionário com dimensões do objeto {“left”: …, “top”: …, width: …, height: …}
  • tit – Texto que aparece quando se passa o mouse sobre o objeto
  • alt – Texto para leitores de tela
  • cena – cena alternativa onde o objeto vai ser colocado
  • score – determina o score para este elemento
  • kwargs – lista de parametros nome=URL que geram elementos com este nome e a dada imagem
classmethod c(**kwargs)[source]
entra(cena, style={})[source]
limbo = <browser.BrythonMock object>
score(**kwargs)[source]
class _spy.vitollino.vitollino.Folha(texto, ht_ml, tela, left)[source]

Bases: object

drag_start(ev)[source]
mouse_over(ev)[source]
class _spy.vitollino.vitollino.Inventario(tela=<browser.BrythonMock object>)[source]

Bases: object

Os objetos que estão de posse do jogador.

Parameters:tela – Div do HTML onde o inventário será anexado
GID = '00000000000000000000'
bota(nome_item, item='', acao=None)[source]

Os objetos que estão de posse do jogador.

>>> inv.bota("uma_coisa")
>>> "uma_coisa" in inv.inventario
True
Parameters:
  • nome_item – uma string com o nome do item, ele será criado e colocado no inventário
  • item – URL da imagem do item nomeado por nome_item
  • acao – ação associada com o item nomeado quando ele é clicado
desmonta(_=0)[source]
inicia()[source]
monta(_=0)[source]
mostra(_=0)[source]
score(casa, carta, move, ponto, valor)[source]
static send(operation, data, action=<function Inventario.<lambda>>, method='POST')[source]
tira(nome_item)[source]
class _spy.vitollino.vitollino.Jogo[source]

Bases: object

algo

Acessa a classe Elemento

cena

Acessa a classe Cena

nota

Acessa a classe Texto

quarto

Acessa a classe Sala

sala

Acessa a classe Salao

class _spy.vitollino.vitollino.Labirinto(c=<CenaNula>, n=<CenaNula>, l=<CenaNula>, s=<CenaNula>, o=<CenaNula>)[source]

Bases: object

static m(cenas)[source]
class _spy.vitollino.vitollino.Musica(sound, loop=True, autoplay=True, sound_type='audio/mpeg')[source]

Bases: object

class _spy.vitollino.vitollino.NoEv[source]

Bases: _spy.vitollino.vitollino.NoEv

Representa um evento vazio.

>>> print(ev.x, ev.y)
-100 -100
class _spy.vitollino.vitollino.Point(x, y)[source]

Bases: list

px()[source]
class _spy.vitollino.vitollino.Popup(cena, tit='', txt='', vai=None, **kwargs)[source]

Bases: object

POP = <Popup>
static d(cena, tit='', txt='')[source]
vai()[source]
class _spy.vitollino.vitollino.Portal(cena=None, debug_=False, **kwargs)[source]

Bases: object

L = {'left': '90%', 'min-height': '60%', 'position': 'absolute', 'top': '20%', 'width': '10%', 'margin': '0%', 'cursor': 'e-resize'}
N = {'left': '20%', 'min-height': '20%', 'position': 'absolute', 'top': 0, 'width': '60%', 'margin': '0%', 'cursor': 'n-resize'}
O = {'left': 0, 'min-height': '60%', 'position': 'absolute', 'top': '20%', 'width': '10%', 'margin': '0%', 'cursor': 'w-resize'}
PORTAIS = {'L': {'left': '90%', 'min-height': '60%', 'position': 'absolute', 'top': '20%', 'width': '10%', 'margin': '0%', 'cursor': 'e-resize'}, 'S': {'left': '20%', 'bottom': 0, 'position': 'absolute', 'min-height': '10%', 'width': '60%', 'margin': '0%', 'cursor': 's-resize'}, 'Z': {'width': '10%', 'min-height': '10%', 'position': 'absolute', 'margin': '0%', 'cursor': 'zoom-in'}, 'N': {'left': '20%', 'min-height': '20%', 'position': 'absolute', 'top': 0, 'width': '60%', 'margin': '0%', 'cursor': 'n-resize'}, 'O': {'left': 0, 'min-height': '60%', 'position': 'absolute', 'top': '20%', 'width': '10%', 'margin': '0%', 'cursor': 'w-resize'}}
S = {'left': '20%', 'bottom': 0, 'position': 'absolute', 'min-height': '10%', 'width': '60%', 'margin': '0%', 'cursor': 's-resize'}
Z = {'width': '10%', 'min-height': '10%', 'position': 'absolute', 'margin': '0%', 'cursor': 'zoom-in'}
p(**kwargs)[source]
vai(*_)[source]
class _spy.vitollino.vitollino.Sala(n=<CenaNula>, l=<CenaNula>, s=<CenaNula>, o=<CenaNula>, nome='', **kwargs)[source]

Bases: object

static c(**cenas)[source]
leste
norte
oeste
p()[source]
sul
class _spy.vitollino.vitollino.SalaCenaNula[source]

Bases: _spy.vitollino.vitollino.SalaCenaNula

Define uma Sala ou uma Cena vazia.

>>> cena = Cena(SalaCenaNula())  # A próxima cena
>>> uma_cena = Cena(SalaCenaNula(), cena)  # Cena nula à esquerda, proxima no meio
>>> uma_cena.vai_esquerda()  # tenta navegar para a cena à esquerda
>>> # não vai, pois a cena é nula e não deixa que se navegue para ela
>>> print(INVENTARIO.cena == cena)
True

Deve ser usado quando um parâmetro requer uma cena mas não deve ter uma cena válida ali.

class _spy.vitollino.vitollino.Salao(n=<CenaNula>, l=<CenaNula>, s=<CenaNula>, o=<CenaNula>, nome='', **kwargs)[source]

Bases: _spy.vitollino.vitollino.Sala

static c(**cenas)[source]
p()[source]
class _spy.vitollino.vitollino.Suporte(bloco, ht_ml, tela, left, certa)[source]

Bases: object

drag_over(ev)[source]
drop(ev)[source]
class _spy.vitollino.vitollino.Texto(cena=<CenaNula>, tit='', txt='', **kwargs)[source]

Bases: _spy.vitollino.vitollino.Popup

esconde(ev=<NoEvent>)[source]
mostra(tit='', txt='', **kwargs)[source]
static texto(tit='', txt='', **kwars)[source]
vai(ev=<NoEvent>)[source]
_spy.vitollino.vitollino.main()[source]
_spy.vitollino.vitollino.parametrized(dec)[source]
_spy.vitollino.vitollino.singleton(cls_to_decorate)[source]

Decora um classe para ser um singleton e retornar sempre a mesma instância.

>>> @singleton
... class Mono:
...     def __init__(self):
...             self.x = 0
...
>>> Mono().x, Mono().x = 1, 2
>>> print(Mono().x == Mono().x, Mono().x)
True 2
Parameters:cls_to_decorate – A classe para ser definida como singleton
Returns:O decorador de singleton
_spy.vitollino.vitollino.wraps_class_to_mimic_wrapped(original_cls)[source]

Empacota uma classe decoradora para que apareça corretamente nos documentos.

>>> @wraps_class_to_mimic_wrapped
... class Exemplo:
...     ...
...
>>> print(Exemplo.__doc__)
Atualiza wrapper_cls para se assemelhar à classe original_cls.
Parameters:original_cls – A Classe a ser empacotada
Returns:O empacotador da classe

Note

Biblioteca Cliente para Jogos.

Flying Circus - Jogo Phaser

Braser

class _spy.circus.braser.Braser(x=800, y=600, mode=None, name='pydiv', **_)[source]

Bases: object

Brython object-oriented wrapper for js Phaser.

Parameters:
  • x – Canvas width.
  • y – Canvas height.
  • mode – Canvas mode.
  • name – Game name.
  • keyargs – Extra arguments
PHASER = <MagicMock name='mock.Phaser' id='140160404162264'>
create(*_)[source]

Create element.

preload(*_)[source]

Preload element.

subscribe(subscriber)[source]

Subscribe elements for game loop.

Parameters:subscriber
update(*_)[source]

Update element.

Note

Biblioteca Cliente para Jogos.

Game

class _spy.circus.game.Actor[source]

Bases: _spy.circus.game.Circus

Define um ator, personagem ou cenário.

class _spy.circus.game.Circus[source]

Bases: object

Interface com o engenho de games Phaser.

BRASER = None
create()[source]
classmethod created()[source]
enable(item)[source]
group()[source]
image(name, img)[source]
Parameters:
  • name
  • img
Returns:

preload()[source]
sprite(name, x=0, y=0)[source]
Parameters:
  • name
  • x
  • y
Returns:

spritesheet(name, img, x=0, y=0, s=1)[source]
Parameters:
  • name
  • img
  • x
  • y
  • s
Returns:

start_system()[source]
tween(sprite, time, tfunction='Linear', autostart=True, delay=0, repeat=-1, yoyo=False, **kwd)[source]
Parameters:
  • sprite
  • time
  • tfunction
  • autostart
  • delay
  • repeat
  • yoyo
  • kwd
Returns:

update()[source]

See also

Module _spy.circus.braser

Note

Biblioteca Cliente para Jogos.

Masmorra

class _spy.circus.circus.DesafioA(masmorra=[['LS', 'JN', 'KO'], ['IO', 'FN', 'IL'], ['GS', 'JS', 'GL']], off=0)[source]

Bases: object

ODD = False
create()[source]
preload()[source]
update()[source]
class _spy.circus.circus.Hero(gamer)[source]

Bases: object

create()[source]
preload()[source]
update()[source]
class _spy.circus.circus.Magic(masmorra, x, y, vx, vy, d)[source]

Bases: object

create()[source]
kill()[source]
preload()[source]
update()[source]
class _spy.circus.circus.Masmorra[source]

Bases: object

create()[source]
classmethod created()[source]
posiciona_monstro(m, x, y)[source]
preload()[source]
update()[source]
class _spy.circus.circus.Monster(masmorra)[source]

Bases: object

create()[source]
preload()[source]
redirect(play, dd)[source]
update()[source]
_spy.circus.circus.circus(desafio=1, param=[['LS', 'JN', 'KO'], ['IO', 'FN', 'IL'], ['GS', 'JS', 'GL']])[source]
_spy.circus.circus.desafio0(masmorra)[source]
_spy.circus.circus.desafio3(mmap)[source]
_spy.circus.circus.desafio4(mmap)[source]
_spy.circus.circus.desafio5(mmap)[source]
_spy.circus.circus.desafio6(mmap)[source]
_spy.circus.circus.desafio7(mmap)[source]
_spy.circus.circus.desafio8(mmap)[source]
_spy.circus.circus.main(_=None)[source]
_spy.circus.circus.posiciona_monstro(m, x, y)[source]
_spy.circus.circus.random() → x in the interval [0, 1).

See also

Module _spy.circus.game

Note

Biblioteca Cliente para Jogos.

Lançamentos

Notas de Lançamento V. 1.1.0

Vitollino

Milestone

Gatíneo - Ativar modo multiusuário 🐱

Aspectos do Lançamento

Destaques dos Aspectos

Início da documentação do tutorial

Aspecto #1

Console do mentor 🏠
Este console permite que o mentor do tutorial receba notificações de dificuldades que os estudantes estão tendo com seus projetos.

Aspecto #2

Equipes de jogadores 🏠
Permite que os jogadores formem equipes e resolvam conjuntamente uma aventura.

Aspecto #3

Import reload 🏠
Esta função permite que o cache de módulos seja invalidada, permitindo que se use o código atualizado produzido por outro estudante deste projeto.

Aspecto #4

Gerência de mentoria 🏠
Facilita que diversos mentores se dividam no atendimento dos problemas.

Aspecto #5

Módulo de supervisão de mentoria 🏠
Cria uma hierarquia entre os mentores para que exista um mentor supervisor, para quem problemasmais complexos possam ser encaminhados.

Aspecto #6

Modelagem gráfica colaborativa 🏠
Uma ferramenta de modelagem rudimentar que permite a construção de um modelo de solução colaborativamente.

Melhoramentos

Facilidades para a formação de equipes.

Melhoramento #1

Menu inicial para a formação de equipes 🏠
Este menu permite que os jogaores vão se agregando a times já formados ou iniciem um novo time.

Consertos

Nenhum conserto notável.

Questões e Problemas Conhecidos

A funcionalidade ainda é muito simples, requer melhorias.

Lançamentos Anteriores e Posteriores

Lançamento Anterior: Milestone Catioro Lançamento 1.0.0

Próximo Lançamento: Milestone Ratíneo Lançamento 1.2.0

Notas de Lançamento V. 1.0.0

Vitollino

Milestone

Catioro - Montagem do Ambiente de Jogo 🐱

Aspectos do Lançamento

Destaques dos Aspectos

Início da documentação do tutorial

Aspecto #1

Navegação através de portais 🏠
A navegação entre cenários se dá através de cursores indicativos que flutuam sobre o local do portal.

Aspecto #2

Construção de mapas de labirinto 🏠
Um labirinto pode ser construído montando uma matriz de duas dimensões. Cada célula da matriz irá se conectar coms seus vizinhos nos quatro pontos cardeais.

Aspecto #3

Adiciona música e sons 🏠
Uma música de fundo pode ser adicionada ao jogo.

Aspecto #4

Texto decorador 🏠
Um portal pode ser decorado com um popup de texto que aparece antes de transitar para outra cena.

Aspecto #5

Montagem interativa com cursor móvel 🏠
Para facilitar a montagem de cenários pode-se habilitar um cursor inteartivo que irá fornecer as coordenadas e o tamanho do hot spot que irá ativar a ação quando clicado.

Aspecto #6

Banco de dado Redis via Walrus 🏠
Um banco Redis foi adicionadoao servidor. Ele é interfaceado pelo adaptador python definido pelo pacote Walrus.

Melhoramentos

Reúne Vitollino e Braser no mesmo repositório.

Melhoramento #1

Tutorial vitollino sendo portado para Restrutured Text.

Consertos

Nenhum conserto notável.

Questões e Problemas Conhecidos

A funcionalidade ainda é muito simples, requer melhorias.

Uma nova versão deve integrar melhor as duas modalidades de tutorial.

Lançamentos Anteriores e Posteriores

Próximo Lançamento: A ser definido Lançamento 1.1.0

Notas de Lançamento Futuro

Vitollino

Milestones

Catioro - Criar e personalizar equipes 🐶

Gatíneo - Ativar modo multiusuário 🐱

Ratíneo - Ativar modo cooperativo 🐭

Aspectos dos Lançamentos

Destaques dos Aspectos

Início da documentação do tutorial

Milestone Catioro 🐶

  • [ ] Navegação através de portais
  • [ ] Construção de mapas de labirinto
  • [ ] Adiciona música e sons
  • [ ] Texto decorador
  • [ ] Montagem interativa com cursor móvel
  • [ ] Banco de dado Redis via Walrus

Milestone Gatíneo 🐱

  • [ ] Console do mentor
  • [ ] Equipes de jogadores
  • [ ] Import reload
  • [ ] Gerência de mentoria
  • [ ] Módulo de supervisão de mentoria
  • [ ] Modelagem gráfica colaborativa

Milestone Ratíneo 🐭

_images/site_em_construcao_.png

Lançamentos Anteriores

Milestone Catioro Lançamento 1.0.0

Milestone Gatineo Lançamento 1.1.0

Indices e Tabelas