Advertisement
dilyana2001

Heroes of Code and Logic VII

Aug 5th, 2021
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function heroesOfCodeAndLogicVII(arr) {
  2.  
  3.     let heroNumber = Number(arr.shift())
  4.     let heroes = {}
  5.     arr.splice(0, heroNumber).map(row => row.split(' ')).map(row => {
  6.         heroes[row[0]] = { hp: Number(row[1]), mp: Number(row[2]) }
  7.     })
  8.  
  9.     let commandParser = {
  10.         'CastSpell': castSpell,
  11.         'TakeDamage': takeDamage,
  12.         'Recharge': recharge,
  13.         'Heal': heal
  14.     }
  15.  
  16.     arr.forEach(line => {
  17.         let [command, ...args] = line.split(' - ')
  18.         if (command !== 'End') {
  19.             console.log(commandParser[command](heroes, ...args))
  20.         }
  21.     })
  22.  
  23.     Object.entries(heroes).sort((a, b) => a[0].localeCompare(b[0])).sort((a, b) => b[1].hp - a[1].hp)
  24.         .map(row => console.log(`${row[0]}\n  HP: ${row[1].hp}\n  MP: ${row[1].mp}`))
  25.  
  26.     function castSpell(heroes, heroName, mpNeeded, spellName) {
  27.         mpNeeded = Number(mpNeeded)
  28.         let hero = heroes[heroName]
  29.         if (hero.mp >= mpNeeded) {
  30.             hero.mp -= mpNeeded
  31.             return `${heroName} has successfully cast ${spellName} and now has ${hero.mp} MP!`
  32.         }
  33.         return `${heroName} does not have enough MP to cast ${spellName}!`
  34.     }
  35.  
  36.     function takeDamage(heroes, heroName, damage, attacker) {
  37.         damage = Number(damage)
  38.         let hero = heroes[heroName]
  39.         hero.hp -= damage
  40.         if (hero.hp > 0) {
  41.             return `${heroName} was hit for ${damage} HP by ${attacker} and now has ${hero.hp} HP left!`
  42.         }
  43.         delete heroes[heroName]
  44.         return `${heroName} has been killed by ${attacker}!`
  45.     }
  46.  
  47.     function recharge(heroes, heroName, amount) {
  48.         amount = Number(amount)
  49.         let hero = heroes[heroName]
  50.         let oldValue = hero.mp
  51.         hero.mp = Math.min(200, hero.mp + amount)
  52.         return `${heroName} recharged for ${hero.mp - oldValue} MP!`
  53.     }
  54.  
  55.     function heal(heroes, heroName, amount) {
  56.         amount = Number(amount)
  57.         let hero = heroes[heroName]
  58.         let oldValue = hero.hp
  59.         hero.hp = Math.min(100, hero.hp + amount)
  60.         return `${heroName} healed for ${hero.hp - oldValue} HP!`
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement