Пример #1
0
 async def test_must_go_to_the_beginning_of_the_board_after_20th_step(self):
     _j = Jogador(personalidade=PERSONALIDADES[0])
     _j.posicao = 19
     steps = 3
     expected = (_j.posicao + steps) - 21
     rules.andar_casas(_j, steps)
     self.assertEqual(_j.posicao, expected)
Пример #2
0
 async def test_must_pay_rent(self):
     valor_compra = 100
     valor_aluguel = 10
     _j1 = Jogador(personalidade=PERSONALIDADES[0])
     _j2 = Jogador(personalidade=PERSONALIDADES[0])
     _p = Propriedade(valor_compra=valor_compra, valor_aluguel=valor_aluguel, dono=_j2)
     rules.pagar_aluguel(_j1, _p)
     self.assertEqual(_j2.saldo, 310)
     self.assertEqual(_j1.saldo, 290)
Пример #3
0
 async def test_must_buy_property_if_cautious_and_balance_is_80_and_has_money(self):
     _j1 = Jogador(personalidade=PERSONALIDADES[2])
     _p = Propriedade(valor_compra=220, valor_aluguel=150)
     rules.comprar_propriedade(_j1, _p)
     self.assertEqual(_j1.propriedades[0], _p)
     self.assertEqual(_p.dono, _j1)
     self.assertEqual(_j1.saldo, 80)
Пример #4
0
def andar_casas(jogador: Jogador, casas: int) -> Jogador:
    """
    Atualiza a posição do jogador de acordo com o número no dado

    Params:
    - Jogador: O jogador do turno
    - Casas: A quantidade de casas a andar

    Returns:
    O jogador com a posição atualizada
    """
    total = jogador.posicao + casas
    if total < 20:
        jogador.posicao = total
    else:
        jogador.posicao = total - 21
        atualizar_saldo_fim_tabuleiro(jogador)
    return jogador
Пример #5
0
def comprar_propriedade(jogador: Jogador,
                        propriedade: Propriedade) -> (Jogador, Propriedade):
    """
    Efetua a venda da propriedade de acordo com o saldo e o perfil do jogador
    e caso a propriedade não tenha dono.

    Params:
    - jogador: O jogador que pretende comprar a propriedade
    - propriedade: A propriedade a ser adquirida pelo jogador

    Returns:
    Uma tupla (jogador, propriedade) com os resultados finais da operação.
    Caso não haja venda, o retorno é igual aos parâmetros de entrada.
    """
    tem_saldo_para_comprar = jogador.saldo >= propriedade.valor_compra
    propriedade_nao_tem_dono = propriedade.dono is None

    if tem_saldo_para_comprar and propriedade_nao_tem_dono:
        saldo_final_jogador = jogador.saldo - propriedade.valor_compra
        if jogador.personalidade == "impulsivo":
            jogador.saldo = saldo_final_jogador
            jogador.propriedades.append(propriedade)
            propriedade.dono = jogador

        if jogador.personalidade == "exigente":
            if propriedade.valor_aluguel > 50:
                jogador.saldo = saldo_final_jogador
                jogador.propriedades.append(propriedade)
                propriedade.dono = jogador

        if jogador.personalidade == "cauteloso":
            if saldo_final_jogador == 80:
                jogador.saldo = saldo_final_jogador
                jogador.propriedades.append(propriedade)
                propriedade.dono = jogador

        if jogador.personalidade == "aleatório":
            if choice([0, 1]) == 1:
                jogador.saldo = saldo_final_jogador
                jogador.propriedades.append(propriedade)
                propriedade.dono = jogador

    return jogador, propriedade
Пример #6
0
async def criar_jogadores() -> List[Jogador]:
    """
    Cria 4 jogadores para uma nova partida

    Returns:
    - Uma lista com  4 objetos da classe Jogador
    """
    jogadores = []
    for i in range(0, 4):
        jogadores.append(Jogador(personalidade=PERSONALIDADES[i]))

    shuffle(jogadores)
    return jogadores
Пример #7
0
def pagar_aluguel(jogador: Jogador, propriedade: Propriedade) -> Jogador:
    """
    Cobra o aluguel de uma propriedade quando um jogador passa por ela
    Params:
    - jogador: O jogador a ser cobrado.
    - propriedade: Propriedade na qual o jogador parou.

    Returns:
    - O jogador que pagou o aluguel, com seu saldo atualizado.
    """
    propriedade_de_terceiro = id(
        propriedade.dono) not in [id(None), id(jogador)]
    if propriedade_de_terceiro:
        saldo_inquilino = jogador.saldo - propriedade.valor_aluguel
        saldo_proprietario = propriedade.dono.saldo + propriedade.valor_aluguel
        jogador.saldo = saldo_inquilino
        propriedade.dono.saldo = saldo_proprietario
    return jogador
Пример #8
0
def turno(jogador: Jogador, propriedades: List[Propriedade]):
    """
    Executa o turno de um jogador. Rola o dado, anda o
    número de casas necessárias, compra um imóvel ou
    para o aluguel de acordo com as regras estabelecidas.

    Params:
    - Jogador: O jogador deste turno
    - Propriedades: A lista de propriedades do jogo
    """
    if jogador.saldo > 0:
        numero_dado = rolar_dado()
        andar_casas(jogador, numero_dado)
        propriedade = propriedades[jogador.posicao]
        comprar_propriedade(jogador, propriedade)
        pagar_aluguel(jogador, propriedade)
    else:
        if jogador.propriedades:
            for p in jogador.propriedades:
                p.dono = None
            jogador.propriedades = []
Пример #9
0
def cadastrar_jogador():
    nome = str(request.form['nome'])
    idade = int(request.form['idade'])
    id_clube = int(request.form['id_clube'])
    altura = request.form['altura']
    peso = request.form['peso']
    if altura:
        altura = int(altura)
    else:
        altura = None
    if peso:
        peso = int(peso)
    else:
        peso = None
    try:
        jogador = Jogador(nome, idade, id_clube, altura, peso)
        db.session.add(jogador)
        db.session.commit()
        flash('Jogador cadastrado com sucesso!', category='success')
    except:
        flash('Erro desconhecido ao cadastrar jogador.', category='danger')
    return redirect(url_for('pg_cadastro_jogador'))
Пример #10
0
 async def test_must_walk_many_steps(self):
     _j = Jogador(personalidade=PERSONALIDADES[0])
     steps = 6
     rules.andar_casas(_j, steps)
     self.assertEqual(_j.posicao, steps)
Пример #11
0
 async def test_must_buy_property_if_picky_and_rent_value_greater_than_50_and_has_money(self):
     _j1 = Jogador(personalidade=PERSONALIDADES[1])
     _p = Propriedade(valor_compra=300, valor_aluguel=150)
     rules.comprar_propriedade(_j1, _p)
     self.assertEqual(_j1.propriedades[0], _p)
     self.assertEqual(_p.dono, _j1)
Пример #12
0
 async def test_must_buy_property_if_impulsive_and_has_money(self):
     _j1 = Jogador(personalidade=PERSONALIDADES[0])
     _p = Propriedade(valor_compra=300, valor_aluguel=150)
     rules.comprar_propriedade(_j1, _p)
     self.assertEqual(_j1.propriedades[0], _p)
     self.assertEqual(_p.dono, _j1)