Skip to content

52 player status enum #81

Merged
merged 6 commits into from
Apr 15, 2026
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/PlayerStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package edu.ntnu.idi.idatt2003.g40.mappe;

import java.math.BigDecimal;

/**
* Enum representing a players' current status.
*
* <p>The player has the responsibility for getting
* a status.</p>
* */
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;
}

Original file line number Diff line number Diff line change
@@ -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.
*
* <p>Calculates what status the player should get
* based on players' net worth compared to starting
* money, and current week.</p>
*
* @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;
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}