add olympic segment
This commit is contained in:
parent
c5e6eb6582
commit
191077ef19
5 changed files with 56 additions and 3 deletions
|
@ -74,7 +74,7 @@ public class Die extends Actor {
|
||||||
return getFace().getValue();
|
return getFace().getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBlank() {
|
public boolean isFaceBlank() {
|
||||||
return getFaceValue() <= 0;
|
return getFaceValue() <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ import com.badlogic.gdx.math.Vector2;
|
||||||
import com.badlogic.gdx.utils.ScreenUtils;
|
import com.badlogic.gdx.utils.ScreenUtils;
|
||||||
import com.monjaro.gamejam.segment.DualSegment;
|
import com.monjaro.gamejam.segment.DualSegment;
|
||||||
import com.monjaro.gamejam.segment.KinSegment;
|
import com.monjaro.gamejam.segment.KinSegment;
|
||||||
|
import com.monjaro.gamejam.segment.OlympicSegment;
|
||||||
import com.monjaro.gamejam.segment.Segment;
|
import com.monjaro.gamejam.segment.Segment;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -55,6 +56,9 @@ public class Game extends ApplicationAdapter {
|
||||||
for (int i = 1; i <= 5; i++) {
|
for (int i = 1; i <= 5; i++) {
|
||||||
segments.add(new KinSegment(i));
|
segments.add(new KinSegment(i));
|
||||||
}
|
}
|
||||||
|
for (int i = 2; i <= 5; i++) {
|
||||||
|
segments.add(new OlympicSegment(i));
|
||||||
|
}
|
||||||
segments.add(new DualSegment(false));
|
segments.add(new DualSegment(false));
|
||||||
segments.add(new DualSegment(true));
|
segments.add(new DualSegment(true));
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ public class KinSegment extends Segment { //multiple dice of the same value
|
||||||
case 3 -> "Trio";
|
case 3 -> "Trio";
|
||||||
case 4 -> "Quartet";
|
case 4 -> "Quartet";
|
||||||
case 5 -> "Quintet";
|
case 5 -> "Quintet";
|
||||||
|
case 6 -> "What?";
|
||||||
default -> requirement + " of a kind";
|
default -> requirement + " of a kind";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
48
core/src/com/monjaro/gamejam/segment/OlympicSegment.java
Normal file
48
core/src/com/monjaro/gamejam/segment/OlympicSegment.java
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
package com.monjaro.gamejam.segment;
|
||||||
|
|
||||||
|
import com.monjaro.gamejam.Die;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class OlympicSegment extends Segment {
|
||||||
|
|
||||||
|
private final int length;
|
||||||
|
|
||||||
|
public OlympicSegment(int length) {
|
||||||
|
this.length = length;
|
||||||
|
|
||||||
|
name = switch (length) {
|
||||||
|
case 1 -> "Any";
|
||||||
|
case 2 -> "Stumble";
|
||||||
|
case 3 -> "Hop";
|
||||||
|
case 4 -> "Skip";
|
||||||
|
case 5 -> "Jump";
|
||||||
|
default -> "Mach " + (length - 5);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDestroyedBy(List<Die> dice) {
|
||||||
|
List<Integer> values = dice.stream()
|
||||||
|
.filter(d -> !d.isFaceBlank())
|
||||||
|
.map(Die::getFaceValue)
|
||||||
|
.distinct()
|
||||||
|
.sorted()
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
int last = -1, run = 1, best = run;
|
||||||
|
|
||||||
|
for (int value : values) {
|
||||||
|
if (value == last + 1) {
|
||||||
|
if (++run > best) best = run;
|
||||||
|
} else {
|
||||||
|
run = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
last = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return best >= length;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -16,13 +16,13 @@ public abstract class Segment {
|
||||||
destroyed = true;
|
destroyed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract boolean isDestroyedBy(List<Die> die);
|
public abstract boolean isDestroyedBy(List<Die> dice);
|
||||||
|
|
||||||
protected Map<Integer, Integer> countValues(List<Die> dice) {
|
protected Map<Integer, Integer> countValues(List<Die> dice) {
|
||||||
Map<Integer, Integer> counts = new HashMap<>();
|
Map<Integer, Integer> counts = new HashMap<>();
|
||||||
|
|
||||||
for (Die die : dice) {
|
for (Die die : dice) {
|
||||||
if (die.isBlank()) continue;
|
if (die.isFaceBlank()) continue;
|
||||||
|
|
||||||
int count = counts.getOrDefault(die.getFaceValue(), 0) + 1;
|
int count = counts.getOrDefault(die.getFaceValue(), 0) + 1;
|
||||||
counts.put(die.getFaceValue(), count);
|
counts.put(die.getFaceValue(), count);
|
||||||
|
|
Loading…
Add table
Reference in a new issue