diff --git a/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java b/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java index 6ed784a1c675e56e0de06b2c5d29819043c9fea7..f8966b97ee846a85e9cd1c36dc5a2670cd3ef826 100644 --- a/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java +++ b/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java @@ -1,5 +1,10 @@ package cz.vsb.fei.efrei.lab03; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import java.util.Random; import java.util.Scanner; @@ -7,34 +12,113 @@ public class DangerWorld { private static final Random RANDOM = new Random(); public static void main(String[] args) { - Fighter[] fighters = new Fighter[6]; + List<Fighter> fighters = new ArrayList<>(); try (Scanner s = new Scanner(System.in)) { System.out.println("Type name of monster:"); String name = s.next(); Monster monster = new Monster(name); - fighters[0] = monster; - fighters[1] = new Monster("King"); - fighters[2] = new Monster("Queen"); - fighters[3] = new Monster("Fairy"); - fighters[4] = new Hero("Shrek"); - fighters[5] = new Hero("Cinderela"); + fighters.add(monster); + fighters.add(new Monster("King")); + fighters.add(new Monster("Queen")); + fighters.add(new Monster("Fairy")); + fighters.add(new Hero("Shrek")); + fighters.add(new Hero("Cinderela")); + + int countOfHeros = RANDOM.nextInt(200); + for (int i = 0; i < countOfHeros; i++) { + fighters.add(new Hero(Utils.generateHeroName())); + } + + int countOfMonsters = RANDOM.nextInt(250); + for (int i = 0; i < countOfMonsters; i++) { + fighters.add(new Monster(Utils.generateMonsterName())); + } + + int sumStrenght = 0; + for (Fighter fighter : fighters) { + sumStrenght += fighter.getStrenght(); + } + System.out.println("Average strenght of all fighters is " + sumStrenght / fighters.size()); + int sumStrenghtOfHeroes = 0; + int numberOfHeroes = 0; + int sumStrenghtOfMonsters = 0; + int numberOfMonsters = 0; + for (Fighter fighter : fighters) { + if (fighter instanceof Monster) { + sumStrenghtOfMonsters += fighter.getStrenght(); + numberOfMonsters++; + } else if (fighter instanceof Hero) { + sumStrenghtOfHeroes += fighter.getStrenght(); + numberOfHeroes++; + } + + } + System.out.println("Average strenght of all Heros is " + sumStrenghtOfHeroes / numberOfHeroes); + System.out.println("Average strenght of all Monsters is " + sumStrenghtOfMonsters / numberOfMonsters); - int rounds = 100; + int rounds = 1000; for (int i = 0; i < rounds; i++) { - Fighter fighter1 = fighters[RANDOM.nextInt(6)]; - Fighter fighter2 = fighters[RANDOM.nextInt(6)]; + Fighter fighter1 = fighters.get(RANDOM.nextInt(fighters.size())); + Fighter fighter2 = fighters.get(RANDOM.nextInt(fighters.size())); try { fighter1.attackedBy(fighter2); } catch (AlreadyDeadException e) { System.out.println( - "Ups! Fighter " - + fighter2.getName() - + " attack already dead " - + fighter1.getName()); + "Ups! Fighter " + fighter2.getName() + " attack already dead " + fighter1.getName()); + } + } + + int countDeath = 0; +// List<Fighter> deads = new ArrayList<>(); +// for (Fighter fighter : fighters) { +// if(!fighter.isAlive()) { +// countDeath++; +// deads.add(fighter); +// } +// } int countOfHeros = RANDOM.nextInt(200); + +// fighters.removeAll(deads); +// for (int i = fighters.size()-1; i>=0; i--) { +// if(!fighters.get(i).isAlive()) { +// countDeath++; +// fighters.remove(i); +// } +// } + + Iterator<Fighter> iterator = fighters.iterator(); + while (iterator.hasNext()) { + if (!iterator.next().isAlive()) { + iterator.remove(); + countDeath++; } } + + System.out.println("Number of deats:" + countDeath); + + for (Fighter fighter2 : fighters) { + if (!fighter2.isAlive()) { + System.out.println("Fount dead fighter " + fighter2.getName()); + } + } + + Map<String, Integer> namesCountMap = new HashMap<>(); + for (Fighter fighter : fighters) { + if (namesCountMap.containsKey(fighter.getName())) { + Integer count = namesCountMap.get(fighter.getName()); + int newCount = count + 1; + namesCountMap.put(fighter.getName(), newCount); + } else { + namesCountMap.put(fighter.getName(), 1); + } + } + + for (String name1 : namesCountMap.keySet()) { + int count = namesCountMap.get(name1); + System.out.println(name1 + ": " + count); + } + } }