implemented battle handler

~ 1.5h work
This commit is contained in:
Benedikt Galbavy 2024-01-18 21:39:56 +01:00
parent 8e01b6b412
commit 1517253bc7
4 changed files with 114 additions and 1 deletions

View File

@ -1,4 +1,18 @@
package at.nanopenguin.mtcg; package at.nanopenguin.mtcg;
public record Pair<T, U>(T left, U right) { import lombok.Setter;
public class Pair<T, U> {
@Setter
private T left;
@Setter
private U right;
public Pair (T left, U right) {
this.left = left;
this.right = right;
}
public T left() { return this.left; };
public U right() { return this.right; };
} }

View File

@ -0,0 +1,27 @@
package at.nanopenguin.mtcg.application;
import at.nanopenguin.mtcg.Pair;
import lombok.Getter;
import java.util.ArrayList;
import java.util.List;
public class Battle {
private Pair<Combatant, Combatant> combatants;
@Getter
private volatile List<String> log = new ArrayList<>();
@Getter
private boolean waiting = true;
public Battle(Combatant combatant) {
this.combatants = new Pair<>(combatant, null);
}
public void addCombatant(Combatant combatant) {
this.combatants.setRight(combatant);
}
public void start() {
}
}

View File

@ -0,0 +1,53 @@
package at.nanopenguin.mtcg.application;
import java.sql.SQLException;
import java.util.UUID;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class BattleHandler {
private static BattleHandler INSTANCE;
private Lock lock = new ReentrantLock();
private Battle waiting = null;
private BattleHandler() {
}
public static BattleHandler getInstance() {
if (INSTANCE == null) {
INSTANCE = new BattleHandler();
}
return INSTANCE;
}
public String[] startBattle(UUID userUuid) throws SQLException {
Battle battle;
this.lock.lock();
if ((battle = this.waiting) == null) {
battle = (this.waiting = new Battle(new Combatant(userUuid)));
}
synchronized (battle) {
this.lock.unlock();
if (battle.isWaiting()) {
try {
battle.wait();
} catch (InterruptedException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return battle.getLog().toArray(new String[0]);
}
battle.addCombatant(new Combatant(userUuid));
battle.start();
}
battle.notify();
return battle.getLog().toArray(new String[0]);
}
}

View File

@ -0,0 +1,19 @@
package at.nanopenguin.mtcg.application;
import at.nanopenguin.mtcg.application.service.schemas.Card;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
public class Combatant {
private UUID userUuid;
private List<Card> deck = new ArrayList<Card>();
public Combatant(UUID userUuid) throws SQLException {
this.userUuid = userUuid;
this.deck = Arrays.asList(UserCards.get(userUuid, true));
}
}