Source code for delta.hotel

# patricia.delta.hotel.py
# SPDX-License-Identifier: GPL-3.0-or-later
# _author_= "Anni Provietti"
#Obs: FALTA DOCUMENTAR CORRETAMENTE
#Testes feitos na sala Naomi
#Código do Paulo adaptado para matriz 2x3
#Algumas tentativas, minhas, anteriores foram frustradas com relação a posicionamento
#PROBLEMA1: em algum momento (ALGUM PROBLEMA COM NÚMERO DE CLICKS? parece que ausencia da linha Texto sobre acertou fez isso) uma das cartas mesmo pareando não fixa
#PROBLEMA2: as cartas selecionadas não ficam para cima ao mesmo tempo quando não são iguais (a ideia seria
# virar as 2 e elas fecharem juntas
__version__ = "20.07"
__author__ = "Paulo Assumpção"

__version__ = "20.07.01"
__author__ = "Anni Provietti"
from _spy.vitollino.main import Cena, Elemento, Texto, STYLE
import random
import time


IMG_CARD_FACE_DOWN = "http://activufrj.nce.ufrj.br/file/ProgOO/Card_verso.png?disp=inline"
IMG_CARD_1 = "http://activufrj.nce.ufrj.br/file/ProgOO/Card_pycharm.png?disp=inline"
IMG_CARD_2 = "http://activufrj.nce.ufrj.br/file/ProgOO/Card_Linux.png?disp=inline"
IMG_CARD_3 = "http://activufrj.nce.ufrj.br/file/ProgOO/Card_Gitlab.png?disp=inline"
IMG_CARD_4 = "http://activufrj.nce.ufrj.br/file/ProgOO/Card_github.png?disp=inline"
IMG_CARD_5 = "http://activufrj.nce.ufrj.br/file/ProgOO/Card_Activ.png?disp=inline"

IMG_WIDTH = 150
IMG_HEIGHT = 150

[docs]class Card(): def __init__(self, name, image, position, cena, rule): self.rule = rule self.name = name self.cena = cena self.image = image self.faceDown = True self.position = position self.pos_x = 50 + self.position[0] * IMG_WIDTH self.pos_y = 50 + self.position[1] * IMG_HEIGHT self.card = Elemento(IMG_CARD_FACE_DOWN, x=self.pos_x, y=self.pos_y, width=IMG_WIDTH, height=IMG_HEIGHT, cena=self.cena) self.card.elt.bind("click", self.turnUp) self.card.elt.bind("click", self.turnUp) self.removed = False
[docs] def turnUp(self, env=None): self.card = Elemento(self.image, x=self.pos_x, y=self.pos_y, width=IMG_WIDTH, height=IMG_HEIGHT, cena=self.cena) self.faceDown = False self.card.elt.bind("click", self.turnDown) self.rule(self)
[docs] def turnDown(self, env=None): self.card = Elemento(IMG_CARD_FACE_DOWN, x=self.pos_x, y=self.pos_y, width=IMG_WIDTH, height=IMG_HEIGHT, cena=self.cena) self.faceDown = True self.card.elt.bind("click", self.turnUp)
[docs]class Game: # referência para o Elemento previous_selected_card = None cena = Cena()
[docs] def vai(self): self.create_2x2_cards()
[docs] def create_2x2_cards(self): """ matrix 2x3: 1A 1B 2A 2B """ list_cards = self.shuffle_cards() self.card1a = Card("PyCharm", IMG_CARD_1, list_cards[0], Game.cena, Game.rule) self.card1b = Card("PyCharm", IMG_CARD_1, list_cards[1], Game.cena, Game.rule) self.card2a = Card("Linux", IMG_CARD_2, list_cards[2], Game.cena, Game.rule) self.card2b = Card("Linux", IMG_CARD_2, list_cards[3], Game.cena, Game.rule) #self.card3a = Card("GitLab", IMG_CARD_3, list_cards[4], Game.cena, Game.rule) #self.card3b = Card("GitLab", IMG_CARD_3, list_cards[5], Game.cena, Game.rule) #self.card4a = Card("GitHub", IMG_CARD_4, list_cards[6], Game.cena, Game.rule) #self.card4b = Card("GitHub", IMG_CARD_4, list_cards[7], Game.cena, Game.rule) #self.card5a = Card("Activ", IMG_CARD_5, list_cards[8], Game.cena, Game.rule) #self.card5b = Card("Activ", IMG_CARD_5, list_cards[9], Game.cena, Game.rule) Game.cena.vai()
[docs] @staticmethod def rule(selected_card): # abortar se o clique ocorrer sobre a mesma carta if Game.previous_selected_card == selected_card: return # tem um par selecionado? if Game.previous_selected_card is None: # primeira carta selecionada Game.previous_selected_card = selected_card # desabilita o clique sobre carta virada Game.previous_selected_card.card.elt.unbind("click") return # Não acertou if Game.previous_selected_card.name != selected_card.name: # Aqui tem q esperar pelo menos 3 segundos, como fazer? (sleep, não funciona) #Texto(Game.cena, "Opa!", "Errou!!!").vai() # reabilita a ação o clique e vira a carta 1 para baixo Game.previous_selected_card.card.elt.bind("click", Game.previous_selected_card.turnUp) # reabilita a ação do clique e vira a carta 2 para baixo selected_card.card.elt.bind("click", selected_card.turnUp) selected_card.turnDown() Game.previous_selected_card.turnDown() Game.previous_selected_card = None # acertou else: # desabilita o clique sobre as cartas acertadas Game.previous_selected_card = None selected_card.card.elt.unbind("click")
#Texto(Game.cena, "Acertou!!!").vai()
[docs] def shuffle_cards(self): list_cards = [(0,0), (1,0),(0,1),(1,1)] random.shuffle(list_cards) return list_cards
if __name__ == "__main__": Game().vai()