add olympic segment

This commit is contained in:
James 2024-04-21 02:45:54 +01:00
parent c5e6eb6582
commit 191077ef19
5 changed files with 56 additions and 3 deletions

View file

@ -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;
} }

View file

@ -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));
} }

View file

@ -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";
}; };
} }

View 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;
}
}

View file

@ -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);