Beispiel #1
0
def atualiza_info(nome, ultima_pontuacao):
    if ultima_pontuacao < 0:
        retorno = 2
    else:
        sqlAtualizaPts = """
            UPDATE Jogador
            SET pontuacao_total = pontuacao_total + %s
            WHERE nome = %s
        """

        sqlAtualizaRecorde = """
            UPDATE Jogador
            SET recorde = %s
            WHERE nome = %s
            AND recorde < %s
        """

        banco = bd.abre_acesso()
        banco['cursor'].execute(sqlAtualizaPts, (ultima_pontuacao, nome))
        if banco['cursor'].rowcount == 1:
            banco['cursor'].execute(sqlAtualizaRecorde,
                                    (ultima_pontuacao, nome, ultima_pontuacao))
            _atualiza_rank(banco)
            retorno = 0
        else:
            retorno = 1

        bd.fecha_acesso(banco)

    return retorno
Beispiel #2
0
def insere(nome):
    if not nome:  #nome nulo
        return 1

    sqlSearch = " SELECT nome FROM Jogador WHERE nome = %s"
    sqlInsert = "INSERT INTO Jogador VALUES (%s, %s, %s, %s, %s)"

    banco = bd.abre_acesso()

    banco['cursor'].execute(sqlSearch, (nome, ))
    if (banco['cursor'].rowcount > 0):  #nome já registrado
        bd.fecha_acesso(banco)
        return 2

    data = datetime.now().date()  #data de hoje
    ranking = None
    pontuacao = recorde = 0

    banco['cursor'].execute(sqlInsert,
                            (nome, data, pontuacao, recorde, ranking))

    _atualiza_rank(banco)

    bd.fecha_acesso(banco)
    return 0
Beispiel #3
0
def registra_desistencia(nome_jogador, data_horario):

    #scripts sql usados ao longo da função

    sqlSearch_tab_pontuacao = ''' SELECT pontuacao FROM Tabela_Pontuacao
                              WHERE nome_jogador = %s AND data_horario = %s'''
    sqlUpdate_tabela = ''' UPDATE Tabela SET desistencia = True
                           WHERE data_horario = %s AND nome_jogador = %s'''
    sqlUpdate_tab_pontuacao = ''' UPDATE Tabela_Pontuacao SET pontuacao = 0
                           WHERE data_horario = %s AND nome_jogador = %s
                           AND pontuacao IS NULL'''

    banco = bd.abre_acesso()
    if not _tabela_jogador_partida_existe(banco, nome_jogador, data_horario)\
       or not _tab_pont_jogador_partida_existe(banco, nome_jogador, data_horario):
        return 1

    banco['cursor'].execute(sqlSearch_tab_pontuacao,
                            (nome_jogador, data_horario))
    tuplas = banco['cursor'].fetchall()
    todas_tuplas_preenchidas = True
    for tupla in tuplas:
        if tupla['pontuacao'] == None:
            todas_tuplas_preenchidas = False
            break
    if todas_tuplas_preenchidas:
        return 2

    banco['cursor'].execute(sqlUpdate_tabela, (data_horario, nome_jogador))
    banco['cursor'].execute(sqlUpdate_tab_pontuacao,
                            (data_horario, nome_jogador))

    bd.fecha_acesso(banco)
    return 0
Beispiel #4
0
def obtem_partidas(data_horario=[], status=[]):
    if isinstance(data_horario, datetime):
        data_horario = [data_horario]
    if isinstance(status, str):
        status = [status]
    if not isinstance(data_horario, list) or not isinstance(status, list):
        return 1

    sqlBusca = """ SELECT * FROM Partida"""

    banco = banco_de_dados.abre_acesso()
    if data_horario:
        sqlBusca += ' WHERE data_horario in (%s{})'.format(
            (len(data_horario) - 1) * ',%s')
        if status:
            sqlBusca += ' AND status in (%s{})'.format(
                (len(status) - 1) * ',%s')
        banco['cursor'].execute(sqlBusca, data_horario + status)
    elif status:
        sqlBusca += ' WHERE status in (%s{})'.format((len(status) - 1) * ',%s')
        banco['cursor'].execute(sqlBusca, status)
    else:
        banco['cursor'].execute(sqlBusca)
    resultado = [dictPartida for dictPartida in banco['cursor']]
    banco_de_dados.fecha_acesso(banco)
    return resultado
Beispiel #5
0
def inicia_partida(nomes):
    if _ha_partida_em_andamento():
        return 2
    if any(not valida_jogador(jogador) for jogador in nomes):
        return 1

    data_horario = datetime.now().replace(microsecond=0)
    banco = banco_de_dados.abre_acesso()
    sql_partida = """INSERT INTO Partida VALUES (%s, %s)"""
    banco['cursor'].execute(sql_partida, (data_horario, 'andamento'))
    banco_de_dados.fecha_acesso(banco)

    for jogador in nomes:
        cod_retorno = tabela.cria_tabela(jogador, data_horario)

    shuffle(nomes)
    partida_atual['data_horario'] = data_horario
    partida_atual['combinacao'] = None
    partida_atual['pts_combinacao'] = None
    partida_atual['turno'] = 1
    partida_atual['tentativas'] = 3
    partida_atual['jogadores'] = nomes
    partida_atual['jogador_da_vez'] = nomes[0]
    partida_atual['status'] = 'andamento'
    partida_atual['salva'] = False

    return data_horario
