diff --git a/README.md b/README.md index 3e0431b..cccb987 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,10 @@ RWRD implements common elements from roguelikes, and games in general. ### The player The player object is a representation of the user and it's agency in the game world -### Player +### Entity.Player -- Player +- Entity.Player - Enemies -- Bosses - Class system diff --git a/src/main/java/Action/Dig.java b/src/main/java/Action/Dig.java deleted file mode 100644 index d6f9e38..0000000 --- a/src/main/java/Action/Dig.java +++ /dev/null @@ -1,8 +0,0 @@ -package Action; - -public class Dig implements Action { - @Override - public void exectue(Actor actor) { - actor.performAction(this); - } -} diff --git a/src/main/java/Action/DigAction.java b/src/main/java/Action/DigAction.java new file mode 100644 index 0000000..7fcc7fa --- /dev/null +++ b/src/main/java/Action/DigAction.java @@ -0,0 +1,20 @@ +package Action; + +import Job.HasJob; +import Job.Miner; + +public class DigAction implements Action { + @Override + public void exectue(Actor actor) { + Miner miner = requireMiner(actor); + miner.dig(actor); + } + + private Miner requireMiner(Actor actor) { + if (actor instanceof HasJob hasJob + && hasJob.getJob() instanceof Miner miner) { + return miner; + } + throw new IllegalStateException(actor + " cannot perform this action without being a Miner!"); + } +} diff --git a/src/main/java/Character.java b/src/main/java/Character.java deleted file mode 100644 index bca6c68..0000000 --- a/src/main/java/Character.java +++ /dev/null @@ -1,22 +0,0 @@ -public abstract class Character extends Entity { - protected String name; - protected int health; - protected int level; - - - public Character(String name) { - super(new Position(0, 0)); - this.name = name; - this.health = 10; - this.level = 1; - } - - public void setHealth(int i) { - this.health = i; - } - - public boolean isAlive() { - return health > 0; - } - -} diff --git a/src/main/java/Combat/HasHealth.java b/src/main/java/Combat/HasHealth.java new file mode 100644 index 0000000..47e44c8 --- /dev/null +++ b/src/main/java/Combat/HasHealth.java @@ -0,0 +1,6 @@ +package Combat; + +public interface HasHealth { + void setHealth(int health); + boolean isAlive(); +} diff --git a/src/main/java/Entity.java b/src/main/java/Entity.java deleted file mode 100644 index 84093a9..0000000 --- a/src/main/java/Entity.java +++ /dev/null @@ -1,14 +0,0 @@ -public class Entity { - private Position position; - public Entity(Position position) { - this.position = position; - } - - public Position getPosition() { - return position; - } - - public void setPosition(Position position) { - this.position = position; - } -} diff --git a/src/main/java/Entity/Entity.java b/src/main/java/Entity/Entity.java new file mode 100644 index 0000000..5492543 --- /dev/null +++ b/src/main/java/Entity/Entity.java @@ -0,0 +1,13 @@ +package Entity; + + +public abstract class Entity implements HasPosition { + protected String name; + protected Position position; + + + public Entity(String name) { + this.name = name; + } + +} diff --git a/src/main/java/Entity/HasPosition.java b/src/main/java/Entity/HasPosition.java new file mode 100644 index 0000000..247c45f --- /dev/null +++ b/src/main/java/Entity/HasPosition.java @@ -0,0 +1,6 @@ +package Entity; + +public interface HasPosition { + Position getPosition(); + void setPosition(Position position); +} diff --git a/src/main/java/Movable.java b/src/main/java/Entity/Movable.java similarity index 52% rename from src/main/java/Movable.java rename to src/main/java/Entity/Movable.java index 8e2d448..3b4ee43 100644 --- a/src/main/java/Movable.java +++ b/src/main/java/Entity/Movable.java @@ -1,3 +1,7 @@ +package Entity; + + public interface Movable { void moveTo(Position position); + boolean canMoveTo(Position position); } diff --git a/src/main/java/Entity/Player.java b/src/main/java/Entity/Player.java new file mode 100644 index 0000000..8b49942 --- /dev/null +++ b/src/main/java/Entity/Player.java @@ -0,0 +1,76 @@ +package Entity; + +import Action.Action; +import Action.Actor; +import Combat.HasHealth; +import Job.Job; +import Job.HasJob; +import Inventory.HasInventory; + +import java.util.LinkedList; +import java.util.List; + +public class Player extends Entity implements Movable, Actor, HasInventory, HasJob, HasHealth { + protected int health; + protected Job job; + protected Position position; + protected List items = new LinkedList<>(); + public Player(String name, Job job) { + super(name); + this.job = job; + this.position = new Position(0,0); + } + + public Player(String name) { + super(name); + } + + @Override + public void moveTo(Position position) { + if(canMoveTo(position)){ + setPosition(position); + } + } + + @Override + public boolean canMoveTo(Position position) { + return false; + } + public Job getJob() { + return job; + } + + @Override + public void learnJob(Job job) { + this.job = job; + } + + public List getInventory() { + return items; + } + + @Override + public void performAction(Action action) { + action.exectue(this); + } + + @Override + public Position getPosition() { + return position; + } + + @Override + public void setPosition(Position position) { + this.position = position; + } + + @Override + public void setHealth(int health) { + this.health = health; + } + + @Override + public boolean isAlive() { + return health > 0; + } +} diff --git a/src/main/java/Position.java b/src/main/java/Entity/Position.java similarity index 70% rename from src/main/java/Position.java rename to src/main/java/Entity/Position.java index aab1c7e..b02e6ba 100644 --- a/src/main/java/Position.java +++ b/src/main/java/Entity/Position.java @@ -1 +1,3 @@ +package Entity; + public record Position(int x, int y) {} diff --git a/src/main/java/Inventory/HasInventory.java b/src/main/java/Inventory/HasInventory.java new file mode 100644 index 0000000..856c2da --- /dev/null +++ b/src/main/java/Inventory/HasInventory.java @@ -0,0 +1,7 @@ +package Inventory; + +import java.util.List; + +public interface HasInventory { + List getInventory(); +} diff --git a/src/main/java/Job/HasJob.java b/src/main/java/Job/HasJob.java index 1187f9f..3034402 100644 --- a/src/main/java/Job/HasJob.java +++ b/src/main/java/Job/HasJob.java @@ -2,4 +2,5 @@ package Job; public interface HasJob { Job getJob(); + void learnJob(Job job); } diff --git a/src/main/java/Job/Miner.java b/src/main/java/Job/Miner.java index 58dd987..3266fb8 100644 --- a/src/main/java/Job/Miner.java +++ b/src/main/java/Job/Miner.java @@ -1,7 +1,7 @@ package Job; import Action.Actor; -import Character.HasInventory; +import Inventory.HasInventory; public class Miner extends Job { public Miner() { @@ -9,10 +9,10 @@ public class Miner extends Job { } - @Override - void performJobAction(Actor actor) { - if(actor instanceof HasInventory a) { - a.getInventory().add("Rock"); - } - } + public void dig(Actor actor) { + if(actor instanceof HasInventory a) { + a.getInventory().add("Stone"); + } + } + } diff --git a/src/main/java/Player.java b/src/main/java/Player.java deleted file mode 100644 index d765b47..0000000 --- a/src/main/java/Player.java +++ /dev/null @@ -1,45 +0,0 @@ -import Action.Action; -import Action.Actor; -import Action.Dig; -import Job.Job; -import Job.HasJob; -import Character.HasInventory; - -import java.util.LinkedList; -import java.util.List; - -public class Player extends Character implements Movable, Actor, HasInventory, HasJob { - protected Job job; - protected List items = new LinkedList<>(); - public Player(String name, Job job) { - super(name); - this.job = job; - } - - public Player(String name) { - super(name); - } - - @Override - public void moveTo(Position position) { - setPosition(position); - } - - public void learnJob(Job job) { - this.job = job; - } - - public Job getJob() { - return job; - } - - public List getInventory() { - return items; - } - - @Override - public void performAction(Action action) { - action.exectue(this); - } - -} diff --git a/src/test/java/MinerTest.java b/src/test/java/MinerTest.java index 8a8b38a..4cb87a8 100644 --- a/src/test/java/MinerTest.java +++ b/src/test/java/MinerTest.java @@ -1,18 +1,19 @@ +import Entity.Player; import Job.Miner; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import Action.Dig; +import Action.DigAction; public class MinerTest { @Test void miner_can_dig() { - var p = new Player("Steve"); + var p = new Player("John"); var job = new Miner(); p.learnJob(job); - p.performAction(new Dig()); + p.performAction(new DigAction()); assertTrue(p.getInventory().contains("Stone")); } diff --git a/src/test/java/PlayerTest.java b/src/test/java/PlayerTest.java index a246e22..8c04ae4 100644 --- a/src/test/java/PlayerTest.java +++ b/src/test/java/PlayerTest.java @@ -1,4 +1,6 @@ +import Entity.Position; import Job.Miner; +import Entity.Player; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*;