Refactor: improve Player class

Refs #52
This commit is contained in:
Julian Kropff
2026-04-10 20:23:42 +02:00
parent d10e9a72fd
commit 3ea2971ab5
@@ -4,14 +4,192 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* Represents a player in the poker game, including their name, chip count, * Represents a player in the poker game, including their name, chip count, current bet, state
* current bet, state (e.g., "active", "folded"), and their hole cards. * (e.g., "active", "folded"), and their hole cards.
*/ */
public class Player { public class Player {
public String name;
public int chips;
public int bet;
public String state;
public List<Card> cards = new ArrayList<>(); private PlayerId id;
private int chips;
private int bet;
private PlayerState state;
private List<Card> cards = new ArrayList<>();
/**
* Constructs a new Player with default values. The player's state is set to ACTIVE by default.
*/
public Player() {
this.state = PlayerState.ACTIVE;
}
/**
* Constructs a new Player with the specified ID and initial chip count. The player's state is
* set to ACTIVE by default.
*
* @param id The unique identifier for the player.
* @param chips The initial number of chips the player has.
*/
public Player(PlayerId id, int chips) {
this.id = id;
this.chips = chips;
this.bet = 0;
this.state = PlayerState.ACTIVE;
}
/**
* Retrieves the unique identifier of the player.
*
* @return The player's ID.
*/
public PlayerId getId() {
return id;
}
/**
* Sets the unique identifier of the player.
*
* @param id The player's ID to set.
*/
public void setId(PlayerId id) {
this.id = id;
}
/**
* Returns the display name of the player. If the player's ID is not set, it returns an empty
* string.
*
* @return The player's name.
*/
public String getName() {
return id != null ? id.value() : "";
}
/**
* Retrieves the current chip count of the player.
*
* @return The number of chips the player has.
*/
public int getChips() {
return chips;
}
/**
* Sets the current chip count of the player.
*
* @param chips The number of chips to set for the player.
*/
public void setChips(int chips) {
this.chips = chips;
}
/**
* Retrieves the current bet amount of the player.
*
* @return The amount the player has currently bet in the ongoing hand.
*/
public int getBet() {
return bet;
}
/**
* Sets the current bet amount of the player.
*
* @param bet The amount the player has currently bet in the ongoing hand to set.
*/
public void setBet(int bet) {
this.bet = bet;
}
/**
* Retrieves the current state of the player (e.g., ACTIVE, FOLDED, ALL_IN).
*
* @return The player's current state in the game.
*/
public PlayerState getState() {
return state;
}
/**
* Sets the current state of the player (e.g., ACTIVE, FOLDED, ALL_IN).
*
* @param state The player's current state in the game to set.
*/
public void setState(PlayerState state) {
this.state = state;
}
/**
* Checks if the player is currently the dealer.
*
* @return True if the player's state is DEALER, false otherwise.
*/
public boolean isDealer() {
return state == PlayerState.DEALER;
}
/**
* Retrieves the list of hole cards currently held by the player.
*
* @return A list of Card objects representing the player's hole cards.
*/
public List<Card> getCards() {
return cards;
}
/**
* Sets the list of hole cards currently held by the player.
*
* @param cards A list of Card objects representing the player's hole cards to set.
*/
public void setCards(List<Card> cards) {
this.cards = cards;
}
/**
* Adds a card to the player's list of hole cards.
*
* @param card The Card object to be added to the player's hole cards.
*/
public void addCard(Card card) {
this.cards.add(card);
}
/**
* Adds the specified amount of chips to the player's current chip count.
*
* @param amount The number of chips to add to the player's current chip count.
*/
public void addChips(int amount) {
if (amount < 0) {
throw new IllegalArgumentException("Amount cannot be negative");
}
this.chips += amount;
}
/**
* Removes the specified amount of chips from the player's current chip count.
*
* @param amount The number of chips to remove from the player's current chip count.
*/
public void removeChips(int amount) {
if (amount < 0) {
throw new IllegalArgumentException("Amount cannot be negative");
}
if (amount > this.chips) {
throw new IllegalArgumentException(
"Not enough chips. Available: " + this.chips + ", Requested: " + amount);
}
this.chips -= amount;
}
/**
* Sets the player's state to FOLDED, indicating that they have folded in the current hand.
*/
public void fall() {
this.state = PlayerState.FOLDED;
if (this.id != null) {
this.id = PlayerId.of(this.id.value() + " (Fall)");
}
}
} }