Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ExamPreparationE;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Scanner;
- import java.util.TreeMap;
- public class HerosOfCodeAndLogicVII {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int n = Integer.parseInt(scanner.nextLine());
- //Първа част - данни за герои
- //герои(текст) - MP(число)
- TreeMap<String, Integer> heroesMP = new TreeMap<>();
- //герои(текст) - HP(число)
- Map<String, Integer> heroesHP = new TreeMap<>();
- for (int hero = 1; hero <= n; hero++) {
- String data = scanner.nextLine();
- String[] splitData = data.split("\\s+"); //[{hero name}, {hp}, {mp}]
- String heroName = splitData[0];
- int hp = Integer.parseInt(splitData[1]);
- int mp = Integer.parseInt(splitData[2]);
- //max HP=100
- if (hp <= 100) {
- heroesHP.put(heroName, hp);
- }
- if (mp <= 200) {
- heroesMP.put(heroName, mp);
- }
- //max MP=200
- }
- //Втора част - команди
- String command = scanner.nextLine();
- //CastSpell – {hero name} – {MP needed} – {spell name} -> ["CastSpell", "{hero name}", "{MP needed}", "{spell name}"]
- //TakeDamage – {hero name} – {damage} – {attacker} -> ["TakeDamage", "{hero name}", "{damage}", "{attacker}"]
- //Recharge – {hero name} – {amount} -> ["Recharge", "{hero name}", "{amount}"]
- //Heal – {hero name} – {amount} -> ["Heal", "{hero name}", "{amount}"]
- while (!command.equals("End")) {
- String[] commandParameters = command.split(" - ");
- String commandName = commandParameters[0];
- String heroName = commandParameters[1];
- switch (commandName) {
- case "CastSpell":
- int mpNeeded = Integer.parseInt(commandParameters[2]);
- String spellName = commandParameters[3];
- int currentMP = heroesMP.get(heroName);
- if (currentMP >= mpNeeded) {
- int mpLeft = currentMP - mpNeeded;
- System.out.printf("%s has successfully cast %s and now has %d MP!%n", heroName, spellName, mpLeft);
- } else {
- System.out.printf("%s does not have enough MP to cast %s!%n", heroName, spellName);
- }
- break;
- case "TakeDamage":
- int demage = Integer.parseInt(commandParameters[2]);
- String attacker = commandParameters[3];
- int currentHP = heroesHP.get(heroName);
- int leftHP = currentHP - demage;
- if (leftHP > 0) {
- System.out.printf("%s was hit for %d HP by %s and now has %d HP left!%n", heroName, demage, attacker, leftHP);
- } else {
- System.out.printf("%s has been killed by %s!%n", heroName, attacker);
- heroesHP.remove(heroName);
- heroesMP.remove(heroName);
- }
- break;
- case "Recharge":
- int amountRecharge = Integer.parseInt(commandParameters[2]);
- int currentForRecharge = heroesMP.get(heroName);
- int increasedMP = currentForRecharge + amountRecharge;
- if (increasedMP > 200) {
- increasedMP = 200;
- }
- heroesMP.put(heroName, increasedMP);
- System.out.printf("%s recharged for %d MP!%n", heroName, increasedMP - currentForRecharge);
- break;
- case "Heal":
- int amountHeal = Integer.parseInt(commandParameters[2]);
- int currentForHeal = heroesHP.get(heroName);
- int increasedHP = currentForHeal + amountHeal;
- if (increasedHP > 100) {
- increasedHP = 100;
- }
- heroesHP.put(heroName, increasedHP);
- System.out.printf("%s healed for %d HP!%n", heroName, increasedHP - currentForHeal);
- break;
- }
- command = scanner.nextLine();
- }
- heroesHP.entrySet().stream()
- .sorted((h1, h2) -> Integer.compare(h2.getValue(), h1.getValue())).forEach(heroEntry ->{
- String heroName = heroEntry.getKey();
- System.out.println(heroEntry.getKey());
- System.out.println(" HP: " + heroEntry.getValue());
- System.out.println(" MP: " + heroesMP.get(heroName));
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement