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 o herói e para o monstro, o dano causado é calculado subtraindo a pontuação de defesa do oponente da pontuação de ataque do atacante multiplicada por dois.
Em cada rodada, o herói ataca primeiro, e sua quantidade de dano é subtraída do HP do monstro. Se o monstro sobreviver (HP > 0), é a vez dele atacar. 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: somente quando seu HP for igual ou menor que 10, uma poção pode (e deve) ser usada para recuperar 10 HP no início de uma nova rodada. Quando o herói se cura, 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 hash contendo as estatísticas dos personagens (as que têm o prefixo p são as estatísticas do herói e as que têm o prefixo m são as do 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 deadNotas
- 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.