From 589a31b181151b71ffc0c11452cbf0c6f98bee8e Mon Sep 17 00:00:00 2001 From: hanishg_groww Date: Fri, 26 Jun 2026 22:55:11 +0530 Subject: [PATCH 1/4] Hello world --- Readme | 1 + 1 file changed, 1 insertion(+) create mode 100644 Readme diff --git a/Readme b/Readme new file mode 100644 index 00000000..5ab2f8a4 --- /dev/null +++ b/Readme @@ -0,0 +1 @@ +Hello \ No newline at end of file From 89ec4d4b9aee3b36162ae5120bf353058349e8aa Mon Sep 17 00:00:00 2001 From: hanishg_groww Date: Fri, 26 Jun 2026 23:00:03 +0530 Subject: [PATCH 2/4] Main class --- snake_ladder/Main.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 snake_ladder/Main.java diff --git a/snake_ladder/Main.java b/snake_ladder/Main.java new file mode 100644 index 00000000..0b5c9325 --- /dev/null +++ b/snake_ladder/Main.java @@ -0,0 +1,8 @@ +package snake_ladder; + +public class Main { + + public static void main(String[] args) { + System.out.println("Hello World"); + } +} From 4f026337dcc6bb8fc729c9d97601fc7accbfe838 Mon Sep 17 00:00:00 2001 From: hanishg_groww Date: Sat, 27 Jun 2026 13:52:02 +0530 Subject: [PATCH 3/4] working implementation v0 --- snake_ladder/Main.java | 79 ++++++++++++++++++- .../behaviours/DiceRollBehaviour.java | 10 +++ .../behaviours/SimpleDiceRollBehaviour.java | 31 ++++++++ snake_ladder/entities/Game.java | 41 ++++++++++ snake_ladder/entities/GameElement.java | 23 ++++++ snake_ladder/entities/Ladder.java | 13 +++ snake_ladder/entities/Player.java | 29 +++++++ snake_ladder/entities/Snake.java | 13 +++ snake_ladder/input/Input1.txt | 0 snake_ladder/planning | 0 10 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 snake_ladder/behaviours/DiceRollBehaviour.java create mode 100644 snake_ladder/behaviours/SimpleDiceRollBehaviour.java create mode 100644 snake_ladder/entities/Game.java create mode 100644 snake_ladder/entities/GameElement.java create mode 100644 snake_ladder/entities/Ladder.java create mode 100644 snake_ladder/entities/Player.java create mode 100644 snake_ladder/entities/Snake.java create mode 100644 snake_ladder/input/Input1.txt create mode 100644 snake_ladder/planning diff --git a/snake_ladder/Main.java b/snake_ladder/Main.java index 0b5c9325..3ceb257a 100644 --- a/snake_ladder/Main.java +++ b/snake_ladder/Main.java @@ -1,8 +1,85 @@ package snake_ladder; +import snake_ladder.behaviours.SimpleDiceRollBehaviour; +import snake_ladder.entities.Game; +import snake_ladder.entities.GameElement; +import snake_ladder.entities.Ladder; +import snake_ladder.entities.Player; +import snake_ladder.entities.Snake; + +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Scanner; + public class Main { + private static class GameConfig { + private final Map gameElementMap; + private final List players; + + private GameConfig(Map gameElementMap, List players) { + this.gameElementMap = gameElementMap; + this.players = players; + } + } + + private static GameConfig loadGameConfig(String inputPath) { + Map gameElementMap = new HashMap<>(); + List players = new ArrayList<>(); + + try (Scanner sc = new Scanner(new BufferedInputStream(new FileInputStream(inputPath)))) { + int snakeCount = sc.nextInt(); + for (int i = 0; i < snakeCount; i++) { + int head = sc.nextInt(); + int tail = sc.nextInt(); + gameElementMap.put(head, new Snake(head, tail)); + } + + int ladderCount = sc.nextInt(); + for (int i = 0; i < ladderCount; i++) { + int start = sc.nextInt(); + int end = sc.nextInt(); + gameElementMap.put(start, new Ladder(start, end)); + } + + int playerCount = sc.nextInt(); + for (int i = 0; i < playerCount; i++) { + String name = sc.next(); + players.add(new Player(name, 0)); + } + } catch (IOException e) { + throw new RuntimeException("Failed to read input file: " + inputPath, e); + } + + return new GameConfig(gameElementMap, players); + } + + public static void main(String[] args) { - System.out.println("Hello World"); + int gameSize = 100; + + String inputPath = args.length > 0 ? args[0] : "input/Input1.txt"; + GameConfig config = loadGameConfig(inputPath); + Game game = new Game(gameSize, config.gameElementMap, config.players, new SimpleDiceRollBehaviour()); + + Random randomNumber = new Random(); + int min = 1, max = 6; + while (true) { + for (Player player : config.players) { + int diceRoll = randomNumber.nextInt(max - min + 1) + min; + game.rollDice(player, diceRoll); + + if (player.getPosition() == gameSize) { + System.out.println(player.getName() + " wins the game"); + return; + } + } + } } } diff --git a/snake_ladder/behaviours/DiceRollBehaviour.java b/snake_ladder/behaviours/DiceRollBehaviour.java new file mode 100644 index 00000000..27925ba3 --- /dev/null +++ b/snake_ladder/behaviours/DiceRollBehaviour.java @@ -0,0 +1,10 @@ +package snake_ladder.behaviours; + +import snake_ladder.entities.Game; +import snake_ladder.entities.Player; + +public interface DiceRollBehaviour { + + void rollDice(Game game, Player p, int number); + +} diff --git a/snake_ladder/behaviours/SimpleDiceRollBehaviour.java b/snake_ladder/behaviours/SimpleDiceRollBehaviour.java new file mode 100644 index 00000000..cdd34dd5 --- /dev/null +++ b/snake_ladder/behaviours/SimpleDiceRollBehaviour.java @@ -0,0 +1,31 @@ +package snake_ladder.behaviours; + +import snake_ladder.entities.Game; +import snake_ladder.entities.GameElement; +import snake_ladder.entities.Player; + +import java.util.Map; + +public class SimpleDiceRollBehaviour implements DiceRollBehaviour{ + + public void rollDice(Game game, Player player, int number) { + int gameSize = game.getGameSize(); + + int playerPosition = player.getPosition(); + int endPosition = playerPosition + number; + + if (endPosition > gameSize) { + return; + } + + Map gameElementMap = game.getElementsMap(); + + while (gameElementMap.containsKey(endPosition)) { + GameElement gameElement = gameElementMap.get(endPosition); + endPosition = gameElement.act(); + } + + player.setPosition(endPosition); + } + +} diff --git a/snake_ladder/entities/Game.java b/snake_ladder/entities/Game.java new file mode 100644 index 00000000..a6c0a077 --- /dev/null +++ b/snake_ladder/entities/Game.java @@ -0,0 +1,41 @@ +package snake_ladder.entities; + +import snake_ladder.behaviours.DiceRollBehaviour; + +import java.util.List; +import java.util.Map; + +public class Game { + + private final int gameSize; + private final Map elementsMap; + private final List players; + private final DiceRollBehaviour diceRollBehaviour; + + public Game(int gameSize, Map elementsMap, List players, DiceRollBehaviour diceRollBehaviour) { + this.gameSize = gameSize; + this.elementsMap = elementsMap; + this.players = players; + this.diceRollBehaviour = diceRollBehaviour; + } + + public int getGameSize() { + return this.gameSize; + } + + public List getPlayers() { + return this.players; + } + + public Map getElementsMap() { + return this.elementsMap; + } + + public void rollDice(Player p, int number) { + int playerStartPosition = p.getPosition(); + this.diceRollBehaviour.rollDice(this, p, number); + int playerEndPosition = p.getPosition(); + System.out.println(p.getName() + " rolled a " + number + " and moved from " + playerStartPosition + " to " + playerEndPosition); + } + +} diff --git a/snake_ladder/entities/GameElement.java b/snake_ladder/entities/GameElement.java new file mode 100644 index 00000000..88d2d2e5 --- /dev/null +++ b/snake_ladder/entities/GameElement.java @@ -0,0 +1,23 @@ +package snake_ladder.entities; + +public abstract class GameElement { + + private final int startPosition; + private final int endPosition; + + GameElement(int startPosition, int endPosition) { + this.startPosition = startPosition; + this.endPosition = endPosition; + } + + public int getStartPosition() { + return this.startPosition; + } + + public int getEndPosition() { + return this.endPosition; + } + + public abstract int act(); + +} diff --git a/snake_ladder/entities/Ladder.java b/snake_ladder/entities/Ladder.java new file mode 100644 index 00000000..e2644fa8 --- /dev/null +++ b/snake_ladder/entities/Ladder.java @@ -0,0 +1,13 @@ +package snake_ladder.entities; + +public class Ladder extends GameElement{ + + public Ladder(int startPosition, int endPosition) { + super(startPosition, endPosition); + } + + public int act() { + return this.getEndPosition(); + } + +} diff --git a/snake_ladder/entities/Player.java b/snake_ladder/entities/Player.java new file mode 100644 index 00000000..4511cede --- /dev/null +++ b/snake_ladder/entities/Player.java @@ -0,0 +1,29 @@ +package snake_ladder.entities; + +public class Player { + + private final String name; + private int position; + + public Player(String name) { + this.name = name; + } + + public Player(String name, int startPosition) { + this.name = name; + this.position = startPosition; + } + + public String getName() { + return this.name; + } + + public int getPosition() { + return this.position; + } + + public void setPosition(int position) { + this.position = position; + } + +} diff --git a/snake_ladder/entities/Snake.java b/snake_ladder/entities/Snake.java new file mode 100644 index 00000000..68071738 --- /dev/null +++ b/snake_ladder/entities/Snake.java @@ -0,0 +1,13 @@ +package snake_ladder.entities; + +public class Snake extends GameElement{ + + public Snake(int startPosition, int endPosition) { + super(startPosition, endPosition); + } + + public int act() { + return this.getEndPosition(); + } + +} diff --git a/snake_ladder/input/Input1.txt b/snake_ladder/input/Input1.txt new file mode 100644 index 00000000..e69de29b diff --git a/snake_ladder/planning b/snake_ladder/planning new file mode 100644 index 00000000..e69de29b From 6141c9e6daae4e6aaff9bbe53791d18dbc4aafdd Mon Sep 17 00:00:00 2001 From: hanishg_groww Date: Sat, 27 Jun 2026 13:53:58 +0530 Subject: [PATCH 4/4] replace static class -> record --- snake_ladder/Main.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/snake_ladder/Main.java b/snake_ladder/Main.java index 3ceb257a..4af17a04 100644 --- a/snake_ladder/Main.java +++ b/snake_ladder/Main.java @@ -19,14 +19,7 @@ public class Main { - private static class GameConfig { - private final Map gameElementMap; - private final List players; - - private GameConfig(Map gameElementMap, List players) { - this.gameElementMap = gameElementMap; - this.players = players; - } + private record GameConfig(Map gameElementMap, List players) { } private static GameConfig loadGameConfig(String inputPath) {