From b50ac3ef447d108ed0aa0036ee8ab939a0c02115 Mon Sep 17 00:00:00 2001 From: helori_ollivier Date: Tue, 24 Mar 2026 08:40:11 +0100 Subject: [PATCH] dig around empty tiles + reorganisation --- src/main/java/bzh/risotto/Main.java | 1 + .../java/bzh/risotto/{ => core}/Game.java | 3 +- .../java/bzh/risotto/{ => core}/MinesMap.java | 2 +- .../bzh/risotto/{ => core}/Minesweeper.java | 60 +++++++++++++++++-- .../bzh/risotto/{ => graphics}/Animation.java | 3 +- .../java/bzh/risotto/tilemap/TileMap.java | 18 ++++++ .../java/bzh/risotto/{ => utils}/Timer.java | 2 +- .../java/bzh/risotto/{ => utils}/Utils.java | 2 +- 8 files changed, 81 insertions(+), 10 deletions(-) rename src/main/java/bzh/risotto/{ => core}/Game.java (97%) rename src/main/java/bzh/risotto/{ => core}/MinesMap.java (99%) rename src/main/java/bzh/risotto/{ => core}/Minesweeper.java (86%) rename src/main/java/bzh/risotto/{ => graphics}/Animation.java (97%) rename src/main/java/bzh/risotto/{ => utils}/Timer.java (96%) rename src/main/java/bzh/risotto/{ => utils}/Utils.java (95%) diff --git a/src/main/java/bzh/risotto/Main.java b/src/main/java/bzh/risotto/Main.java index 3181077..0fc38fc 100644 --- a/src/main/java/bzh/risotto/Main.java +++ b/src/main/java/bzh/risotto/Main.java @@ -1,5 +1,6 @@ package bzh.risotto; +import bzh.risotto.core.Game; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration; diff --git a/src/main/java/bzh/risotto/Game.java b/src/main/java/bzh/risotto/core/Game.java similarity index 97% rename from src/main/java/bzh/risotto/Game.java rename to src/main/java/bzh/risotto/core/Game.java index 1d60757..c4bdc63 100644 --- a/src/main/java/bzh/risotto/Game.java +++ b/src/main/java/bzh/risotto/core/Game.java @@ -1,5 +1,6 @@ -package bzh.risotto; +package bzh.risotto.core; +import bzh.risotto.utils.Timer; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; diff --git a/src/main/java/bzh/risotto/MinesMap.java b/src/main/java/bzh/risotto/core/MinesMap.java similarity index 99% rename from src/main/java/bzh/risotto/MinesMap.java rename to src/main/java/bzh/risotto/core/MinesMap.java index 06ecbe3..00f2188 100644 --- a/src/main/java/bzh/risotto/MinesMap.java +++ b/src/main/java/bzh/risotto/core/MinesMap.java @@ -1,4 +1,4 @@ -package bzh.risotto; +package bzh.risotto.core; import com.badlogic.gdx.math.Vector2; diff --git a/src/main/java/bzh/risotto/Minesweeper.java b/src/main/java/bzh/risotto/core/Minesweeper.java similarity index 86% rename from src/main/java/bzh/risotto/Minesweeper.java rename to src/main/java/bzh/risotto/core/Minesweeper.java index 83486a8..41a99d8 100644 --- a/src/main/java/bzh/risotto/Minesweeper.java +++ b/src/main/java/bzh/risotto/core/Minesweeper.java @@ -1,5 +1,7 @@ -package bzh.risotto; +package bzh.risotto.core; +import bzh.risotto.graphics.Animation; +import bzh.risotto.utils.Utils; import bzh.risotto.tilemap.Tile; import bzh.risotto.tilemap.TileMap; import bzh.risotto.tilemap.TileSet; @@ -56,21 +58,21 @@ public class Minesweeper { TileSet tileSet = new TileSet("tileset.png", new Vector2(16,16), new Vector2(6,10)); + this.minesMap = new MinesMap(new Vector2(10, 10), nbMines); + List> map = loadMap(size); this.tileMap = new TileMap(tileSet, map); - this.tileMap.setTile(5,0,0); tileSet = new TileSet("ui.png", new Vector2(16,16), new Vector2(5,3)); this.overlayMap = new TileMap(tileSet, Utils.emptyMap(size)); - this.minesMap = new MinesMap(new Vector2(10, 10), nbMines); - this.nbMines = nbMines; this.nbLeftOverMines = nbMines; this.explosion = new Animation("explosion.png", new Vector2(16, 16), 5, 0.10); - loadConstArrays(); + + digFirstTile(); } /** @@ -98,6 +100,26 @@ public class Minesweeper { return res; } + /** + * Dig the first tile to start the game on an empty tile + */ + private void digFirstTile() { + // dig empty tile to start game + List emptyTiles = new ArrayList<>(); + Vector2 pos; + for (int i = 0; i < size.x; i++) { + for (int j = 0; j < size.y; j++) { + pos = new Vector2(j, i); + if (this.minesMap.getCell(pos) == 0) { + emptyTiles.add(pos); + } + } + } + + Vector2 digPos = emptyTiles.get((int) (Math.random() * emptyTiles.size())); + dig(tileMap.toWorldMapCoord(digPos)); + } + /** * Dig the gamemap at the coord * convert grass tiles to dirt tiles, and make them visualy connect @@ -145,6 +167,34 @@ public class Minesweeper { int nbMines = minesMap.getCell(coord); this.overlayMap.setTile((nbMines+5), (int) coord.x, (int) coord.y); + + if (minesMap.getCell(coord) == 0) { + digEmptyArround(coord); + } + } + + private void digEmptyArround(Vector2 pos) { + + for (int i = -1; i < 2; i ++) { + for (int j = -1; j < 2; j ++) { + Tile tile = null; + + Vector2 tilePos = new Vector2(pos.x + j, pos.y + i); + + // prevent out of bound error while checking border tiles + try { + tile = tileMap.getTile((int) tilePos.x, (int) tilePos.y); + } catch (IndexOutOfBoundsException e) { + + //logger.info("Out of world check", e); + } + + // if not digged and mines arround is 0, dig + if (tile != null && dirtTiles.contains(tile.getId())) { + dig(tileMap.toWorldMapCoord(tilePos)); + } + } + } } public void mark(Vector2 worldCoord) { diff --git a/src/main/java/bzh/risotto/Animation.java b/src/main/java/bzh/risotto/graphics/Animation.java similarity index 97% rename from src/main/java/bzh/risotto/Animation.java rename to src/main/java/bzh/risotto/graphics/Animation.java index be5e6ae..dc99988 100644 --- a/src/main/java/bzh/risotto/Animation.java +++ b/src/main/java/bzh/risotto/graphics/Animation.java @@ -1,5 +1,6 @@ -package bzh.risotto; +package bzh.risotto.graphics; +import bzh.risotto.utils.Timer; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; diff --git a/src/main/java/bzh/risotto/tilemap/TileMap.java b/src/main/java/bzh/risotto/tilemap/TileMap.java index 6b5e63b..04c96d7 100644 --- a/src/main/java/bzh/risotto/tilemap/TileMap.java +++ b/src/main/java/bzh/risotto/tilemap/TileMap.java @@ -131,4 +131,22 @@ public class TileMap { return tileMapCoord; } + + /** + * convert tilemap coord to world coord + * + * @param tileMapdCoord world coordinate to convert + * @return tilemap coordinate + */ + public Vector2 toWorldMapCoord(Vector2 tileMapCoord) { + + Vector2 worldCoord = new Vector2(); + Vector2 tileSize = tileSet.getTileSize(); + + worldCoord.x = (int) (tileMapCoord.x * tileSize.x); + worldCoord.y = (int) (tileMapCoord.y * tileSize.y); + + return worldCoord; + + } } diff --git a/src/main/java/bzh/risotto/Timer.java b/src/main/java/bzh/risotto/utils/Timer.java similarity index 96% rename from src/main/java/bzh/risotto/Timer.java rename to src/main/java/bzh/risotto/utils/Timer.java index 5dd5816..52ce921 100644 --- a/src/main/java/bzh/risotto/Timer.java +++ b/src/main/java/bzh/risotto/utils/Timer.java @@ -1,4 +1,4 @@ -package bzh.risotto; +package bzh.risotto.utils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/bzh/risotto/Utils.java b/src/main/java/bzh/risotto/utils/Utils.java similarity index 95% rename from src/main/java/bzh/risotto/Utils.java rename to src/main/java/bzh/risotto/utils/Utils.java index 2ab7020..0d055ea 100644 --- a/src/main/java/bzh/risotto/Utils.java +++ b/src/main/java/bzh/risotto/utils/Utils.java @@ -1,4 +1,4 @@ -package bzh.risotto; +package bzh.risotto.utils; import com.badlogic.gdx.math.Vector2;