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)
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)
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)
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
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
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
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
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 = []
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'))
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)
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)
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)