implemented battle handler
~ 1.5h work
This commit is contained in:
parent
8e01b6b412
commit
1517253bc7
@ -1,4 +1,18 @@
|
||||
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; };
|
||||
}
|
||||
|
||||
27
src/at/nanopenguin/mtcg/application/Battle.java
Normal file
27
src/at/nanopenguin/mtcg/application/Battle.java
Normal 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() {
|
||||
|
||||
}
|
||||
}
|
||||
53
src/at/nanopenguin/mtcg/application/BattleHandler.java
Normal file
53
src/at/nanopenguin/mtcg/application/BattleHandler.java
Normal 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]);
|
||||
}
|
||||
}
|
||||
19
src/at/nanopenguin/mtcg/application/Combatant.java
Normal file
19
src/at/nanopenguin/mtcg/application/Combatant.java
Normal 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));
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user