From bcb236a7f6872be8c60d04f41ea7c91ece262e9a Mon Sep 17 00:00:00 2001 From: TricyOne Date: Mon, 27 Oct 2025 11:39:32 +0100 Subject: [PATCH 1/3] conditions and more fixes --- src/main/java/Combat/HasConditions.java | 9 +++ .../java/Combat/OffensiveDamageSpell.java | 6 +- .../java/Combat/OffensiveStatusSpell.java | 22 ++++++++ src/main/java/Combat/Spell.java | 12 +--- src/main/java/Entity/Player.java | 13 ++++- src/test/java/InterestingTests.java | 55 +++++++++++++++---- src/test/java/MagicSystemTest.java | 26 +++++++-- src/test/java/PlayerTest.java | 21 ++++++- src/test/java/SpellTest.java | 10 +++- 9 files changed, 142 insertions(+), 32 deletions(-) create mode 100644 src/main/java/Combat/HasConditions.java create mode 100644 src/main/java/Combat/OffensiveStatusSpell.java diff --git a/src/main/java/Combat/HasConditions.java b/src/main/java/Combat/HasConditions.java new file mode 100644 index 0000000..0ae5145 --- /dev/null +++ b/src/main/java/Combat/HasConditions.java @@ -0,0 +1,9 @@ +package Combat; + +import java.util.List; + +public interface HasConditions { + void addCondition(String condition); + void removeCondition(String condition); + List getConditions(); +} diff --git a/src/main/java/Combat/OffensiveDamageSpell.java b/src/main/java/Combat/OffensiveDamageSpell.java index 05bea11..d1fd239 100644 --- a/src/main/java/Combat/OffensiveDamageSpell.java +++ b/src/main/java/Combat/OffensiveDamageSpell.java @@ -3,9 +3,11 @@ package Combat; import Entity.Entity; public class OffensiveDamageSpell extends Spell { + private final int potency; public OffensiveDamageSpell(String spellName, int cost, int potency) { - super(spellName, cost, potency); + super(spellName, cost); + this.potency = potency; } @Override @@ -15,4 +17,6 @@ public class OffensiveDamageSpell extends Spell { health.setHealth(health.getHealth() - this.getPotency()); } } + + public int getPotency() {return potency;} } diff --git a/src/main/java/Combat/OffensiveStatusSpell.java b/src/main/java/Combat/OffensiveStatusSpell.java new file mode 100644 index 0000000..88b3369 --- /dev/null +++ b/src/main/java/Combat/OffensiveStatusSpell.java @@ -0,0 +1,22 @@ +package Combat; + +import Entity.Entity; + +public class OffensiveStatusSpell extends Spell { + + private final String status; + + public OffensiveStatusSpell(String spellName, int cost, String status) { + super(spellName, cost); + this.status = status; + } + + public void cast(Entity source, Entity target) { + if(source instanceof HasMana mana && target instanceof HasConditions conditions) { + mana.setMana(mana.getMana() - this.getCost()); + conditions.addCondition(this.getStatus()); + } + } + + public String getStatus() {return status;} +} diff --git a/src/main/java/Combat/Spell.java b/src/main/java/Combat/Spell.java index 927442b..66b19b1 100644 --- a/src/main/java/Combat/Spell.java +++ b/src/main/java/Combat/Spell.java @@ -5,12 +5,10 @@ import Entity.Entity; public abstract class Spell { private final String spellName; private int cost; - private int potency; - public Spell(String spellName, int cost, int potency) { + public Spell(String spellName, int cost) { this.spellName = spellName; this.cost = cost; - this.potency = potency; } public String getSpellName() { @@ -21,10 +19,6 @@ public abstract class Spell { return cost; } - public int getPotency() { - return potency; - } - public abstract void cast(Entity source, Entity target); @Override @@ -35,7 +29,6 @@ public abstract class Spell { Spell spell = (Spell) o; if (cost != spell.cost) return false; - if (potency != spell.potency) return false; return spellName.equals(spell.spellName); } @@ -43,12 +36,11 @@ public abstract class Spell { public int hashCode() { int result = spellName.hashCode(); result = 31 * result + cost; - result = 31 * result + potency; return result; } @Override public String toString() { - return spellName + " (Cost: " + cost + ", Potency: " + potency + ")"; + return spellName + " (Cost: " + cost + ")"; } } \ No newline at end of file diff --git a/src/main/java/Entity/Player.java b/src/main/java/Entity/Player.java index 92d76c6..83ed01c 100644 --- a/src/main/java/Entity/Player.java +++ b/src/main/java/Entity/Player.java @@ -2,6 +2,7 @@ package Entity; import Action.Action; import Action.Actor; +import Combat.HasConditions; import Combat.HasHealth; import Combat.HasMana; import Combat.Spell; @@ -13,13 +14,14 @@ import Inventory.HasSpellBook; import java.util.LinkedList; import java.util.List; -public class Player extends Entity implements Movable, Actor, HasInventory, HasSpellBook, HasJob, HasHealth, HasMana { +public class Player extends Entity implements Movable, Actor, HasInventory, HasSpellBook, HasJob, HasHealth, HasMana, HasConditions { protected int health; protected int mana; protected Job job; protected Position position; protected List items = new LinkedList<>(); protected List spells = new LinkedList<>(); + protected List conditions = new LinkedList<>(); public Player(String name, Job job) { super(name); this.job = job; @@ -56,6 +58,15 @@ public class Player extends Entity implements Movable, Actor, HasInventory, HasS public List getSpellBook() {return spells;} + @Override + public List getConditions() {return conditions;} + + @Override + public void addCondition(String condition) {this.conditions.add(condition);} + + @Override + public void removeCondition(String condition) {this.conditions.remove(condition);} + @Override public void performAction(Action action) { action.exectue(this); diff --git a/src/test/java/InterestingTests.java b/src/test/java/InterestingTests.java index bb5f449..8376009 100644 --- a/src/test/java/InterestingTests.java +++ b/src/test/java/InterestingTests.java @@ -1,23 +1,17 @@ -import Action.Actor; -import Combat.HasMana; import Combat.OffensiveDamageSpell; -import Combat.Spell; -import Entity.Entity; +import Combat.OffensiveStatusSpell; import Entity.Player; -import Inventory.HasSpellBook; import Job.Wizard; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.PrintStream; -import java.util.List; import java.util.Scanner; +import static org.junit.jupiter.api.Assertions.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -import static org.mockito.Mockito.*; public class InterestingTests { @@ -42,12 +36,10 @@ public class InterestingTests { player.getSpellBook().add(fireball); int initialMana = player.getMana(); - int initialHealth = player.getHealth(); wizard.castSpell(player); assertThat(player.getMana(), is(initialMana - fireball.getCost())); - assertThat(player.getHealth(), is(initialHealth - fireball.getPotency())); } @Test @@ -63,11 +55,50 @@ public class InterestingTests { player.getSpellBook().add(fireball); int initialMana = player.getMana(); - int initialHealth = player.getHealth(); wizard.castSpell(player); assertThat(player.getMana(),is(initialMana)); - assertThat(player.getHealth(),is(initialHealth)); + } + + @Test + public void testCastSpell_indexOutOfBounds() { + Scanner testScanner = new Scanner(new ByteArrayInputStream("2\n".getBytes())); + wizard = new Wizard(testScanner); + + Player player = new Player("Brick", wizard); + player.setMana(50); + player.setHealth(100); + + OffensiveDamageSpell fireball = new OffensiveDamageSpell("Fireball", 20, 15); + player.getSpellBook().add(fireball); + + ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + PrintStream originalOut = System.out; + System.setOut(new PrintStream(outContent)); + + try { + wizard.castSpell(player); + String output = outContent.toString(); + assertTrue(output.contains("Invalid choice!")); + } finally { + System.setOut(originalOut); + } + + } + + @Test + public void condition_spell_adds_condition() { + Scanner testScanner = new Scanner(new ByteArrayInputStream("1\n".getBytes())); + wizard = new Wizard(testScanner); + + Player player = new Player("Alfon", wizard); + player.setMana(50); + + OffensiveStatusSpell poisonSpray = new OffensiveStatusSpell("poisonSpray", 20, "Poison"); + player.getSpellBook().add(poisonSpray); + + wizard.castSpell(player); + assertThat(player.getConditions().contains("Poison"), is(true)); } } \ No newline at end of file diff --git a/src/test/java/MagicSystemTest.java b/src/test/java/MagicSystemTest.java index c667fb2..b024ab5 100644 --- a/src/test/java/MagicSystemTest.java +++ b/src/test/java/MagicSystemTest.java @@ -4,6 +4,10 @@ import Combat.OffensiveDamageSpell; import Entity.Player; import Job.Wizard; import org.junit.jupiter.api.Test; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + import static org.junit.jupiter.api.Assertions.*; public class MagicSystemTest { @@ -52,10 +56,22 @@ public class MagicSystemTest { } @Test void cant_cast_spell_with_empty_spellbook(){ - var p = defaultPlayer(); - var job = new Wizard(); - p.learnJob(job); - p.performAction(new CastAction()); + ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + PrintStream OriginalOut = System.out; + System.setOut(new PrintStream(outContent)); + try { + var p = defaultPlayer(); + var job = new Wizard(); + p.learnJob(job); + + p.performAction(new CastAction()); + + String output = outContent.toString(); + assertTrue(output.contains("You haven't learned any spells")); + } finally { + System.setOut(OriginalOut); + } } -} + +} \ No newline at end of file diff --git a/src/test/java/PlayerTest.java b/src/test/java/PlayerTest.java index 94ab26b..83fdfd3 100644 --- a/src/test/java/PlayerTest.java +++ b/src/test/java/PlayerTest.java @@ -21,18 +21,35 @@ class PlayerTest { assertFalse(p.isAlive()); } - @Test void get_health_returns_health() { + @Test + void get_health_returns_health() { var p = defaultPlayer(); p.setHealth(10); assertEquals(10, p.getHealth()); } - @Test void get_mana_returns_mana() { + @Test + void get_mana_returns_mana() { var p = defaultPlayer(); p.setMana(10); assertEquals(10, p.getMana()); } + @Test + void get_conditions_returns_conditions() { + var p = defaultPlayer(); + p.addCondition("Poison"); + assertTrue(p.getConditions().contains("Poison")); + } + + @Test + void remove_condition_removes_condition() { + var p = defaultPlayer(); + p.addCondition("Poison"); + p.removeCondition("Poison"); + assertFalse(p.getConditions().contains("Poison")); + } + @Test public void can_change_position() { var p = defaultPlayer(); diff --git a/src/test/java/SpellTest.java b/src/test/java/SpellTest.java index 9ed92f4..e985a50 100644 --- a/src/test/java/SpellTest.java +++ b/src/test/java/SpellTest.java @@ -1,4 +1,5 @@ import Combat.OffensiveDamageSpell; +import Combat.OffensiveStatusSpell; import Combat.Spell; import org.junit.jupiter.api.Test; @@ -9,6 +10,7 @@ public class SpellTest { private Spell defaultSpell() { return new OffensiveDamageSpell("fireball", 20, 40); } + private Spell statusSpell() {return new OffensiveStatusSpell("poisonSpray", 20, "Poison");} @Test void setSpellNameOnCreation(){ @@ -25,6 +27,12 @@ public class SpellTest { @Test void setPotencyOnCreation() { var spell = defaultSpell(); - assertEquals(40, spell.getPotency(), "spell potency should have been set"); + assertEquals(40, ((OffensiveDamageSpell) spell).getPotency(), "spell potency should have been set"); + } + + @Test + void setConditionOnCreation() { + var spell = statusSpell(); + assertEquals("Poison", ((OffensiveStatusSpell) spell).getStatus(), "spell status should have been set"); } } -- 2.39.5 From bcfe476c67eead576c07c5e262f08f2c9bd84e7b Mon Sep 17 00:00:00 2001 From: TricyOne Date: Tue, 28 Oct 2025 08:48:06 +0100 Subject: [PATCH 2/3] preparation for spell targeting system --- src/main/java/Combat/OffensiveDamageSpell.java | 4 ++-- src/main/java/Combat/OffensiveStatusSpell.java | 4 ++-- src/main/java/Combat/Spell.java | 12 +++++++++--- src/main/java/Entity/Entity.java | 9 ++++++++- src/main/java/Job/Wizard.java | 2 +- src/test/java/InterestingTests.java | 8 ++++---- src/test/java/MagicSystemTest.java | 4 ++-- src/test/java/PlayerTest.java | 2 +- src/test/java/SpellTest.java | 4 ++-- 9 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/main/java/Combat/OffensiveDamageSpell.java b/src/main/java/Combat/OffensiveDamageSpell.java index d1fd239..43ed65c 100644 --- a/src/main/java/Combat/OffensiveDamageSpell.java +++ b/src/main/java/Combat/OffensiveDamageSpell.java @@ -5,8 +5,8 @@ import Entity.Entity; public class OffensiveDamageSpell extends Spell { private final int potency; - public OffensiveDamageSpell(String spellName, int cost, int potency) { - super(spellName, cost); + public OffensiveDamageSpell(String spellName, int cost, int range, int potency) { + super(spellName, cost, range); this.potency = potency; } diff --git a/src/main/java/Combat/OffensiveStatusSpell.java b/src/main/java/Combat/OffensiveStatusSpell.java index 88b3369..9f0ab27 100644 --- a/src/main/java/Combat/OffensiveStatusSpell.java +++ b/src/main/java/Combat/OffensiveStatusSpell.java @@ -6,8 +6,8 @@ public class OffensiveStatusSpell extends Spell { private final String status; - public OffensiveStatusSpell(String spellName, int cost, String status) { - super(spellName, cost); + public OffensiveStatusSpell(String spellName, int cost, int range, String status) { + super(spellName, cost, range); this.status = status; } diff --git a/src/main/java/Combat/Spell.java b/src/main/java/Combat/Spell.java index 66b19b1..c675c26 100644 --- a/src/main/java/Combat/Spell.java +++ b/src/main/java/Combat/Spell.java @@ -4,11 +4,13 @@ import Entity.Entity; public abstract class Spell { private final String spellName; - private int cost; + private final int cost; + private final int range; - public Spell(String spellName, int cost) { + public Spell(String spellName, int cost, int range) { this.spellName = spellName; this.cost = cost; + this.range = range; } public String getSpellName() { @@ -19,6 +21,8 @@ public abstract class Spell { return cost; } + public int getRange() {return range;} + public abstract void cast(Entity source, Entity target); @Override @@ -29,6 +33,7 @@ public abstract class Spell { Spell spell = (Spell) o; if (cost != spell.cost) return false; + if (range != spell.range) return false; return spellName.equals(spell.spellName); } @@ -36,11 +41,12 @@ public abstract class Spell { public int hashCode() { int result = spellName.hashCode(); result = 31 * result + cost; + result = 31 * result + range; return result; } @Override public String toString() { - return spellName + " (Cost: " + cost + ")"; + return spellName + " (Cost: " + cost + ", Range: " + range + ")"; } } \ No newline at end of file diff --git a/src/main/java/Entity/Entity.java b/src/main/java/Entity/Entity.java index 5492543..44d3871 100644 --- a/src/main/java/Entity/Entity.java +++ b/src/main/java/Entity/Entity.java @@ -1,13 +1,20 @@ package Entity; +import java.util.ArrayList; +import java.util.List; + public abstract class Entity implements HasPosition { protected String name; protected Position position; - + private static final List entities = new ArrayList(); public Entity(String name) { this.name = name; + entities.add(this); } + public static List getEntities() { + return entities; + } } diff --git a/src/main/java/Job/Wizard.java b/src/main/java/Job/Wizard.java index db06bf4..6a0e8de 100644 --- a/src/main/java/Job/Wizard.java +++ b/src/main/java/Job/Wizard.java @@ -22,7 +22,7 @@ public class Wizard extends Job { public void learnSpell(Actor actor) { if(actor instanceof HasSpellBook a ) { - OffensiveDamageSpell defaultSpell = new OffensiveDamageSpell("fireball", 20, 20); + OffensiveDamageSpell defaultSpell = new OffensiveDamageSpell("fireball", 20, 1,20); a.getSpellBook().add(defaultSpell); } } diff --git a/src/test/java/InterestingTests.java b/src/test/java/InterestingTests.java index 8376009..b1442b7 100644 --- a/src/test/java/InterestingTests.java +++ b/src/test/java/InterestingTests.java @@ -32,7 +32,7 @@ public class InterestingTests { player.setMana(50); player.setHealth(100); - OffensiveDamageSpell fireball = new OffensiveDamageSpell("Fireball", 20, 15); + OffensiveDamageSpell fireball = new OffensiveDamageSpell("Fireball", 20, 1,15); player.getSpellBook().add(fireball); int initialMana = player.getMana(); @@ -51,7 +51,7 @@ public class InterestingTests { player.setMana(10); player.setHealth(100); - OffensiveDamageSpell fireball = new OffensiveDamageSpell("Fireball", 20, 15); + OffensiveDamageSpell fireball = new OffensiveDamageSpell("Fireball", 20, 1,15); player.getSpellBook().add(fireball); int initialMana = player.getMana(); @@ -70,7 +70,7 @@ public class InterestingTests { player.setMana(50); player.setHealth(100); - OffensiveDamageSpell fireball = new OffensiveDamageSpell("Fireball", 20, 15); + OffensiveDamageSpell fireball = new OffensiveDamageSpell("Fireball", 20, 1, 15); player.getSpellBook().add(fireball); ByteArrayOutputStream outContent = new ByteArrayOutputStream(); @@ -95,7 +95,7 @@ public class InterestingTests { Player player = new Player("Alfon", wizard); player.setMana(50); - OffensiveStatusSpell poisonSpray = new OffensiveStatusSpell("poisonSpray", 20, "Poison"); + OffensiveStatusSpell poisonSpray = new OffensiveStatusSpell("poisonSpray", 20, 1, "Poison"); player.getSpellBook().add(poisonSpray); wizard.castSpell(player); diff --git a/src/test/java/MagicSystemTest.java b/src/test/java/MagicSystemTest.java index b024ab5..1c91576 100644 --- a/src/test/java/MagicSystemTest.java +++ b/src/test/java/MagicSystemTest.java @@ -38,7 +38,7 @@ public class MagicSystemTest { } @Test void damage_spell_damages_target(){ - var defaultSpell = new OffensiveDamageSpell("fireball", 20, 20); + var defaultSpell = new OffensiveDamageSpell("fireball", 20, 1, 20); var p = defaultPlayer(); p.setMana(30); p.setHealth(30); @@ -47,7 +47,7 @@ public class MagicSystemTest { } @Test void damage_spell_drains_mana_from_caster(){ - var defaultSpell = new OffensiveDamageSpell("fireball", 20, 20); + var defaultSpell = new OffensiveDamageSpell("fireball", 20, 1, 20); var p = defaultPlayer(); p.setMana(30); p.setHealth(30); diff --git a/src/test/java/PlayerTest.java b/src/test/java/PlayerTest.java index 83fdfd3..a826714 100644 --- a/src/test/java/PlayerTest.java +++ b/src/test/java/PlayerTest.java @@ -80,7 +80,7 @@ class PlayerTest { void wizard_can_learn_spell() { var p = new Player("Bob"); var job = new Wizard(); - var defaultSpell = new OffensiveDamageSpell("fireball", 20, 20); + var defaultSpell = new OffensiveDamageSpell("fireball", 20, 1, 20); p.learnJob(job); p.performAction(new LearnSpellAction()); System.out.println(p.getSpellBook()); diff --git a/src/test/java/SpellTest.java b/src/test/java/SpellTest.java index e985a50..2df4128 100644 --- a/src/test/java/SpellTest.java +++ b/src/test/java/SpellTest.java @@ -8,9 +8,9 @@ import static org.junit.jupiter.api.Assertions.*; public class SpellTest { private Spell defaultSpell() { - return new OffensiveDamageSpell("fireball", 20, 40); + return new OffensiveDamageSpell("fireball", 20, 1, 40); } - private Spell statusSpell() {return new OffensiveStatusSpell("poisonSpray", 20, "Poison");} + private Spell statusSpell() {return new OffensiveStatusSpell("poisonSpray", 20, 1, "Poison");} @Test void setSpellNameOnCreation(){ -- 2.39.5 From 51ab4f510012d5bc9e50b40b7abcea5c9aeedcad Mon Sep 17 00:00:00 2001 From: TricyOne Date: Tue, 28 Oct 2025 10:13:26 +0100 Subject: [PATCH 3/3] spell targeting system complete --- src/main/java/Entity/Entity.java | 19 +++++++++++++++ src/main/java/Job/Wizard.java | 36 ++++++++++++++++++++++++++++- src/test/java/InterestingTests.java | 32 ++++++++++++++++++++++--- 3 files changed, 83 insertions(+), 4 deletions(-) diff --git a/src/main/java/Entity/Entity.java b/src/main/java/Entity/Entity.java index 44d3871..bfb22a5 100644 --- a/src/main/java/Entity/Entity.java +++ b/src/main/java/Entity/Entity.java @@ -17,4 +17,23 @@ public abstract class Entity implements HasPosition { public static List getEntities() { return entities; } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + Entity entity = (Entity) obj; + + return name.equals(entity.name); + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + @Override public String toString() { + return name; + } } diff --git a/src/main/java/Job/Wizard.java b/src/main/java/Job/Wizard.java index 6a0e8de..1f7ea33 100644 --- a/src/main/java/Job/Wizard.java +++ b/src/main/java/Job/Wizard.java @@ -6,7 +6,10 @@ import Combat.OffensiveDamageSpell; import Entity.Entity; import Inventory.HasSpellBook; import Combat.Spell; +import Entity.Position; +import java.util.LinkedList; +import java.util.List; import java.util.Scanner; public class Wizard extends Job { @@ -48,9 +51,10 @@ public class Wizard extends Job { } Spell spell = spellbook.getSpellBook().get(spellIndex - 1); + Entity target = selectSpellTarget(spell, entity); if (mana.getMana() >= spell.getCost()){ - spell.cast(entity, entity); + spell.cast(entity, target); } else{ System.out.println("Not enough mana!"); @@ -58,6 +62,36 @@ public class Wizard extends Job { } } + public Entity selectSpellTarget(Spell spell, Entity caster) { + int range = spell.getRange(); + Position position = caster.getPosition(); + int x = position.x(); + int y = position.y(); + List acceptableTargets = new LinkedList<>(); + for(Entity entity : Entity.getEntities()) { + if(x + range >= entity.getPosition().x() && x - range <= entity.getPosition().x()) { + if(y + range >= entity.getPosition().y() && y - range <= entity.getPosition().y()) { + acceptableTargets.add(entity); + } + } + } + + System.out.println("Who do you want to target with the spell?"); + for(int i = 0; i < acceptableTargets.size(); i++){ + System.out.println((i + 1) + ". " + acceptableTargets.get(i).toString()); + } + + int EntityIndex = scanner.nextInt(); + scanner.nextLine(); + + if(EntityIndex < 1 || EntityIndex > acceptableTargets.size()) { + System.out.println("Invalid choice!"); + return null; + } + + return acceptableTargets.get(EntityIndex - 1); + } + @Override public int getExperience() { return experience; diff --git a/src/test/java/InterestingTests.java b/src/test/java/InterestingTests.java index 8507990..2a83676 100644 --- a/src/test/java/InterestingTests.java +++ b/src/test/java/InterestingTests.java @@ -2,6 +2,8 @@ import Combat.OffensiveDamageSpell; import Combat.OffensiveStatusSpell; +import Entity.Position; +import Entity.Entity; import Entity.Player; import Job.Wizard; import org.junit.jupiter.api.BeforeEach; @@ -26,9 +28,14 @@ public class InterestingTests { wizard = new Wizard(); } + @BeforeEach + public void cleanup() { + Entity.getEntities().clear(); + } + @Test public void testCastSpell_successfulCast() { - Scanner testScanner = new Scanner(new ByteArrayInputStream("1\n".getBytes())); + Scanner testScanner = new Scanner(new ByteArrayInputStream("1\n1\n".getBytes())); wizard = new Wizard(testScanner); Player player = new Player("Gandalf", wizard); @@ -48,7 +55,7 @@ public class InterestingTests { @Test public void testCastSpell_notEnoughMana() { - Scanner testScanner = new Scanner(new ByteArrayInputStream("1\n".getBytes())); + Scanner testScanner = new Scanner(new ByteArrayInputStream("1\n1\n".getBytes())); wizard = new Wizard(testScanner); Player player = new Player("Merlin", wizard); @@ -93,7 +100,7 @@ public class InterestingTests { @Test public void condition_spell_adds_condition() { - Scanner testScanner = new Scanner(new ByteArrayInputStream("1\n".getBytes())); + Scanner testScanner = new Scanner(new ByteArrayInputStream("1\n1\n".getBytes())); wizard = new Wizard(testScanner); Player player = new Player("Alfon", wizard); @@ -105,4 +112,23 @@ public class InterestingTests { wizard.castSpell(player); assertThat(player.getConditions().contains("Poison"), is(true)); } + + @Test + public void select_spell_target_returns_correct_target() { + Scanner testScanner = new Scanner(new ByteArrayInputStream("2\n".getBytes())); + wizard = new Wizard(testScanner); + Position position = new Position(1,1); + + Player player = new Player("Alfon", wizard); + Player player2 = new Player("Bob", wizard); + player.setMana(50); + player2.moveTo(position); + + OffensiveDamageSpell fireball = new OffensiveDamageSpell("Fireball", 20, 1, 20); + player.getSpellBook().add(fireball); + + Entity target = wizard.selectSpellTarget(fireball, player); + + assertThat(target, is(player2)); + } } \ No newline at end of file -- 2.39.5