diff --git a/core/build.gradle b/core/build.gradle index 0cad2ec..741d4b9 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,4 +1,4 @@ -sourceCompatibility = 1.8 +sourceCompatibility = 1.20 [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' sourceSets.main.java.srcDirs = [ "src/" ] diff --git a/core/src/com/monjaro/gamejam/Die.java b/core/src/com/monjaro/gamejam/Die.java index 4be35d3..a2cf27c 100644 --- a/core/src/com/monjaro/gamejam/Die.java +++ b/core/src/com/monjaro/gamejam/Die.java @@ -1,24 +1,19 @@ package com.monjaro.gamejam; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.math.Rectangle; -import com.badlogic.gdx.math.Vector2; - import java.util.List; import java.util.Random; public class Die extends Actor { private Transform transform; - private int rotation; + /* 0 1 2 3 4 5 */ - private final Face[] faces = new Face[6]; private int faceIndex = 3; private boolean locked = false; @@ -27,14 +22,6 @@ public class Die extends Actor { private final Random random = new Random(); //TODO use central random - public Die() { - transform = new Transform(); - - int[] pips = {4, 6, 5, 1, 2, 3}; - for (int i = 0; i < faces.length; i++) { - faces[i] = new Face(pips[i], transform); - } - } public Die(float x, float y, float width, float height) { transform = new Transform(x, y, width, height); @@ -65,9 +52,7 @@ public class Die extends Actor { } public void roll() { - if (!locked) { - faceIndex = random.nextInt(6); - } + faceIndex = random.nextInt(6); } public static void setLockedSprite(Texture sprite){ @@ -90,6 +75,10 @@ public class Die extends Actor { return getFace().getValue(); } + public boolean isBlank() { + return getFaceValue() <= 0; + } + public boolean isLocked() { return locked; } diff --git a/core/src/com/monjaro/gamejam/Face.java b/core/src/com/monjaro/gamejam/Face.java index 27bce44..457199c 100644 --- a/core/src/com/monjaro/gamejam/Face.java +++ b/core/src/com/monjaro/gamejam/Face.java @@ -1,9 +1,8 @@ package com.monjaro.gamejam; + import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; @@ -12,7 +11,6 @@ import java.util.Collections; import java.util.List; import java.util.Random; - public class Face extends Actor{ private Transform transform; @@ -22,7 +20,6 @@ public class Face extends Actor{ private static Texture blankFaceSprite; private static Texture pipSprite; - public Face(int pipCount, Transform transform) { addPipsForValue(pipCount); this.transform = transform; diff --git a/core/src/com/monjaro/gamejam/Game.java b/core/src/com/monjaro/gamejam/Game.java index c47756d..23429a2 100644 --- a/core/src/com/monjaro/gamejam/Game.java +++ b/core/src/com/monjaro/gamejam/Game.java @@ -3,12 +3,13 @@ package com.monjaro.gamejam; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; -import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; 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.Segment; import java.util.ArrayList; import java.util.HashSet; @@ -20,9 +21,9 @@ public class Game extends ApplicationAdapter { private final Set actors = new HashSet<>(); private final List dice = new ArrayList<>(); + private final List segments = new ArrayList<>(); private SpriteBatch batch; - private BitmapFont font; private Texture img; private final static int TICKS_PER_SECOND = 60; @@ -31,7 +32,6 @@ public class Game extends ApplicationAdapter { @Override public void create() { batch = new SpriteBatch(); - font = new BitmapFont(); img = new Texture("badlogic.jpg"); Face.setBlankFaceSprite(new Texture("blank_die_face.png")); @@ -43,6 +43,12 @@ public class Game extends ApplicationAdapter { for (int i = 0; i < 5; i++) { dice.add(new Die(divide * (i + 1), 350, 64, 64)); } + + for (int i = 1; i <= 5; i++) { + segments.add(new KinSegment(i)); + } + segments.add(new DualSegment(false)); + segments.add(new DualSegment(true)); } public void tick() { @@ -54,10 +60,16 @@ public class Game extends ApplicationAdapter { public void processInput() { Input input = Gdx.input; - if (input.isKeyJustPressed(Input.Keys.R)) { //reroll dice - dice.forEach(Die::roll); + if (input.isKeyJustPressed(Input.Keys.R)) { //reroll dice that aren't locked + dice.stream().filter(d -> !d.isLocked()).forEach(Die::roll); + + System.out.println("=".repeat(100)); + for (Segment segment : segments) { + System.out.println(segment.getName() + ": " + segment.isDestroyedBy(dice)); + } } + for (int i = 0; i < dice.size(); i++) { //lock dice, iterating over for each keycode Die die = dice.get(i); //die iterator is looking at int keyCode = Input.Keys.NUM_1 + i; //keycode for the current die, 1, 2...9, 0 on keyboard @@ -82,7 +94,6 @@ public class Game extends ApplicationAdapter { actors.forEach(a -> a.render(batch)); //TODO debug - int x = 100; for (Die die : dice) { die.render(batch); } diff --git a/core/src/com/monjaro/gamejam/segment/DualSegment.java b/core/src/com/monjaro/gamejam/segment/DualSegment.java new file mode 100644 index 0000000..07082af --- /dev/null +++ b/core/src/com/monjaro/gamejam/segment/DualSegment.java @@ -0,0 +1,58 @@ +package com.monjaro.gamejam.segment; + +import com.monjaro.gamejam.Die; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class DualSegment extends Segment { + + private final boolean firstTrio; + + public DualSegment(boolean firstTrio) { //first is a trio or duo, second is a duo + this.firstTrio = firstTrio; + + if (firstTrio) { + Random random = new Random(); + + if (random.nextInt(10) != 0) { + name = "Full House"; + } else { + String[] names = new String[]{ + "Complete Household", + "Entire Residence", + "Occupied Home", + "Family Residence", + "Filled Dwelling", + "Packed Abode", + "Crowded Domicile", + "Busy Household", + "Well-occupied Home", + "Houseful" + }; //thank you ChatGPT for alternate names + name = names[random.nextInt(names.length)]; + } + } else { + name = "Dual Duo"; + } + } + + @Override + public boolean isDestroyedBy(List dice) { + Map counts = countValues(dice); + + Map countCounts = new HashMap<>(); //count of counts + for (int count : counts.values()) { + for (int i = count; i >= 1; i--) { //add from count to 1 - this is so a trio is also a pair, e.g. 11122 is a dual duo + int countCount = countCounts.getOrDefault(i, 0) + 1; + countCounts.put(i, countCount); + } + } + + return countCounts.getOrDefault(2, 0) >= 2 + && (!firstTrio || countCounts.getOrDefault(3, 0) >= 1); + } + +} diff --git a/core/src/com/monjaro/gamejam/segment/KinSegment.java b/core/src/com/monjaro/gamejam/segment/KinSegment.java new file mode 100644 index 0000000..f27f271 --- /dev/null +++ b/core/src/com/monjaro/gamejam/segment/KinSegment.java @@ -0,0 +1,38 @@ +package com.monjaro.gamejam.segment; + +import com.monjaro.gamejam.Die; + +import java.util.List; +import java.util.Map; + +public class KinSegment extends Segment { //multiple dice of the same value + + private final int requirement; + + public KinSegment(int requirement) { + this.requirement = requirement; + + name = switch (requirement) { + case 1 -> "Any"; + case 2 -> "Duo"; + case 3 -> "Trio"; + case 4 -> "Quartet"; + case 5 -> "Quintet"; + default -> requirement + " of a kind"; + }; + } + + @Override + public boolean isDestroyedBy(List dice) { + Map counts = countValues(dice); + + for (int count : counts.values()) { + if (count >= requirement) { + return true; + } + } + + return false; + } + +} diff --git a/core/src/com/monjaro/gamejam/segment/Segment.java b/core/src/com/monjaro/gamejam/segment/Segment.java new file mode 100644 index 0000000..5086c0c --- /dev/null +++ b/core/src/com/monjaro/gamejam/segment/Segment.java @@ -0,0 +1,38 @@ +package com.monjaro.gamejam.segment; + +import com.monjaro.gamejam.Die; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public abstract class Segment { + + private boolean destroyed = false; + + protected String name; + + public void destroy() { + destroyed = true; + } + + public abstract boolean isDestroyedBy(List die); + + public String getName() { + return name; + } + + protected Map countValues(List dice) { + Map counts = new HashMap<>(); + + for (Die die : dice) { + if (die.isBlank()) continue; + + int count = counts.getOrDefault(die.getFaceValue(), 0) + 1; + counts.put(die.getFaceValue(), count); + } + + return counts; + } + +} diff --git a/desktop/build.gradle b/desktop/build.gradle index d957fdc..dffa54c 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -1,4 +1,4 @@ -sourceCompatibility = 1.8 +sourceCompatibility = 1.20 sourceSets.main.java.srcDirs = [ "src/" ] sourceSets.main.resources.srcDirs = ["../assets"]