From 97a8594807f7bf539aa026ef58a7cc84b9c9f71b Mon Sep 17 00:00:00 2001
From: jez04 <david.jezek@post.cz>
Date: Mon, 21 Oct 2024 15:47:04 +0200
Subject: [PATCH] feat: :tada: solution of lab 06

---
 .../java/cz/vsb/fei/efrei/lab04/World.java    | 114 ++++++++++++++++++
 1 file changed, 114 insertions(+)
 create mode 100644 src/main/java/cz/vsb/fei/efrei/lab04/World.java

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 0000000..51f693f
--- /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);
+		}
+		
+	}
+
+}
-- 
GitLab