Skip to content

Commit

Permalink
Merge pull request #81 from Team-40-IDATT2003/52-player-status-enum
Browse files Browse the repository at this point in the history
52 player status enum
  • Loading branch information
etsorens authored Apr 15, 2026
2 parents 145ed78 + 08bd55b commit bd4175b
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 0 deletions.
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);
}
}

0 comments on commit bd4175b

Please sign in to comment.