fixed battle handler, implemented basis for battle
~2h work
This commit is contained in:
parent
1517253bc7
commit
1b450f06a1
@ -2,16 +2,19 @@ package at.nanopenguin.mtcg.application;
|
||||
|
||||
import at.nanopenguin.mtcg.Pair;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class Battle {
|
||||
private Pair<Combatant, Combatant> combatants;
|
||||
@Getter
|
||||
private volatile List<String> log = new ArrayList<>();
|
||||
@Getter
|
||||
private boolean waiting = true;
|
||||
@Getter @Setter
|
||||
private boolean firstPlayer = true;
|
||||
|
||||
public Battle(Combatant combatant) {
|
||||
this.combatants = new Pair<>(combatant, null);
|
||||
@ -21,7 +24,12 @@ public class Battle {
|
||||
this.combatants.setRight(combatant);
|
||||
}
|
||||
|
||||
public void start() {
|
||||
public void start() throws SQLException {
|
||||
|
||||
// placeholder
|
||||
boolean leftWins = new Random().nextBoolean();
|
||||
this.combatants.left().updateStats(leftWins);
|
||||
this.combatants.right().updateStats(!leftWins);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,7 +32,8 @@ public class BattleHandler {
|
||||
synchronized (battle) {
|
||||
this.lock.unlock();
|
||||
|
||||
if (battle.isWaiting()) {
|
||||
if (battle.isFirstPlayer()) {
|
||||
battle.setFirstPlayer(false);
|
||||
try {
|
||||
battle.wait();
|
||||
} catch (InterruptedException e) {
|
||||
@ -45,9 +46,9 @@ public class BattleHandler {
|
||||
|
||||
battle.addCombatant(new Combatant(userUuid));
|
||||
battle.start();
|
||||
}
|
||||
|
||||
battle.notify();
|
||||
}
|
||||
return battle.getLog().toArray(new String[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package at.nanopenguin.mtcg.application;
|
||||
|
||||
import at.nanopenguin.mtcg.Pair;
|
||||
import at.nanopenguin.mtcg.application.service.schemas.Card;
|
||||
import at.nanopenguin.mtcg.db.*;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
@ -9,11 +11,23 @@ import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class Combatant {
|
||||
private UUID userUuid;
|
||||
private final 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));
|
||||
}
|
||||
|
||||
public void updateStats(boolean win) throws SQLException {
|
||||
DbQuery.builder()
|
||||
.command(SqlCommand.UPDATE)
|
||||
.table(Table.USERS)
|
||||
.parameter(win ? "wins = wins" : "losses = losses", new Pair<Integer, SqlOperator>(1, SqlArithmeticOperators.ADD))
|
||||
.parameter("elo = elo", new Pair<Integer, SqlOperator>(
|
||||
win ? 3 : 5,
|
||||
win ? SqlArithmeticOperators.ADD : SqlArithmeticOperators.SUBTRACT)) // stupid hack to use my own code
|
||||
.condition("uuid", userUuid)
|
||||
.executeUpdate();
|
||||
};
|
||||
}
|
||||
|
||||
@ -2,10 +2,7 @@ package at.nanopenguin.mtcg.application;
|
||||
|
||||
import at.nanopenguin.mtcg.Pair;
|
||||
import at.nanopenguin.mtcg.application.service.schemas.TradingDeal;
|
||||
import at.nanopenguin.mtcg.db.DbQuery;
|
||||
import at.nanopenguin.mtcg.db.SqlCommand;
|
||||
import at.nanopenguin.mtcg.db.SqlComparisonOperator;
|
||||
import at.nanopenguin.mtcg.db.Table;
|
||||
import at.nanopenguin.mtcg.db.*;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.val;
|
||||
|
||||
|
||||
@ -67,7 +67,7 @@ public class User {
|
||||
.column("elo")
|
||||
.column("wins")
|
||||
.column("losses")
|
||||
.postfix(" ORDER BY elo");
|
||||
.postfix(" ORDER BY elo DESC");
|
||||
|
||||
ArrayList<UserStats> stats = new ArrayList<>();
|
||||
for (val row : dbQueryBuilder.executeQuery()) {
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
package at.nanopenguin.mtcg.application.service;
|
||||
|
||||
import at.nanopenguin.mtcg.application.SessionHandler;
|
||||
import at.nanopenguin.mtcg.application.TokenValidity;
|
||||
import at.nanopenguin.mtcg.application.User;
|
||||
import at.nanopenguin.mtcg.application.*;
|
||||
import at.nanopenguin.mtcg.http.HttpMethod;
|
||||
import at.nanopenguin.mtcg.http.HttpRequest;
|
||||
import at.nanopenguin.mtcg.http.HttpStatus;
|
||||
@ -32,7 +30,9 @@ public class GameService implements Service {
|
||||
}
|
||||
|
||||
if (request.getPath().split("/")[1].equals("battles") && request.getMethod() == HttpMethod.POST) {
|
||||
return new Response(HttpStatus.NOT_IMPLEMENTED);
|
||||
return new Response(HttpStatus.OK,
|
||||
"text/plain",
|
||||
String.join(System.lineSeparator(), BattleHandler.getInstance().startBattle(userUuid)));
|
||||
}
|
||||
|
||||
return new Response(HttpStatus.NOT_FOUND);
|
||||
|
||||
@ -104,11 +104,11 @@ public final class DbQuery {
|
||||
continue;
|
||||
}
|
||||
|
||||
if(parameter.getValue() instanceof Pair && ((Pair<?, ?>) parameter.getValue()).right() instanceof SqlComparisonOperator sqlComparisonOperator) {
|
||||
if (parameter.getValue() instanceof Pair && ((Pair<?, ?>) parameter.getValue()).right() instanceof SqlOperator sqlOperator) {
|
||||
stringBuilder
|
||||
.append(parameter.getKey())
|
||||
.append(" ")
|
||||
.append(sqlComparisonOperator.Operator)
|
||||
.append(sqlOperator.operator())
|
||||
.append(" ?");
|
||||
continue;
|
||||
}
|
||||
@ -132,6 +132,10 @@ public final class DbQuery {
|
||||
new PreparedStatementExecutor(connection.prepareStatement(sql));
|
||||
int i = 1;
|
||||
for (val value : parameterValues) {
|
||||
if (value instanceof Pair<?,?>) {
|
||||
statementExecutor.setObject(i++, ((Pair<?, ?>) value).left());
|
||||
continue;
|
||||
}
|
||||
if (value instanceof List<?>) {
|
||||
for (Object o : (List<?>) value)
|
||||
statementExecutor.setObject(i++, o);
|
||||
@ -140,6 +144,7 @@ public final class DbQuery {
|
||||
statementExecutor.setObject(i++, value);
|
||||
}
|
||||
|
||||
System.out.println(sql);
|
||||
return statementExecutor.executeUpdate();
|
||||
}
|
||||
}
|
||||
@ -155,6 +160,10 @@ public final class DbQuery {
|
||||
new PreparedStatementExecutor(connection.prepareStatement(sql));
|
||||
int i = 1;
|
||||
for (val value : parameterValues) {
|
||||
if (value instanceof Pair<?,?>) {
|
||||
statementExecutor.setObject(i++, ((Pair<?, ?>) value).left());
|
||||
continue;
|
||||
}
|
||||
if (value instanceof List<?>) {
|
||||
for (Object o : (List<?>) value)
|
||||
statementExecutor.setObject(i++, o);
|
||||
@ -163,6 +172,7 @@ public final class DbQuery {
|
||||
statementExecutor.setObject(i++, value);
|
||||
}
|
||||
|
||||
System.out.println(sql);
|
||||
return statementExecutor.execute();
|
||||
}
|
||||
}
|
||||
@ -190,6 +200,7 @@ public final class DbQuery {
|
||||
statementExecutor.setObject(i++, value);
|
||||
}
|
||||
|
||||
System.out.println(sql);
|
||||
try (ResultSet resultSet = statementExecutor.executeQuery()) {
|
||||
|
||||
List<Map<String, Object>> result = new ArrayList<>();
|
||||
|
||||
18
src/at/nanopenguin/mtcg/db/SqlArithmeticOperators.java
Normal file
18
src/at/nanopenguin/mtcg/db/SqlArithmeticOperators.java
Normal file
@ -0,0 +1,18 @@
|
||||
package at.nanopenguin.mtcg.db;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public enum SqlArithmeticOperators implements SqlOperator {
|
||||
ADD("+"),
|
||||
SUBTRACT("-"),
|
||||
MULTIPLY("*"),
|
||||
DIVIDE("/"),
|
||||
MODULO("%");
|
||||
|
||||
@Accessors(fluent = true)
|
||||
@Getter(onMethod = @__(@Override))
|
||||
public final String operator;
|
||||
}
|
||||
@ -1,9 +1,11 @@
|
||||
package at.nanopenguin.mtcg.db;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public enum SqlComparisonOperator {
|
||||
public enum SqlComparisonOperator implements SqlOperator {
|
||||
EQUAL("="),
|
||||
GREATER_THAN(">"),
|
||||
LESS_THAN("<"),
|
||||
@ -11,6 +13,7 @@ public enum SqlComparisonOperator {
|
||||
LESS_EQUAL("<="),
|
||||
NOT_EQUAL("!=");
|
||||
|
||||
public final String Operator;
|
||||
|
||||
@Accessors(fluent = true)
|
||||
@Getter(onMethod = @__(@Override))
|
||||
public final String operator;
|
||||
}
|
||||
|
||||
22
src/at/nanopenguin/mtcg/db/SqlCompoundOperator.java
Normal file
22
src/at/nanopenguin/mtcg/db/SqlCompoundOperator.java
Normal file
@ -0,0 +1,22 @@
|
||||
package at.nanopenguin.mtcg.db;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public enum SqlCompoundOperator implements SqlOperator {
|
||||
// this class does not work with PostgreSQL https://c.tenor.com/MYZgsN2TDJAAAAAC/tenor.gif
|
||||
ADD("+="),
|
||||
SUBTRACT("-="),
|
||||
MULTIPLY("*="),
|
||||
DIVIDE("/="),
|
||||
MODULO("%="),
|
||||
BIT_AND("&="),
|
||||
BIT_OR("|*="),
|
||||
BIT_XOR("^-=");
|
||||
|
||||
@Accessors(fluent = true)
|
||||
@Getter(onMethod = @__(@Override))
|
||||
public final String operator;
|
||||
}
|
||||
8
src/at/nanopenguin/mtcg/db/SqlOperator.java
Normal file
8
src/at/nanopenguin/mtcg/db/SqlOperator.java
Normal file
@ -0,0 +1,8 @@
|
||||
package at.nanopenguin.mtcg.db;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
public interface SqlOperator {
|
||||
default String operator() { return "="; };
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user