Source code for charlie.juliet

# patricia.charlie.juliet.py
# SPDX-License-Identifier: GPL-3.0-or-later
""" ensinar orientando ao objeto com quebra cabeça .

.. codeauthor:: Leniah Lima  <leniah@nce.ufrj.br>

Changelog
---------
.. versionadded::    20.07
        Descreva o que você adicionou no código.

"""

from _spy.vitollino.main import Cena,Elemento,Texto,STYLE
from _spy.vitollino.main import Inventario as inv

STYLE["width"] = 800
STYLE["height"] = "600px"

HERDO1 = "https://upload.wikimedia.org/wikipedia/commons/e/ea/Rocky_Landscape.jpg"#IMAGENS QUE FICAM NO QUEBRA CABEÇA, TEM QUE SER ONLINE(PNG OU JPG) 
HERDO2 = "https://upload.wikimedia.org/wikipedia/commons/e/ea/Rocky_Landscape.jpg"
HERDO3 = "https://upload.wikimedia.org/wikipedia/commons/e/ea/Rocky_Landscape.jpg"
MONITOR = "https://img2.gratispng.com/20171202/047/monitor-png-file-5a2301f39f9330.4508814915122436996536.jpg"
[docs]class minipython: """Usa um editor de imagem ( /) e recorta o Herdograma em linhas geracionais. No game, o jogador terá que clicar nas linhas em ordem certa para montar o herdograma corretamente. """ def __init__(self, esta_cena, chama_quando_acerta): posiciona_proxima = self.posiciona_proxima class LinhaGeracional: """Representa cada uma das linhas recortadas do herdograma original""" def __init__(self, linha, posicao): self.posicao = posicao # posição original no topo da página self.linha = Elemento(linha, x=posicao*200, y=20, w=200, h=50, cena=esta_cena) #tamanho das imagens self.linha.vai = self.clica_e_posiciona_a_linha #quando clica, monta o herdograma def zera(self): self.linha.x = self.posicao*200 # posiciona cada peça com 200 pixels de distância self.linha.y = 20 # posiciona a peça no topo da página self.linha.vai = self.clica_e_posiciona_a_linha def clica_e_posiciona_a_linha(self, *_): x, y = posiciona_proxima(self.posicao) if y: # se o y retornou zero é porque o posiciona próxima detectou montagem errada self.linha.x, self.linha.y = x, y # monta a linha no herdograma self.linha.vai = lambda *_:None #desativa o click da linha # coloca cada uma das linhas embaralhadas self.linhas = [ LinhaGeracional(linha=uma_linha, posicao=uma_posicao) for uma_posicao, uma_linha in enumerate([HERDO1, HERDO3, HERDO2])]# aqui fica as imagens self.acertou = chama_quando_acerta self.linha_inicial = 300 self.altura_da_linha = 50 # cada peça do herdograma tem esta altura self.posicoes_montadas = [] #l ista das linhas já montadas self.posicoes_corretas = [1, 2, 3] # lista das linhas montadas corretamente
[docs] def posiciona_proxima(self, posicao): """Chamdo pelo clique (vai) de cada peça. Atualiza a próxima posição da peça. Calcula se montou correto, comparando com a lista de posicões corretas. Se já montou quatro peças, e não acerto sinaliza com zero, para iniciar o jogo. """ self.linha_inicial += self.altura_da_linha # incrementa a posição para montar na linha de baixo self.posicoes_montadas += [posicao] # adiciona o índice desta peça na lista de peças montadas if self.posicoes_montadas == self.posicoes_corretas: self.acertou() # invoca a ação acertou se montou nas posições corretas return 300, self.linha_inicial else: if len(self.posicoes_montadas) == 4: # se montou qutro peças incorretas reinicia o game [linha.zera() for linha in self.linhas] # volta as peças para o topo self.posicoes_montadas = [] # indica que nenhuma peça foi montada self.linha_inicial = 300 # inicia a altura de ontagem da primeira peça return 0, 0 # retorna uma posição inválida para sinalizar a peça return 300, self.linha_inicial
[docs]class normal(): def __init__(self): self.monitor = Cena( img = MONITOR) self.monitor = monitor = Cena(img = MONITOR) minipython(self.monitor, self.mostra_conteudo_minipython)
[docs] def mostra_conteudo_minipython(self, *_): Texto(self.monitor, "Parábens, vc aprendeu como se faça o uso de orientação ao objeto em pyhton ").vai() # mensagem depois de montar o quebra cabeça
[docs] def vai(self, *_): self.monitor.vai()
normal().vai()