Beispiel #6
0
def _altera_status_bd(status):
    sql = """UPDATE Partida
             SET status = %s
             WHERE data_horario = %s"""
    banco = banco_de_dados.abre_acesso()
    banco['cursor'].execute(sql, (status, partida_atual['data_horario']))
    banco_de_dados.fecha_acesso(banco)
    return
Beispiel #7
0
def valida_jogador(nome):
    sqlBusca = """ SELECT nome 
                   FROM Jogador
                   WHERE nome = %s """
    banco = bd.abre_acesso()
    banco['cursor'].execute(sqlBusca, (nome, ))
    encontrado = banco['cursor'].rowcount == 1
    bd.fecha_acesso(banco)
    return encontrado
Beispiel #8
0
def remove(nome):
    sqlRemove = """ DELETE
                    FROM Jogador
                    WHERE nome = %s """

    banco = bd.abre_acesso()
    banco['cursor'].execute(sqlRemove, (nome, ))

    retorno = 1 if banco['cursor'].rowcount == 0 else 0

    _atualiza_rank(banco)
    bd.fecha_acesso(banco)
    return retorno
Beispiel #9
0
def remove(nome_jogador, data_horario):
    sqlDelete_tab_pont = ''' DELETE FROM Tabela_Pontuacao
                         WHERE data_horario = %s AND nome_jogador = %s'''
    sqlDelete_tabela = ''' DELETE FROM Tabela
                         WHERE data_horario = %s AND nome_jogador = %s'''

    banco = bd.abre_acesso()
    if not _tabela_jogador_partida_existe(banco, nome_jogador, data_horario)\
       or not _tab_pont_jogador_partida_existe(banco, nome_jogador, data_horario):
        return 1

    banco['cursor'].execute(sqlDelete_tab_pont, (data_horario, nome_jogador))
    banco['cursor'].execute(sqlDelete_tabela, (data_horario, nome_jogador))

    bd.fecha_acesso(banco)
    return 0
Beispiel #10
0
def obtem_info(nomes):
    if type(nomes) == list and all(type(nome) == str for nome in nomes):
        sqlBusca = "SELECT * FROM Jogador "

        if nomes:
            sqlBusca += "WHERE nome = %s "

            for i in range(len(nomes) - 1):
                sqlBusca += "OR nome = %s"

        banco = bd.abre_acesso()
        banco['cursor'].execute(sqlBusca, nomes)
        retorno = [dictJogador for dictJogador in banco['cursor']]
        bd.fecha_acesso(banco)
    else:
        retorno = 1
    return retorno
Beispiel #11
0
def obtem_tabelas(nomes, data_horarios):
    banco = bd.abre_acesso()

    #tratamento das possibilidades das listas fornecidas serem vazias.
    #Variável tuplas_tabela terá infos dos jogadores/partidas extraídas
    #da relação Tabela do banco de dados

    if nomes == [] and data_horarios == []:
        tuplas_tabela = obtem_tab_ambas_vazias(banco)
    elif nomes == []:
        tuplas_tabela = obtem_tab_nomes_vazia(banco, data_horarios)
        if tuplas_tabela == []:
            return 1
    elif data_horarios == []:
        tuplas_tabela = obtem_tab_datas_vazia(banco, nomes)
        if tuplas_tabela == []:
            return 1
    else:
        tuplas_tabela = obtem_tab_nenhuma_vazia(banco, nomes, data_horarios)
        if tuplas_tabela == []:
            return 1

    #script sql usado para buscar pontuação por categoria do jogador

    sqlSearch_tab_pont = ''' SELECT nome_categoria as nome, pontuacao
                         FROM Tabela_Pontuacao
                         WHERE data_horario = %s
                         AND nome_jogador = %s'''

    for elemento in tuplas_tabela:
        #converte para booleano, pois mysql não tem tipo de dado para isso
        if elemento['desistencia'] == 0:
            elemento['desistencia'] = False
        else:
            elemento['desistencia'] = True

        #preenche pontuacao por categoria da lista a ser retornada
        banco['cursor'].execute(
            sqlSearch_tab_pont,
            (elemento['data_horario'], elemento['nome_jogador']))
        lista_pontos_categoria = banco['cursor'].fetchall()
        elemento['pontos_por_categoria'] = lista_pontos_categoria

    bd.fecha_acesso(banco)
    return tuplas_tabela
