diff --git a/app/src/main/java/at/vunfer/openrealms/model/Deck.java b/app/src/main/java/at/vunfer/openrealms/model/Deck.java new file mode 100644 index 00000000..90f5c0d5 --- /dev/null +++ b/app/src/main/java/at/vunfer/openrealms/model/Deck.java @@ -0,0 +1,29 @@ +/* Licensed under GNU GPL v3.0 (C) 2023 */ +package at.vunfer.openrealms.model; + +import java.util.ArrayList; +import java.util.Random; + +public class Deck extends ArrayList { + private static final Random rand = new Random(); + + public T drawRandom() throws IllegalStateException { + if (super.isEmpty()) { + throw new IllegalStateException("Cannot draw from empty source."); + } + + int index = rand.nextInt(super.size()); + T drawn = super.get(index); + super.remove(drawn); + + return drawn; + } + + public T draw(T item) throws IllegalArgumentException { + if (!super.contains(item)) { + throw new IllegalArgumentException("Item not in deck."); + } + super.remove(item); + return item; + } +} diff --git a/app/src/main/java/at/vunfer/openrealms/model/Market.java b/app/src/main/java/at/vunfer/openrealms/model/Market.java index 4f26b259..9b0c81d9 100644 --- a/app/src/main/java/at/vunfer/openrealms/model/Market.java +++ b/app/src/main/java/at/vunfer/openrealms/model/Market.java @@ -1,4 +1,47 @@ /* Licensed under GNU GPL v3.0 (C) 2023 */ package at.vunfer.openrealms.model; -public class Market {} +import android.util.Log; +import java.util.ArrayList; + +public class Market { + private static Market INSTANCE; + private static final int TOTAL_PURCHASABLE = 5; + private static final String TAG = "PlayerCards"; + Deck marketDeck; + Deck forPurchase; + + private Market() {} + + public static Market getInstance() { + if (INSTANCE == null) { + INSTANCE = new Market(); + } + return INSTANCE; + } + + public ArrayList getForPurchase() { + return forPurchase; + } + + public int restock() { + int restocked = 0; + while (forPurchase.size() < TOTAL_PURCHASABLE) { + try { + forPurchase.add(marketDeck.drawRandom()); + restocked++; + } catch (Exception e) { + Log.v(TAG, "You have no more cards to draw for the market."); + } + } + return restocked; + } + + public Card purchase(Card card) { + if (card == null || !forPurchase.contains(card)) { + throw new IllegalArgumentException("Card is not to purchase."); + } + forPurchase.remove(card); + return card; + } +} diff --git a/app/src/main/java/at/vunfer/openrealms/model/PlayArea.java b/app/src/main/java/at/vunfer/openrealms/model/PlayArea.java index 996308b4..5d2bfa3a 100644 --- a/app/src/main/java/at/vunfer/openrealms/model/PlayArea.java +++ b/app/src/main/java/at/vunfer/openrealms/model/PlayArea.java @@ -1,7 +1,6 @@ /* Licensed under GNU GPL v3.0 (C) 2023 */ package at.vunfer.openrealms.model; -import java.util.ArrayList; import java.util.List; public class PlayArea { @@ -9,90 +8,54 @@ public class PlayArea { private int turnDamage; private int turnHealing; private int turnCoins; - private List playedCards; - private List playedChampions; + + private Market market; + private Deck playedCards; + private Deck playedChampions; private PlayerCards playerCards; - public PlayArea( - int health, - PlayerCards playerCards) { + public PlayArea(int health, PlayerCards playerCards) { this.health = health; this.turnDamage = 0; this.turnHealing = 0; this.turnCoins = 0; - this.playedCards = new ArrayList(); - this.playedChampions = new ArrayList(); + this.playedCards = new Deck(); + this.playedChampions = new Deck(); this.playerCards = playerCards; + this.market = Market.getInstance(); } public int getHealth() { return health; } - public void setHealth(int health) { - this.health = health; - } - public int getTurnDamage() { return turnDamage; } - public void setTurnDamage(int turnDamage) { - this.turnDamage = turnDamage; - } - public int getTurnHealing() { return turnHealing; } - public void setTurnHealing(int turnHealing) { - this.turnHealing = turnHealing; + public PlayerCards getPlayerCards() { + return playerCards; } public int getTurnCoins() { return turnCoins; } - public void setTurnCoins(int turnCoins) { - this.turnCoins = turnCoins; - } - public List getPlayedCards() { return playedCards; } - public void setPlayedCards(List playedCards) { - this.playedCards = playedCards; - } - public List getPlayedChampions() { return playedChampions; } - public void setPlayedChampions(List playedChampions) { - this.playedChampions = playedChampions; - } - - public PlayerCards getPlayerCards() { - return playerCards; - } - - public void setPlayerCards(PlayerCards playerCards) { - this.playerCards = playerCards; - } - - public Card playCard(Card card) { - if (playerCards.playCard(card) != null) { - playedCards.add(card); - useCardEffect(card); - return card; - } - return null; - } - - public void useCardEffect(Card card) { - card.getAbility().resolveAbility(this); + public void playCard(Card card) { + playedCards.add(playerCards.popFromHand(card)); } public Card useCardAllyEffect(Card card) { @@ -129,4 +92,25 @@ public void heal(int value) { public void takeDamage(int value) { health -= value; } + + public void visitDamage(int damage) { + turnDamage += damage; + } + + public void visitCoin(int coin) { + turnCoins += coin; + } + + public void visitHealing(int healing) { + turnHealing += healing; + } + + public void buyCard(Card card) throws IllegalArgumentException { + if (this.turnCoins < card.getCost()) { + throw new IllegalArgumentException("Not enough coins this turn"); + } + turnCoins -= card.getCost(); + market.purchase(card); + playerCards.addBoughtCard(card); + } } diff --git a/app/src/main/java/at/vunfer/openrealms/model/PlayerCards.java b/app/src/main/java/at/vunfer/openrealms/model/PlayerCards.java index ab33d11e..2cf948c4 100644 --- a/app/src/main/java/at/vunfer/openrealms/model/PlayerCards.java +++ b/app/src/main/java/at/vunfer/openrealms/model/PlayerCards.java @@ -4,70 +4,57 @@ import java.util.List; public class PlayerCards { - private List handCards; - private List deckCards; - private List discardedCards; - private Market market; - - public PlayerCards( - List handCards, - List deckCards, - List discardedCards, - Market market) { - this.handCards = handCards; - this.deckCards = deckCards; - this.discardedCards = discardedCards; - this.market = market; + private static final String TAG = "PlayerCards"; + private Deck handCards; + private Deck deckCards; + private Deck discardedCards; + + private static final int HANDSIZE = 5; + + public PlayerCards() { + List effects = List.of(new DamageEffect(3), new CoinEffect(4)); + + this.handCards = new Deck(); + this.deckCards = new Deck(); + this.discardedCards = new Deck(); + this.deckCards.add(new Card("Dagger", 0, List.of(new DamageEffect(1)))); + this.deckCards.add(new Card("Shortsword", 0, List.of(new HealingEffect(2)))); + this.deckCards.add(new Card("Ruby ", 0, List.of(new CoinEffect(2)))); + for (int i = 0; i < 7; i++){ + this.deckCards.add(new Card("Coin", 0, List.of(new CoinEffect(1)))); + } + while (handCards.size() < HANDSIZE) { + handCards.add(deckCards.drawRandom()); + } } - public List getHandCards() { + public Deck getHandCards() { return handCards; } - public void setHandCards(List handCards) { - this.handCards = handCards; - } - - public List getDeckCards() { - return deckCards; - } - - public void setDeckCards(List deckCards) { - this.deckCards = deckCards; - } - - public List getDiscardedCards() { - return discardedCards; - } - - public void setDiscardedCards(List discardedCards) { - this.discardedCards = discardedCards; - } - - public Market getMarket() { - return market; + public void discard(Card card) throws IllegalArgumentException { + discardedCards.add(handCards.draw(card)); } - public void setMarket(Market market) { - this.market = market; + public void addBoughtCard(Card card){ + discardedCards.add(card); } - public Card draw() { - return null; + public Card popFromHand(Card card) { + return handCards.draw(card); } - public Card discard() { - return null; - } + public void restockHand() { + if (deckCards.size() < HANDSIZE) { + handCards.addAll(deckCards); + deckCards.clear(); - public Card playCard(Card card) { - if (handCards.contains(card)) { - return card; + deckCards.addAll(discardedCards); + discardedCards.clear(); } - return null; - } - public Card buyCard(Card card) { - return null; + while (handCards.size() < HANDSIZE) { + handCards.add(deckCards.drawRandom()); + } } }