Implement job experience #7

Merged
erns6604 merged 1 commits from Job into main 2025-10-18 20:16:30 +02:00
5 changed files with 49 additions and 23 deletions

View File

@@ -1,11 +1,12 @@
package Job; package Job;
import Action.Actor; import Shared.HasExperience;
import java.util.Objects; import java.util.Objects;
public abstract class Job { public abstract class Job implements HasExperience {
protected int level; protected int level;
protected int experience;
protected String name; protected String name;
Job(String name) { Job(String name) {
@@ -13,7 +14,7 @@ public abstract class Job {
this.level = 1; this.level = 1;
} }
public double getLevel() { public int getLevel() {
return level; return level;
} }

View File

@@ -3,16 +3,25 @@ package Job;
import Action.Actor; import Action.Actor;
import Inventory.HasInventory; import Inventory.HasInventory;
public class Miner extends Job { public class Miner extends Job {
public Miner() { public Miner() {
super("Miner"); super("Miner");
} }
public void dig(Actor actor) {
if (actor instanceof HasInventory a) {
a.getInventory().add("Stone");
}
}
public void dig(Actor actor) { @Override
if(actor instanceof HasInventory a) { public int getExperience() {
a.getInventory().add("Stone"); return experience;
} }
}
@Override
public void gainExperience(int exp) {
experience += exp;
}
} }

View File

@@ -0,0 +1,11 @@
package Shared;
public interface HasExperience {
int getLevel();
int getExperience();
void gainExperience(int exp);
void levelUp();
}

View File

@@ -1,21 +1,9 @@
import Entity.Player;
import Job.Miner; import Job.Miner;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import Action.DigAction;
public class MinerTest { public class MinerTest {
@Test
void miner_can_dig() {
var p = new Player("John");
var job = new Miner();
p.learnJob(job);
p.performAction(new DigAction());
assertTrue(p.getInventory().contains("Stone"));
}
@Test @Test
void miner_can_level_up() { void miner_can_level_up() {
@@ -25,6 +13,13 @@ public class MinerTest {
assertEquals(2, job.getLevel()); assertEquals(2, job.getLevel());
} }
@Test
void miner_can_gain_xp() {
var job = new Miner();
job.gainExperience(25);
assertEquals(25, job.getExperience());
}
} }

View File

@@ -1,3 +1,4 @@
import Action.DigAction;
import Entity.Position; import Entity.Position;
import Job.Miner; import Job.Miner;
import Entity.Player; import Entity.Player;
@@ -33,4 +34,13 @@ class PlayerTest {
p.learnJob(job); p.learnJob(job);
assertEquals(new Miner(), p.getJob()); assertEquals(new Miner(), p.getJob());
} }
@Test
void miner_can_dig() {
var p = new Player("John");
var job = new Miner();
p.learnJob(job);
p.performAction(new DigAction());
assertTrue(p.getInventory().contains("Stone"));
}
} }