Source code for client.caras.carinhas

#! /usr/bin/env python
# -*- coding: UTF8 -*-
# Este arquivo é parte do programa Carinhas
# Copyright 2013-2014 Carlo Oliveira <carlo@nce.ufrj.br>,
# `Labase <http://labase.selfip.org/>`__; `GPL <http://is.gd/3Udt>`__.
#
# Carinhas é um software livre; você pode redistribuí-lo e/ou
# modificá-lo dentro dos termos da Licença Pública Geral GNU como
# publicada pela Fundação do Software Livre (FSF); na versão 2 da
# Licença.
#
# Este programa é distribuído na esperança de que possa ser  útil,
# mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO
#  a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
# Licença Pública Geral GNU para maiores detalhes.
#
# Você deve ter recebido uma cópia da Licença Pública Geral GNU
# junto com este programa, se não, escreva para a Fundação do Software
# Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

"""
############################################################
Jogo das Carinhas - Principal
############################################################

Classe que define uma carinha e inicia o jogo com as carinhas embaralhadas.

"""
#from .tabuleiro import Tabuleiro
from random import random
URLS = [
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/olhos_verdes_sem_bigode_II.png?disp=inline&size=G', 
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/olhos_verdes_com_barba_II.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/olhos_pretos_sem_barba_II.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/olhos_pretos_com_barba_II.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/olhos_verdes_sem_bigode.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/olhos_verdes_com_bigode.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/olhos_pretos_sem_bigode.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/olhos_pretos_com_bigode.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/chapeu_olhos_verdes_sem_bigode_II.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/chapeu_olhos_verdes_com_bigode_II.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/chapeu_olhos_pretos_sem_bigode_II.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/chapeu_olhos_pretos_com_bigode_II.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/chapeu_olhos_verdes_com_bigode_(2).png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/chapeu_olhos_verdes_sem_barba.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/chapeu_olhos_pretos_sem_barba.png?disp=inline&size=G',
    'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/chapeu_olhos_pretos_com_bigode.png?disp=inline&size=G'     
]


[docs]class Carinhas: """Base do jogo com tabuleiro e carinhas.""" def __init__(self, gui): """Constroi os objetos iniciais. """ self.s = self.gui = self.tabuleiro = None self.urls = URLS self.d = 'https://activufrj.nce.ufrj.br/studio/Jogo_Carinhas/tabuleiro.png?disp=inline&size=G'
[docs] def numeros(self, quantidade, bonecos): lista = [] for a, qnti in enumerate(quantidade): for b in range(qnti): lista.append(bonecos[a]) return lista
[docs] def shufle(self, lista): listainterna = lista[:] lista_saida = [] while listainterna: indice_selecionado = int(random() * (len(listainterna))) elemento_selecionado = listainterna.pop(indice_selecionado) lista_saida.append(elemento_selecionado) lista = lista_saida[:] #print(lista_saida) return lista_saida
[docs] def build_base(self, gui, svg): """Constroi as partes do Jogo. """ p = gui['banner'] self.s = svg.svg(width=800, height=500) p <= self.s self.gui = gui #self.build_tabuleiro(gui) self.build_carinhas(svg)
[docs] def build_tabuleiro(self, gui, lista): """Constroi o tabuleiro onde as pecas sao jogadas.""" self.tabuleiro = [] # Tabuleiro(gui) c = 0 for i in range(12): interna = [] for a in range(16): if (i < 2) or (i > 9): interna.append(gui.image(href=lista[c], x=a*50, y=i*50, width=50, height=50)) self.s <= interna[a] c += 1 elif (i == 2) and (a == 0): interna.append(gui.image(href=lista[c], x=a*50, y=i*50, width=50, height=50)) self.s <= interna[a] c += 1 elif (i == 2) and (a == 1): interna.append(gui.image(href=lista[c], x=a*50, y=i*50, width=50, height=50)) self.s <= interna[a] c += 1 elif (a == 14) and (i == 2): interna.append(gui.image(href=lista[c], x=a*50, y=i*50, width=50, height=50)) self.s <= interna[a] c += 1 else: interna.append(gui.image(href=self.d, x=a*50, y=i*50, width=50, height=50)) self.s <= interna[a] self.tabuleiro.append(interna)
[docs] def build_carinhas(self, gui): """Posiciona as carinhas onde as pecas se iniciam.""" qnt = [3, 4, 4, 5, 5, 5, 4, 5, 5, 5, 5, 4, 2, 2, 4, 5] # 67 carinhas_ordenadas = self.numeros(qnt, self.urls) carinhas_embaralhadas = self.shufle(carinhas_ordenadas) self.build_tabuleiro(gui, carinhas_embaralhadas)
[docs]def main(doc, svg): print('Carinhas 0.1.0') carinhas = Carinhas(doc) carinhas.build_base(doc, svg)