Beispiel #12
0
def _carrega_dados_partida_atual(root):
    partida_atual.clear()
    data_horario_string = root.find('data_horario').text
    partida_atual['data_horario'] = datetime.strptime(data_horario_string,
                                                      "%Y-%m-%d %H:%M:%S")
    banco = banco_de_dados.abre_acesso()
    sql_partida = """INSERT INTO Partida VALUES (%s, %s)"""
    try:
        banco['cursor'].execute(sql_partida,
                                (partida_atual['data_horario'], 'andamento'))
    except:
        sql_partida = """UPDATE Partida SET status="andamento" where data_horario = %"""
        try:
            banco['cursor'].execute(sql_partida,
                                    (partida_atual['data_horario']))
        except:
            pass

    banco_de_dados.fecha_acesso(banco)
    partida_atual['combinacao'] = list()
    for dado in root.find('combinacao').findall('dado'):
        partida_atual['combinacao'].append(int(dado.text))
    if partida_atual['combinacao']:
        combinacao.inicializa_combinacao(partida_atual['combinacao'])

    pts = partida_atual['pts_combinacao'] = list()
    for categoria in root.find('pts_combinacao').findall('categoria'):
        pts.append({
            'nome': categoria.find('nome').text,
            'pontuacao': int(categoria.find('pontuacao').text)
        })

    jogs = partida_atual['jogadores'] = list()
    for jogador in root.find('jogadores').findall('nome'):
        jogs.append(jogador.text)

    partida_atual['turno'] = int(root.find('turno').text)
    partida_atual['tentativas'] = int(root.find('tentativas').text)
    partida_atual['jogador_da_vez'] = root.find('jogador_da_vez').text
    partida_atual['status'] = 'andamento'
    partida_atual['salva'] = True
    return
Beispiel #13
0
def insere_pontuacao(nome_jogador, data_horario, categoria, pontuacao):
    if pontuacao < 0:
        return 3

    #scripts sql usados ao longo da funçao:

    sqlSearch_Categoria = ''' SELECT nome_categoria FROM Tabela_Pontuacao
                          WHERE nome_categoria = %s'''
    sqlSearch_Pontos = ''' SELECT pontuacao FROM Tabela_Pontuacao
                       WHERE nome_categoria = %s
                       AND nome_jogador = %s AND data_horario = %s'''
    sqlUpdate_tab_pont = ''' UPDATE Tabela_Pontuacao SET pontuacao = %s
                           WHERE data_horario = %s AND nome_jogador = %s
                           AND nome_categoria = %s'''
    sqlUpdate_tabela = ''' UPDATE Tabela SET pontuacao_total = pontuacao_total + %s
                       WHERE data_horario = %s AND nome_jogador = %s'''

    banco = bd.abre_acesso()

    if not _tab_pont_jogador_partida_existe(banco, nome_jogador, data_horario):
        return 1

    banco['cursor'].execute(sqlSearch_Categoria, (categoria, ))
    if banco['cursor'].rowcount == 0:
        return 2

    banco['cursor'].execute(sqlSearch_Pontos,
                            (categoria, nome_jogador, data_horario))
    pontuacao_bd = banco['cursor'].fetchone()
    if pontuacao_bd['pontuacao'] is not None:
        return 4

    banco['cursor'].execute(sqlUpdate_tab_pont,
                            (pontuacao, data_horario, nome_jogador, categoria))
    banco['cursor'].execute(sqlUpdate_tabela,
                            (pontuacao, data_horario, nome_jogador))
    _atualiza_colocacao(banco, data_horario)

    bd.fecha_acesso(banco)
    return 0
Beispiel #14
0
def cria_tabela(nome_jogador, data_horario):
    if not jogador.valida_jogador(nome_jogador):
        return 1

    #scripts sql de inserção das infos dos novos jogadores nas duas
    #relações do banco de dados referentes a cartela (Tabela e
    #Tabela_Pontuacao)

    sqlInsert_tab = ''' INSERT INTO Tabela VALUES (%s,%s,%s,%s,%s) '''
    sqlInsert_tab_pont = ''' INSERT INTO Tabela_Pontuacao
                         VALUES (%s,%s,%s,%s) '''

    banco = bd.abre_acesso()

    if _tabela_jogador_partida_existe(banco, nome_jogador, data_horario):
        bd.fecha_acesso(banco)
        return 2

    if _tab_pont_jogador_partida_existe(banco, nome_jogador, data_horario):
        bd.fecha_acesso(banco)
        return 2

    pontuacao_total = 0
    colocacao = None
    desistencia = False

    banco['cursor'].execute(
        sqlInsert_tab,
        (data_horario, nome_jogador, pontuacao_total, colocacao, desistencia))

    categorias = categoria.obtem_nomes()
    for cat in categorias:
        nome_categoria = cat['nome']
        pontuacao = None
        banco['cursor'].execute(
            sqlInsert_tab_pont,
            (data_horario, nome_jogador, nome_categoria, pontuacao))

    bd.fecha_acesso(banco)
    return 0