diff --git a/core/src/com/monjaro/gamejam/Die.java b/core/src/com/monjaro/gamejam/Die.java index ac0f81d..111dbef 100644 --- a/core/src/com/monjaro/gamejam/Die.java +++ b/core/src/com/monjaro/gamejam/Die.java @@ -74,7 +74,7 @@ public class Die extends Actor { return getFace().getValue(); } - public boolean isBlank() { + public boolean isFaceBlank() { return getFaceValue() <= 0; } diff --git a/core/src/com/monjaro/gamejam/Game.java b/core/src/com/monjaro/gamejam/Game.java index 7f9ca1f..4a193a8 100644 --- a/core/src/com/monjaro/gamejam/Game.java +++ b/core/src/com/monjaro/gamejam/Game.java @@ -10,6 +10,7 @@ import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.ScreenUtils; import com.monjaro.gamejam.segment.DualSegment; import com.monjaro.gamejam.segment.KinSegment; +import com.monjaro.gamejam.segment.OlympicSegment; import com.monjaro.gamejam.segment.Segment; import java.util.ArrayList; @@ -55,6 +56,9 @@ public class Game extends ApplicationAdapter { for (int i = 1; i <= 5; 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(true)); } diff --git a/core/src/com/monjaro/gamejam/segment/KinSegment.java b/core/src/com/monjaro/gamejam/segment/KinSegment.java index f27f271..d2b159e 100644 --- a/core/src/com/monjaro/gamejam/segment/KinSegment.java +++ b/core/src/com/monjaro/gamejam/segment/KinSegment.java @@ -18,6 +18,7 @@ public class KinSegment extends Segment { //multiple dice of the same value case 3 -> "Trio"; case 4 -> "Quartet"; case 5 -> "Quintet"; + case 6 -> "What?"; default -> requirement + " of a kind"; }; } diff --git a/core/src/com/monjaro/gamejam/segment/OlympicSegment.java b/core/src/com/monjaro/gamejam/segment/OlympicSegment.java new file mode 100644 index 0000000..fc9e598 --- /dev/null +++ b/core/src/com/monjaro/gamejam/segment/OlympicSegment.java @@ -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 dice) { + List 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; + } + +} diff --git a/core/src/com/monjaro/gamejam/segment/Segment.java b/core/src/com/monjaro/gamejam/segment/Segment.java index f9b5749..2234d44 100644 --- a/core/src/com/monjaro/gamejam/segment/Segment.java +++ b/core/src/com/monjaro/gamejam/segment/Segment.java @@ -16,13 +16,13 @@ public abstract class Segment { destroyed = true; } - public abstract boolean isDestroyedBy(List die); + public abstract boolean isDestroyedBy(List dice); protected Map countValues(List dice) { Map counts = new HashMap<>(); for (Die die : dice) { - if (die.isBlank()) continue; + if (die.isFaceBlank()) continue; int count = counts.getOrDefault(die.getFaceValue(), 0) + 1; counts.put(die.getFaceValue(), count);