diff --git a/src/main/java/cz/vsb/fei/efrei/lab04/World.java b/src/main/java/cz/vsb/fei/efrei/lab04/World.java new file mode 100644 index 0000000000000000000000000000000000000000..51f693f07468fbeaed1fba20552b5e2746fab73f --- /dev/null +++ b/src/main/java/cz/vsb/fei/efrei/lab04/World.java @@ -0,0 +1,114 @@ +package cz.vsb.fei.efrei.lab04; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Random; + +public class World implements Iterable<Fighter> { + private static final int countOfHeros = 2; + private static final int countOfMonsters = 3; + List<Hero> heros; + List<Monster> monsters; + + public World() { + heros = new ArrayList<>(countOfHeros); + for (int i = 0; i < countOfHeros; i++) { + heros.add(new Hero(Utils + .generateHeroName())); + } + monsters= new ArrayList<>(countOfMonsters); + for (int i = 0; i < countOfMonsters; i++) { + monsters.add(new Monster( + Utils.generateMonsterName())); + } + } + + @Override + public Iterator<Fighter> iterator() { + return new WorldIterator(); + } + + public class WorldIterator + implements Iterator<Fighter> { + + int index = 0; + + @Override + public boolean hasNext() { + return index < heros.size() + + monsters.size(); + } + + @Override + public Fighter next() { + Fighter f; +// System.out.println(index); + if(index < heros.size()) { + f = heros.get(index); + index++; + } else { + int monsterIndex = index-heros.size(); +// System.out.println("monster index:" +// + monsterIndex); + if(monsterIndex >= + monsters.size()) { + throw + new NoSuchElementException( + "No more fighters."); + } + f = monsters.get(monsterIndex); + index++; + } + return f; + } + + @Override + public void remove() { + int indexToRemove = index - 1; + if(indexToRemove < heros.size()) { + heros.remove(indexToRemove); + index--; + } else { + int monsterIndex = + indexToRemove - heros.size(); + if(monsterIndex >= + monsters.size()) { + throw + new NoSuchElementException( + "No more fighters."); + } + monsters.remove(monsterIndex); + index--; + } + } + + } + + public static void main(String[] args) { + Random random = new Random(); + World world = new World(); + for (Fighter fighter : world) { + System.out.println(fighter); + } + System.out.println("========================================================"); + + Iterator<Fighter> iter = world.iterator(); + while (iter.hasNext()) { + Fighter fighter = iter.next(); + if(random.nextBoolean()) { + iter.remove(); + System.out.println( + "Removing fighter: " + + fighter); + } + } + System.out.println("========================================================"); + for (Fighter fighter : world) { + System.out.println(fighter); + } + + } + +}