diff --git a/src/player/malte/MalteAI.java b/src/player/malte/MalteAI.java index 6dae82f..f71c988 100644 --- a/src/player/malte/MalteAI.java +++ b/src/player/malte/MalteAI.java @@ -64,7 +64,6 @@ public class MalteAI implements Player{ for (double d: weights) { max = max > d ? max: d; } - System.out.println(Arrays.toString(weights)); for (int i = 0; i < weights.length; i++) { if (Math.abs(max - weights[i]) < 0.000001) { return i; @@ -77,8 +76,6 @@ public class MalteAI implements Player{ double W_ILLEGAL = Double.MIN_VALUE; double W_DONT = 0.01; double weight = 1.0; - // Prever a place in the center; - weight *= 1.0 - Math.abs(3.0 - column) / (3.0 * 100.0); // Relative positions like (-1, -1), (0, -1), etc. Position[] relAround = Position.getRelCirclePositions(); // The position we're looking at @@ -88,6 +85,9 @@ public class MalteAI implements Player{ weight *= W_ILLEGAL; return weight; } + // Prever a place in the center; + weight *= 1.0 - Math.abs(3.0 - thisPos.getPosX()) / (3.0 * 100.0); + weight *= 1.0 - Math.abs(5.0 - thisPos.getPosY()) / (5.0 * 100.0); // Setup Sequences Sequence[] sequences = new Sequence[8]; Sequence[] sequencesAbove = new Sequence[8]; @@ -111,32 +111,32 @@ public class MalteAI implements Player{ for (int i = 0; i < sequences.length / 2; i++) { Sequence x = sequences[i]; Sequence y = sequences[i + 4]; - weight *= getBaseWeightForSequences(x, y); + weight *= getBaseWeightForSequences(x, y, false); Sequence xA = sequencesAbove[i]; Sequence yA = sequencesAbove[i + 4]; - // weight *= getBaseWeightForSequences(xA, yA); - if ((xA.matches("EEE") || - yA.matches("EEE")) || - ((xA.matches("E") && - yA.matches("EE")) || - (xA.matches("EE") && - yA.matches("E")))) { - // TODO: Do this right! - weight /= 2<<6; - } + weight *= Math.sqrt(getBaseWeightForSequences(xA, yA, true)); } return weight; } - private double getBaseWeightForSequences(Sequence x, Sequence y) { - double W_PRIORITY_1 = 2 << 8; - double W_PRIORITY_2 = 2 << 6; - double W_PRIORITY_3 = 2 << 4; - double W_PRIORITY_4 = 2 << 2; - double W_PRIORITY_5 = 2 << 0; + /** + * + * @param altWeight Weights enemy advances negativ. + */ + private double getBaseWeightForSequences(Sequence x, Sequence y, boolean altWeight) { + double W_PRIORITY_1 = 1 << 8; + double W_PRIORITY_2 = 1 << 6; + double W_PRIORITY_3 = 1 << 4; + double W_PRIORITY_4 = 1 << 2; + double W_PRIORITY_5 = 1 << 0; double W_PRIORITY_6 = 1.0; double W_START = 1.0; double weight = W_START; + if (altWeight) { + W_PRIORITY_2 = 1 / 4; + W_PRIORITY_4 = 1 / 3; + W_PRIORITY_6 = 1 / 2; + } if (x.matches("MMM") || y.matches("MMM")) { weight *= W_PRIORITY_1; diff --git a/src/player/malte/SequencesOrdered b/src/player/malte/SequencesOrdered index 502e42b..f3ae3c8 100644 --- a/src/player/malte/SequencesOrdered +++ b/src/player/malte/SequencesOrdered @@ -1,14 +1,14 @@ -1 XMMM // Vierter in der Reihe -1 MXMM -2 XEEE // Vierter beim Gegner -2 EXEE -3 _XMM_ // Sicherer Sieg nächste Runde -3 _MXM_ -4 _XEE_ // Sicherer Sieg des Gegners nächste Runde -4 _EXE_ -5 XMM_ // Möglicher Sieg nächste Runde -5 _XMM -5 MXM_ -6 XEE_ // Möglicher Sieg des Gegners in der nächsten Runde -6 _XEE -6 EXE_ \ No newline at end of file ++ 1 XMMM // Vierter in der Reihe ++ 1 MXMM +- 2 XEEE // Vierter beim Gegner +- 2 EXEE ++ 3 _XMM_ // Sicherer Sieg nächste Runde ++ 3 _MXM_ +- 4 _XEE_ // Sicherer Sieg des Gegners nächste Runde +- 4 _EXE_ ++ 5 XMM_ // Möglicher Sieg nächste Runde ++ 5 _XMM ++ 5 MXM_ +- 6 XEE_ // Möglicher Sieg des Gegners in der nächsten Runde +- 6 _XEE +- 6 EXE_ \ No newline at end of file