basic battle round logic - unfinished

~30 min of work
This commit is contained in:
Benedikt Galbavy 2024-01-20 20:20:56 +01:00
parent 1b450f06a1
commit 1e81e96ad4
3 changed files with 55 additions and 6 deletions

View File

@ -1,3 +1,5 @@
package at.nanopenguin.mtcg;
import at.nanopenguin.mtcg.application.service.*; import at.nanopenguin.mtcg.application.service.*;
import at.nanopenguin.mtcg.http.HttpMethod; import at.nanopenguin.mtcg.http.HttpMethod;
import at.nanopenguin.mtcg.http.Router; import at.nanopenguin.mtcg.http.Router;

View File

@ -1,6 +1,7 @@
package at.nanopenguin.mtcg.application; package at.nanopenguin.mtcg.application;
import at.nanopenguin.mtcg.Pair; import at.nanopenguin.mtcg.Pair;
import at.nanopenguin.mtcg.application.service.schemas.Card;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@ -10,6 +11,7 @@ import java.util.List;
import java.util.Random; import java.util.Random;
public class Battle { public class Battle {
private record RoundResult(String winnerName, Card winnerCard, String loserName, Card loserCard, boolean draw);
private Pair<Combatant, Combatant> combatants; private Pair<Combatant, Combatant> combatants;
@Getter @Getter
private volatile List<String> log = new ArrayList<>(); private volatile List<String> log = new ArrayList<>();
@ -26,10 +28,27 @@ public class Battle {
public void start() throws SQLException { public void start() throws SQLException {
do {
this.playRound();
} while (combatants.left().deckSize() > 0 && combatants.right().deckSize() > 0);
// placeholder // placeholder
boolean leftWins = new Random().nextBoolean(); boolean leftWins = new Random().nextBoolean();
this.combatants.left().updateStats(leftWins); this.combatants.left().updateStats(leftWins);
this.combatants.right().updateStats(!leftWins); this.combatants.right().updateStats(!leftWins);
}
private void playRound() {
Pair<Card, Card> 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) {
} }
} }

View File

@ -5,18 +5,34 @@ import at.nanopenguin.mtcg.application.service.schemas.Card;
import at.nanopenguin.mtcg.db.*; import at.nanopenguin.mtcg.db.*;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
public class Combatant { public class Combatant {
static class RandomList<E> extends ArrayList<E> {
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 final UUID userUuid;
private List<Card> deck = new ArrayList<Card>(); public final String name;
private RandomList<Card> deck = new RandomList<>();
public Combatant(UUID userUuid) throws SQLException { public Combatant(UUID userUuid) throws SQLException {
this.userUuid = userUuid; 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 { public void updateStats(boolean win) throws SQLException {
@ -30,4 +46,16 @@ public class Combatant {
.condition("uuid", userUuid) .condition("uuid", userUuid)
.executeUpdate(); .executeUpdate();
}; };
public Card getCard() {
return this.deck.popRandom();
}
public void addCard(Card card) {
this.deck.add(card);
}
public int deckSize() {
return this.deck.size();
}
} }