Heróis contra Monstros: um sistema de batalha para um jogo de RPG

Você está implementando um sistema de batalha para um jogo de RPG simples. Um herói está lutando contra vários monstros, e precisa determinar o resultado de cada escaramuça. O herói e os monstros compartilham algumas estatísticas:

  • HP ou Health Points: a quantidade de dano que o personagem pode suportar. Se chegar a 0 (ou menos), o personagem morre.
  • ATT ou Attack: a capacidade ofensiva do personagem.
  • DEF ou Defense: a capacidade defensiva do personagem.

Para qualquer um dos dois, o dano causado é calculado subtraindo a defesa do oponente do ataque do atacante multiplicado por dois.

Em cada rodada, o herói ataca primeiro, e seu dano é subtraído do HP do monstro. Se o monstro sobreviver (HP > 0), ele ataca. Se o herói sobreviver (HP > 0), uma nova rodada começa. O herói também pode ter algumas POT, ou Healing Potions, na mochila: quando seu HP for igual ou menor que 10, ele deve usar uma poção no início de uma nova rodada para recuperar 10 HP. Ao se curar, ele não pode atacar, mas recebe apenas metade do dano do ataque do monstro. Cada poção pode ser usada apenas uma vez e então deve ser descartada.

Dado um dicionário contendo as estatísticas dos personagens (as chaves com prefixo p correspondem ao herói e as com prefixo m ao monstro), você deve retornar uma string:

  • "Victory in x rounds" se o herói vencer.
  • "Game Over in x rounds" se o monstro vencer.

(com x sendo o número de rodadas decorridas)

Exemplos

battle({
  "pHP": 12,
  "pATT": 10,
  "pDEF": 10,
  "pPOT": 0,
  "mHP": 20,
  "mATT": 6,
  "mDEF": 14
}) ➞ "Victory in 4 rounds"

# Hero's damage rate = (10 * 2) - 14 = 6
# Monster's damage rate = (6 * 2) - 10 = 2
# Round 1: mHP - 6 = 14, pHP - 2 = 10
# Round 2: No potions to use! mHP - 6 = 8, pHP - 2 = 8
# Round 3: mHP - 6 = 2, pHP - 2 = 6
# Round 4: mHP - 6 = -4 ... monster is dead

battle({
  "pHP": 10,
  "pATT": 10,
  "pDEF": 10,
  "pPOT": 2,
  "mHP": 10,
  "mATT": 8,
  "mDEF": 14
}) ➞ "Victory in 3 rounds"

# Hero's damage = 6, monster's damage = 6
# Round 1: mHp - 6 = 4, pHP - 6 = 4
# Round 2: Player uses a potion, heals 10 HP, receive half the monster damage, pHP = 11
# Round 3: mHP - 6 = -2 ... monster is dead

battle({
  "pHP": 12,
  "pATT": 7,
  "pDEF": 6,
  "pPOT": 2,
  "mHP": 30,
  "mATT": 8,
  "mDEF": 10
}) ➞ "Game Over in 5 rounds"

# Hero's damage rate = 4, Monster's damage rate = 10
# Round 1: mHP - 4 = 26, pHP - 10 = 2
# Round 2: Hero heals 10 hp, monster hit for 5 HP, pHP = 7
# Round 3: Hero heals 10 hp, monster hit for 5 HP, pHP = 12
# Round 4: mHP - 4 = 22, pHP - 10 = 2
# Round 5: No potions to use! mHP - 4 = 18, pHP - 10 = -8 ... hero is dead

Notas

  • O herói ataca (ou se cura) primeiro em cada rodada.
  • Uma poção deve ser usada quando o HP for igual ou menor que 10, exceto na primeira rodada.
  • Quando o herói usa uma poção, ele não pode atacar o monstro na mesma rodada, mas pode se defender do ataque do monstro, recebendo apenas metade do dano.
  • Lembre-se de descartar a poção depois de usá-la.