예제 #1
0
 def test_salvar_partida_completa(self):
     BD.limpar_tabuleiro(conexao_bd)
     BD.limpar_peao(conexao_bd)
     BD.adicionar_peao(conexao_bd, 0, 'azul')
     BD.adicionar_tabuleiro(conexao_bd, 0, 1, 2, True, False)
     dados = {'bom': 'dia'}
     x = AD.salvar_partida_completa(conexao_bd, dados)
     self.assertEqual(x, 0, 'salvando partida')
예제 #2
0
 def test_modificar_tabuleiro(self):
     BD.limpar_tabuleiro(conexao_bd)
     BD.adicionar_tabuleiro(conexao_bd, 2, 0, 0, True, False)
     x = BD.modificar_tabuleiro(conexao_bd, 2, 10, 20, False, False)
     self.assertEqual(x, 0, 'modificando tabuleiro')
     x = BD.selecionar_tabuleiro(conexao_bd, peao=2)
     r = {
         'id': 2,
         'pos': 10,
         'pos_inicial': 20,
         'eh_inicio': False,
         'eh_finalizado': False
     }
     self.assertDictEqual(r, x, 'modificando tabuleiro 2')
예제 #3
0
 def test_selecionar_tabuleiro(self):
     BD.limpar_tabuleiro(conexao_bd)
     BD.adicionar_tabuleiro(conexao_bd, 1, 2, 3, False, True)
     x = BD.selecionar_tabuleiro(conexao_bd, peao=1)
     r = {
         'id': 1,
         'pos': 2,
         'pos_inicial': 3,
         'eh_inicio': False,
         'eh_finalizado': True
     }
     self.assertDictEqual(r, x, 'selecionando tabuleiro')
     x = BD.selecionar_tabuleiro(conexao_bd, pos=2)
     self.assertDictEqual(x[0], r, 'selecionando tabuleiro 2')
예제 #4
0
def adicionar_peoes(c, lista_ids, lista_posicoes=None):
    """
    Recebe uma lista de peoes e uma lista de posicoes atuais e salva na tabela.
    Retorna 0 se sucesso,
    1 se id repetido,
    2 se lista de posicoes invalida,
    3 se ja foram acrescentadas todas as cores,
    """

    global cores_acrescentadas
    # tamanhos de listas diferentes
    if lista_posicoes is not None and len(lista_ids) != len(lista_posicoes):
        return 2

    # ja acrescentaram todas as cores
    if cores_acrescentadas == N_CORES:
        return 3

    # quantidade de um time diferente de quantidade definida de peoes
    if len(lista_ids) != N_PEOES:
        return 2

    for i, id_peao in enumerate(lista_ids):
        # for p in tabela_peoes:
        #     if id_peao == p['id']:
        #        return 1
        if baseDados.selecionar_tabuleiro(c, id_peao) != -1:
            return 1

        d = dict()
        d['id'] = id_peao
        d['pos_inicial'] = lista_posicao_iniciais[cores_acrescentadas][i]
        if lista_posicoes is not None:
            d['pos'] = lista_posicoes[i]
            d['eh_finalizado'] = lista_posicoes[i] in lista_posicao_finais
            d['eh_inicio'] = lista_posicoes[i] in lista_posicao_iniciais
        else:
            d['pos'] = d['pos_inicial']
            d['eh_finalizado'] = False
            d['eh_inicio'] = True

        # tabela_peoes.append(d)
        baseDados.adicionar_tabuleiro(c, d['id'], d['pos'], d['pos_inicial'],
                                      d['eh_inicio'], d['eh_finalizado'])

    cores_acrescentadas += 1

    return 0
예제 #5
0
def recupera_partida_completa(c):
    """
    Recupera a partida salva e joga no BD.
    Recupera também os dados extras e retorna o dicionario como fornecido para salvar
    Retorna None se nao tiver nenhuma partida salva.
    """

    nome_arquivo = PATH + ARQUIVO_PARTIDA
    try:
        with open(nome_arquivo, 'r') as f:
            tree = ET.parse(f)
            jogo = tree.getroot()

    except FileNotFoundError:
        return None

    lista_peoes = []
    lista_tabuleiro = []

    # LENDO AS peoes
    peoes = jogo.find('peoes')
    for peao in peoes.findall('peao'):
        d = dict()
        for atr in peao:
            # print(atr.tag, atr.attrib['tipo'], atr.text)
            # tag = nome do atributo
            # text = conteudo do atributo
            # attrib['tipo'] = tipo do atributo para converter
            d[atr.tag] = _converte_objeto(atr.text, atr.attrib['tipo'])
        lista_peoes.append(d)

    # ESCREVENDO NA BASE DE DADOS
    baseDados.limpar_peao(c)
    for peao in lista_peoes:
        baseDados.adicionar_peao(c, peao['id'], peao['cor'])

    # LENDO OS TABULEIROS
    baseDados.limpar_tabuleiro(c)
    tabuleiros = jogo.find('tabuleiros')
    for tabuleiro in tabuleiros.findall('tabuleiro'):
        d = dict()
        for atr in tabuleiro:
            # print(atr.tag, atr.attrib['tipo'], atr.text)
            # tag = nome do atributo
            # text = conteudo do atributo
            # attrib['tipo'] = tipo do atributo para converter
            d[atr.tag] = _converte_objeto(atr.text, atr.attrib['tipo'])
        lista_tabuleiro.append(d)

    # ESCREVENDO NA BASE DE DADOS
    for tab in lista_tabuleiro:
        # pode ser otimizada a usar executemany do SQL
        baseDados.adicionar_tabuleiro(c, tab['id'], tab['pos'],
                                      tab['pos_inicial'], tab['eh_inicio'],
                                      tab['eh_finalizado'])

    # RECUPERANDO OS DADOS
    dados = jogo.find('dados')
    if dados is None:
        return {}

    # todos os dados sao filhos de "dados"

    dicionario_dados = dict()
    for dado in dados:
        # print(dado.tag, dado.attrib['tipo'], dado.text)
        if dado.attrib['tipo'] == 'list':
            if dado.text is None:
                dicionario_dados[dado.tag] = []
            else:
                dicionario_dados[dado.tag] = [
                    _converte_objeto(x, dado.attrib['subtipo'])
                    for x in dado.text.split(",")
                ]
        else:
            dicionario_dados[dado.tag] = _converte_objeto(
                dado.text, dado.attrib['tipo'])

    return dicionario_dados
예제 #6
0
 def test_adicionar_tabuleiro(self):
     BD.limpar_tabuleiro(conexao_bd)
     x = BD.adicionar_tabuleiro(conexao_bd, 0, 1, 2, True, False)
     self.assertEqual(0, x, 'adicionando tabuleiro')
     x = BD.adicionar_tabuleiro(conexao_bd, 0, 101, 202, False, True)
     self.assertEqual(-1, x, 'adicionando tabuleiro 2')
예제 #7
0
 def test_limpando_tabuleiro(self):
     BD.adicionar_tabuleiro(conexao_bd, 99, 0, 0, False, False)
     x = BD.limpar_tabuleiro(conexao_bd)
     self.assertEqual(0, x, 'limpando tabuleiro')
     x = BD.selecionar_tabuleiro(conexao_bd, 99)
     self.assertEqual(-1, x, 'limpando tabuleiro 2')