diff --git a/homework-java-ironbattle/.gitignore b/homework-java-ironbattle/.gitignore
new file mode 100644
index 0000000..480bdf5
--- /dev/null
+++ b/homework-java-ironbattle/.gitignore
@@ -0,0 +1,39 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+.kotlin
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/homework-java-ironbattle/.idea/.gitignore b/homework-java-ironbattle/.idea/.gitignore
new file mode 100644
index 0000000..ab1f416
--- /dev/null
+++ b/homework-java-ironbattle/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/homework-java-ironbattle/.idea/encodings.xml b/homework-java-ironbattle/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/homework-java-ironbattle/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/homework-java-ironbattle/.idea/misc.xml b/homework-java-ironbattle/.idea/misc.xml
new file mode 100644
index 0000000..fdc35ea
--- /dev/null
+++ b/homework-java-ironbattle/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/homework-java-ironbattle/.idea/vcs.xml b/homework-java-ironbattle/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/homework-java-ironbattle/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/homework-java-ironbattle/characters.csv b/homework-java-ironbattle/characters.csv
new file mode 100644
index 0000000..0f91811
--- /dev/null
+++ b/homework-java-ironbattle/characters.csv
@@ -0,0 +1,2 @@
+Warrior,Grommash,150,40,8
+Wizard,Gandalf,80,45,35
\ No newline at end of file
diff --git a/homework-java-ironbattle/pom.xml b/homework-java-ironbattle/pom.xml
new file mode 100644
index 0000000..e54df62
--- /dev/null
+++ b/homework-java-ironbattle/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+
+ org.example
+ homework-java-ironbattle
+ 1.0-SNAPSHOT
+
+
+ 21
+ 21
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/homework-java-ironbattle/src/main/java/Attacker.java b/homework-java-ironbattle/src/main/java/Attacker.java
new file mode 100644
index 0000000..c94f447
--- /dev/null
+++ b/homework-java-ironbattle/src/main/java/Attacker.java
@@ -0,0 +1,3 @@
+public interface Attacker {
+ void attack(Character target);
+}
\ No newline at end of file
diff --git a/homework-java-ironbattle/src/main/java/BattleEngine.java b/homework-java-ironbattle/src/main/java/BattleEngine.java
new file mode 100644
index 0000000..c033dd7
--- /dev/null
+++ b/homework-java-ironbattle/src/main/java/BattleEngine.java
@@ -0,0 +1,42 @@
+public class BattleEngine {
+
+ public void startBattle(Character player1, Character player2) {
+ if (player1 == null || player2 == null) {
+ System.out.println("\n[!] You must create both characters first!");
+ return;
+ }
+
+ boolean finished = false;
+
+ while (!finished) {
+ System.out.println("\n===== BATTLE STARTS =====");
+ int round = 1;
+
+ while (player1.isAlive() && player2.isAlive()) {
+ System.out.println("\n----- Round " + round + " -----");
+
+ player1.attack(player2);
+ player2.attack(player1);
+
+ System.out.println("-> " + player1.getName() + " HP: " + player1.getHp());
+ System.out.println("-> " + player2.getName() + " HP: " + player2.getHp());
+
+ round++;
+ }
+
+ if (!player1.isAlive() && !player2.isAlive()) {
+ System.out.println("\n[!] It's a tie! Both combatants died. Restarting battle...");
+ player1.reset();
+ player2.reset();
+ }
+ else if (player1.isAlive()) {
+ System.out.println("\n*** Winner is: " + player1.getName() + " ***");
+ finished = true;
+ }
+ else {
+ System.out.println("\n*** Winner is: " + player2.getName() + " ***");
+ finished = true;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/homework-java-ironbattle/src/main/java/Character.java b/homework-java-ironbattle/src/main/java/Character.java
new file mode 100644
index 0000000..5d890e4
--- /dev/null
+++ b/homework-java-ironbattle/src/main/java/Character.java
@@ -0,0 +1,40 @@
+import java.util.UUID;
+
+public abstract class Character implements Attacker {
+
+ private String id;
+ private String name;
+ private int hp;
+ private int maxHp;
+ private boolean isAlive = true;
+
+ public Character(String name, int hp) {
+ this.id = UUID.randomUUID().toString();
+ this.name = name;
+ this.hp = hp;
+ this.maxHp = hp;
+ }
+
+ public String getId() { return id; }
+ public String getName() { return name; }
+ public int getHp() { return hp; }
+ public boolean isAlive() { return isAlive; }
+
+ public void setId(String id) { this.id = id; }
+ public void setName(String name) { this.name = name; }
+ public void setAlive(boolean alive) { isAlive = alive; }
+
+ public void setHp(int hp) {
+ this.hp = hp;
+ if (this.hp <= 0) {
+ this.hp = 0;
+ this.isAlive = false;
+ }
+ }
+
+
+ public void reset() {
+ this.hp = maxHp;
+ this.isAlive = true;
+ }
+}
\ No newline at end of file
diff --git a/homework-java-ironbattle/src/main/java/Main.java b/homework-java-ironbattle/src/main/java/Main.java
new file mode 100644
index 0000000..9dc40da
--- /dev/null
+++ b/homework-java-ironbattle/src/main/java/Main.java
@@ -0,0 +1,174 @@
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.util.Random;
+import java.util.Scanner;
+
+public class Main {
+ static Scanner scanner = new Scanner(System.in);
+
+ static Character player1;
+ static Character player2;
+
+ static BattleEngine engine = new BattleEngine();
+
+ public static void main(String[] args) {
+ boolean running = true;
+
+ while (running) {
+ System.out.println("\n===== BATTLE SIMULATOR =====");
+ System.out.println("1. Create Warrior");
+ System.out.println("2. Create Wizard");
+ System.out.println("3. Start Battle");
+ System.out.println("4. Random Simulation");
+ System.out.println("5. Import from CSV");
+ System.out.println("6. Exit");
+ System.out.print("Choose option: ");
+
+ int choice = -1;
+ try {
+ choice = scanner.nextInt();
+ scanner.nextLine();
+ } catch (Exception e) {
+ System.out.println("[!] Invalid input! Please enter a number.");
+ scanner.nextLine();
+ continue;
+ }
+
+ switch (choice) {
+ case 1 -> createCharacter("Warrior");
+ case 2 -> createCharacter("Wizard");
+ case 3 -> {
+ if (player1 == null || player2 == null) {
+ System.out.println("\n[!] You must create both characters first!");
+ } else {
+ engine.startBattle(player1, player2);
+ }
+ }
+ case 4 -> randomSimulation();
+ case 5 -> importFromCSV();
+ case 6 -> {
+ System.out.println("Exiting... Goodbye!");
+ running = false;
+ }
+ default -> System.out.println("[!] Invalid option!");
+ }
+ }
+ }
+
+ private static void importFromCSV() {
+ System.out.print("Enter the name of the CSV file (e.g., characters.csv): ");
+ String fileName = scanner.nextLine();
+
+ try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
+ String line;
+ int count = 0;
+
+ while ((line = br.readLine()) != null) {
+ if (line.trim().isEmpty()) continue;
+
+ String[] data = line.split(",");
+
+ if (data.length < 5) {
+ System.out.println("[!] Skipping invalid line: " + line);
+ continue;
+ }
+
+ String type = data[0].trim();
+ String name = data[1].trim();
+ int stat1 = Integer.parseInt(data[2].trim());
+ int stat2 = Integer.parseInt(data[3].trim());
+ int stat3 = Integer.parseInt(data[4].trim());
+
+ if (type.equalsIgnoreCase("Warrior")) {
+ assignCharacter(new Warrior(name, stat1, stat2, stat3));
+ count++;
+ } else if (type.equalsIgnoreCase("Wizard")) {
+ assignCharacter(new Wizard(name, stat1, stat2, stat3));
+ count++;
+ } else {
+ System.out.println("[!] Unknown character type: " + type);
+ }
+
+ if (count == 2) {
+ System.out.println("Two characters imported. Stopping read process.");
+ break;
+ }
+ }
+
+ System.out.println("\n*** Import finished successfully! ***");
+
+ } catch (Exception e) {
+ System.out.println("[!] Error reading file: " + e.getMessage());
+ System.out.println("Make sure the file exists and is in the correct directory.");
+ }
+ }
+
+ private static int getValidInput(String prompt, int min, int max) {
+ int value;
+ while (true) {
+ System.out.print(prompt + " (" + min + "-" + max + "): ");
+ try {
+ value = scanner.nextInt();
+ if (value >= min && value <= max) {
+ break;
+ } else {
+ System.out.println("[!] Error: Value must be between " + min + " and " + max + "!");
+ }
+ } catch (Exception e) {
+ System.out.println("[!] Error: Please enter a valid number!");
+ scanner.nextLine();
+ }
+ }
+ return value;
+ }
+
+ private static void createCharacter(String type) {
+ System.out.print("Enter name for " + type + ": ");
+ String name = scanner.nextLine();
+
+ if (type.equals("Warrior")) {
+ int hp = getValidInput("Enter HP", 100, 200);
+ int stamina = getValidInput("Enter Stamina", 10, 50);
+ int strength = getValidInput("Enter Strength", 1, 10);
+ assignCharacter(new Warrior(name, hp, stamina, strength));
+ } else if (type.equals("Wizard")) {
+ int hp = getValidInput("Enter HP", 50, 100);
+ int mana = getValidInput("Enter Mana", 10, 50);
+ int intelligence = getValidInput("Enter Intelligence", 1, 50);
+ assignCharacter(new Wizard(name, hp, mana, intelligence));
+ }
+
+ scanner.nextLine();
+ System.out.println("\n*** " + type + " created successfully! ***");
+ }
+
+ private static void assignCharacter(Character c) {
+ if (player1 == null) {
+ player1 = c;
+ System.out.println("[Player 1 set to " + c.getName() + " (" + c.getClass().getSimpleName() + ")]");
+ } else if (player2 == null) {
+ player2 = c;
+ System.out.println("[Player 2 set to " + c.getName() + " (" + c.getClass().getSimpleName() + ")]");
+ } else {
+ System.out.println("[Both slots full! Overwriting Player 1...]");
+ player1 = c;
+ }
+ }
+
+ public static void randomSimulation() {
+ Random random = new Random();
+
+ player1 = new Warrior("RandomWarrior",
+ 100 + random.nextInt(101),
+ 10 + random.nextInt(41),
+ 1 + random.nextInt(10));
+
+ player2 = new Wizard("RandomWizard",
+ 50 + random.nextInt(51),
+ 10 + random.nextInt(41),
+ 1 + random.nextInt(50));
+
+ System.out.println("\n[!] Random characters created!");
+ engine.startBattle(player1, player2);
+ }
+}
\ No newline at end of file
diff --git a/homework-java-ironbattle/src/main/java/Warrior.java b/homework-java-ironbattle/src/main/java/Warrior.java
new file mode 100644
index 0000000..7825ef8
--- /dev/null
+++ b/homework-java-ironbattle/src/main/java/Warrior.java
@@ -0,0 +1,47 @@
+import java.util.Random;
+
+public class Warrior extends Character {
+
+ private int stamina;
+ private int maxStamina;
+ private int strength;
+ private Random random = new Random();
+
+ public Warrior(String name, int hp, int stamina, int strength) {
+ super(name, hp);
+ this.stamina = stamina;
+ this.maxStamina = stamina;
+ this.strength = strength;
+ }
+
+ public int getStamina() { return stamina; }
+ public void setStamina(int stamina) { this.stamina = stamina; }
+ public int getStrength() { return strength; }
+ public void setStrength(int strength) { this.strength = strength; }
+
+ @Override
+ public void attack(Character target) {
+ boolean isHeavyAttack = random.nextBoolean();
+
+ if (isHeavyAttack && stamina >= 5) {
+ int damage = strength;
+ target.setHp(target.getHp() - damage);
+ stamina -= 5;
+ System.out.println(getName() + " used Heavy Attack! Damage: " + damage + " | Stamina left: " + stamina);
+ } else if (stamina >= 1) {
+ int damage = strength / 2;
+ target.setHp(target.getHp() - damage);
+ stamina += 1;
+ System.out.println(getName() + " used Weak Attack! Damage: " + damage + " | Stamina: " + stamina);
+ } else {
+ stamina += 2;
+ System.out.println(getName() + " had no stamina and recovered! Stamina: " + stamina);
+ }
+ }
+
+ @Override
+ public void reset() {
+ super.reset();
+ this.stamina = maxStamina;
+ }
+}
\ No newline at end of file
diff --git a/homework-java-ironbattle/src/main/java/Wizard.java b/homework-java-ironbattle/src/main/java/Wizard.java
new file mode 100644
index 0000000..b527974
--- /dev/null
+++ b/homework-java-ironbattle/src/main/java/Wizard.java
@@ -0,0 +1,51 @@
+import java.util.Random;
+
+public class Wizard extends Character {
+
+ private int mana;
+ private final int maxMana;
+ private int intelligence;
+ private Random random = new Random();
+
+ public Wizard(String name, int hp, int mana, int intelligence) {
+ super(name, hp);
+ this.mana = mana;
+ this.maxMana = mana;
+ this.intelligence = intelligence;
+ }
+
+
+ public int getMana() { return mana; }
+
+ public void setMana(int mana) { this.mana = mana; }
+
+ public int getIntelligence() { return intelligence; }
+
+ public void setIntelligence(int intelligence) { this.intelligence = intelligence; }
+
+ @Override
+ public void attack(Character target) {
+ boolean castFireball = random.nextBoolean();
+
+ if (castFireball && mana >= 5) {
+ int damage = intelligence;
+ target.setHp(target.getHp() - damage);
+ mana -= 5;
+ System.out.println(getName() + " cast Fireball! Damage: " + damage + " | Mana left: " + mana);
+ } else if (mana >= 1) {
+ int damage = 2;
+ target.setHp(target.getHp() - damage);
+ mana += 1;
+ System.out.println(getName() + " used Staff Hit! Damage: " + damage + " | Mana: " + mana);
+ } else {
+ mana += 2;
+ System.out.println(getName() + " had no mana and recovered! Mana: " + mana);
+ }
+ }
+
+ @Override
+ public void reset() {
+ super.reset();
+ this.mana = maxMana;
+ }
+}
\ No newline at end of file