diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java index 9186f09..fa933b9 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java @@ -64,6 +64,15 @@ public String getName() { return name; } + /** + * Returns the players chosen starting balance. + * + * @return the starting money the player chose. + */ + public BigDecimal getStartingMoney() { + return startingMoney; + } + /** * Returns the players current balance. * diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerStatus.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerStatus.java new file mode 100644 index 0000000..3bd959f --- /dev/null +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerStatus.java @@ -0,0 +1,42 @@ +package edu.ntnu.idi.idatt2003.g40.mappe; + +import java.math.BigDecimal; + +/** + * Enum representing a players' current status. + * + *
The player has the responsibility for getting + * a status.
+ * */ +public enum PlayerStatus { + + /** Status representing a beginner. */ + NOOB, + + /** + * Status representing a player who has increased + * their net worth by at least 20 percent. */ + NOVICE, + + /** + * Status representing a player who has increased + * their net worth by at least 50 percent. */ + GOOD, + + /** Status representing a player who has at least doubled their net worth. */ + TRYHARD, + + /** Status representing a player who has at least tripled their net worth. */ + PRO, + + /** + * Status representing a player who has at least quintupled their + * net worth. */ + SEER, + + /** + * Status representing a player who has at least dectupled their + * net worth. */ + OMNIPOTENT; +} + diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerStatusController.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerStatusController.java new file mode 100644 index 0000000..459ee73 --- /dev/null +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerStatusController.java @@ -0,0 +1,54 @@ +package edu.ntnu.idi.idatt2003.g40.mappe; + +import java.math.BigDecimal; + +/** + * Controls and calculates the players' status. + * + * @see PlayerStatus + * */ +public final class PlayerStatusController { + private PlayerStatusController() { + /* This utility class should not be instantiated */ + } + + /** + * Method for getting a player status based on a player. + * + *Calculates what status the player should get + * based on players' net worth compared to starting + * money, and current week.
+ * + * @param player the player to give a status to. + * + * @return a PlayerStatus + * */ + public static PlayerStatus getStatus(final Player player) { + Integer startingMoneyInt = player.getStartingMoney().intValue(); + + BigDecimal difference = + player.getNetWorth().subtract(player.getStartingMoney()); + + return switch ((Integer) difference.intValue()) { + case Integer val when val >= percentAmount(startingMoneyInt, 900) -> PlayerStatus.OMNIPOTENT; + case Integer val when val >= percentAmount(startingMoneyInt, 400) -> PlayerStatus.SEER; + case Integer val when val >= percentAmount(startingMoneyInt, 200) -> PlayerStatus.PRO; + case Integer val when val >= percentAmount(startingMoneyInt, 100) -> PlayerStatus.TRYHARD; + case Integer val when val >= percentAmount(startingMoneyInt, 50) -> PlayerStatus.GOOD; + case Integer val when val >= percentAmount(startingMoneyInt, 20) -> PlayerStatus.NOVICE; + default -> PlayerStatus.NOOB; + }; + } + + /** + * Helper method for increasing a value by x percent. + * + * @param value the value to calculate from + * @param x the percent amount + * + * @return the increased value. + * */ + private static Integer percentAmount(final Integer value, final Integer x) { + return (value * x) / 100; + } +} diff --git a/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerStatusTest.java b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerStatusTest.java new file mode 100644 index 0000000..b038bb5 --- /dev/null +++ b/src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerStatusTest.java @@ -0,0 +1,22 @@ +package edu.ntnu.idi.idatt2003.g40.mappe; + +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.*; + +class PlayerStatusTest { + + @Test + void getStatusReturnsProperStatuses() { + Player testPlayer = new Player("Player", new BigDecimal(1000)); + PlayerStatus gottenStatus = PlayerStatusController.getStatus(testPlayer); + assertEquals(PlayerStatus.NOOB, gottenStatus); + + testPlayer.addMoney(new BigDecimal(1000)); + PlayerStatus gottenStatus2 = PlayerStatusController.getStatus(testPlayer); + + assertEquals(PlayerStatus.TRYHARD, gottenStatus2); + } +} \ No newline at end of file