diff --git a/src/Main.java b/src/at/nanopenguin/mtcg/Main.java similarity index 98% rename from src/Main.java rename to src/at/nanopenguin/mtcg/Main.java index 9d2967a..0b27799 100644 --- a/src/Main.java +++ b/src/at/nanopenguin/mtcg/Main.java @@ -1,3 +1,5 @@ +package at.nanopenguin.mtcg; + import at.nanopenguin.mtcg.application.service.*; import at.nanopenguin.mtcg.http.HttpMethod; import at.nanopenguin.mtcg.http.Router; diff --git a/src/at/nanopenguin/mtcg/application/Battle.java b/src/at/nanopenguin/mtcg/application/Battle.java index 52b31df..e364045 100644 --- a/src/at/nanopenguin/mtcg/application/Battle.java +++ b/src/at/nanopenguin/mtcg/application/Battle.java @@ -1,6 +1,7 @@ package at.nanopenguin.mtcg.application; import at.nanopenguin.mtcg.Pair; +import at.nanopenguin.mtcg.application.service.schemas.Card; import lombok.Getter; import lombok.Setter; @@ -10,6 +11,7 @@ import java.util.List; import java.util.Random; public class Battle { + private record RoundResult(String winnerName, Card winnerCard, String loserName, Card loserCard, boolean draw); private Pair combatants; @Getter private volatile List log = new ArrayList<>(); @@ -26,10 +28,27 @@ public class Battle { public void start() throws SQLException { + do { + this.playRound(); + } while (combatants.left().deckSize() > 0 && combatants.right().deckSize() > 0); + // placeholder boolean leftWins = new Random().nextBoolean(); this.combatants.left().updateStats(leftWins); this.combatants.right().updateStats(!leftWins); + } + + private void playRound() { + Pair cards = new Pair<>(this.combatants.left().getCard(), this.combatants.right().getCard()); + RoundResult result = this.fight(cards.left(), cards.right()); + this.log.add() + } + + private boolean fight(Card left, Card right) { + + } + + private String createCombatString(RoundResult result) { } } diff --git a/src/at/nanopenguin/mtcg/application/Combatant.java b/src/at/nanopenguin/mtcg/application/Combatant.java index 663042a..5b397d8 100644 --- a/src/at/nanopenguin/mtcg/application/Combatant.java +++ b/src/at/nanopenguin/mtcg/application/Combatant.java @@ -5,18 +5,34 @@ import at.nanopenguin.mtcg.application.service.schemas.Card; import at.nanopenguin.mtcg.db.*; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; +import java.util.*; public class Combatant { + + static class RandomList extends ArrayList { + Random r = new Random(); + public E popRandom() { + int i = r.nextInt(this.size()); + E e = this.get(i); + this.remove(i); + return e; + } + } private final UUID userUuid; - private List deck = new ArrayList(); + public final String name; + private RandomList deck = new RandomList<>(); public Combatant(UUID userUuid) throws SQLException { this.userUuid = userUuid; - this.deck = Arrays.asList(UserCards.get(userUuid, true)); + this.name = (String) DbQuery.builder() + .command(SqlCommand.SELECT) + .table(Table.USERS) + .column("name") + .condition("uuid", userUuid) + .executeQuery() + .get(0) + .get("name"); + this.deck.addAll(Arrays.asList(UserCards.get(userUuid, true))); } public void updateStats(boolean win) throws SQLException { @@ -30,4 +46,16 @@ public class Combatant { .condition("uuid", userUuid) .executeUpdate(); }; + + public Card getCard() { + return this.deck.popRandom(); + } + + public void addCard(Card card) { + this.deck.add(card); + } + + public int deckSize() { + return this.deck.size(); + } }