Here is my implementation for Simulating Snake and Ladder game.

1- Multi Player game. Played on a grid of size 100. Each cell will have a number.
2 -Some off the cell will have ladder which will jump to higher number.
3 -Some cell will have a snake which will take you down to tail number.
4- Player will in turn roll a die(1-6). Based on the value user will advance.
User Action -> Dice Roll


Board.java

package snakeLadder;

import java.util.HashMap;
import java.util.Map;

public class Board {
    int grid;
    Map<Integer, Integer> snake = new HashMap<>();
    Map<Integer,Integer> ladder = new HashMap<>();
    int winingPositon;
    public void addSnake(int head, int tail){
        snake.put(head,tail);
    }
    public void addLadder(int start, int end){
        ladder.put(start,end);
    }
    void setWiningPositon(int positon) {
        winingPositon =  positon;
    }
    void setGrid(int size) {
        grid = size;
    }
     public Board() {
        grid = 100;
        winingPositon = 100; // Can be set using setter 
    }
    public void advanced( User user, int value){
        if(user.position + value > grid){
            return;
        }
        user.position += value;
        if (snake.get(user.position) != null ){
            System.out.println(" "+ user.name+ " Bit By snake LOL!!");
            user.position = snake.get(user.position);
        }
        if (ladder.get(user.position) != null ){
            System.out.println(" "+ user.name+" Got ladder Haha :)");
            user.position = ladder.get(user.position);
        }
    }

}

User.java

package snakeLadder;

public class User {
    String name;
    int position;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public User(String name, int position) {
        this.name = name;
        this.position = position;
    }
}

SnakeLadder.java

package snakeLadder;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class SnakeLadder {
    public Board board;
    List<User> users = new ArrayList<>();
    List<User> winnerList = new ArrayList<>();
    public void addUser(User newUser) {
        users.add(newUser);
    }

    public SnakeLadder(Board board, List<User> userList) {
        this.board = board;
        this.users = userList;
    }

    public int rollDice() {
        Random r = new Random();
        int value = r.nextInt(6) + 1;
        if (value == 6) {
            value += r.nextInt(6) + 1;
        }
        if (value == 12) {
            value += r.nextInt(6) + 1;
        }
	   if (value == 18) {
            return 0;
        }
        return value;
    }

    public void simulate() {
        int current = 0;
        int ite = 0;
        while (winnerList.size() < users.size()) {

            if (current >= users.size() - 1) {

                current = 0;
            } else {
                current += 1;

            }
            //System.out.println(current);
            User currUser = users.get(current);
            if (currUser.position == 100) {
                continue;
            }
            int rollValue = rollDice();
            board.advanced(currUser, rollValue);
            if (currUser.position == board.winingPositon) {
                winnerList.add(currUser);
                System.out.println(" We have a " + winnerList.size() + " winner " + currUser.name);
            }
            for (User user : users) {
                System.out.println(" UserName " + user.name + " current Position " + user.position);
            }
            ite += 1;
        }
        System.out.println(" Simulation finished Total Iteration " + ite);
    }
}

Main.java

import snakeLadder.Board;
import snakeLadder.SnakeLadder;
import snakeLadder.User;

import java.util.ArrayList;
import java.util.List;
/*
Snake Ladder
*/

public class Main {
    public static void main(String []args) {
        Board board = new Board();
        List<User> users = new ArrayList<>();
        User u1 = new User("User1", 0);
        User u2 = new User("User2", 0);
        users.add(u1);
        users.add(u2);
        SnakeLadder snakeL = new SnakeLadder(board, users);
        snakeL.addUser(new User("User3", 0));
        snakeL.board.addLadder(51,87);
        snakeL.board.addLadder(11,47);
        snakeL.board.addSnake(10,4);
        snakeL.board.addSnake(32,13);
        snakeL.board.addSnake(67,9);
        snakeL.board.addSnake(68,8);
        snakeL.board.addSnake(97,3);
        snakeL.simulate();
    }
}

Please share youre views/suggestion. Thanks for your time.

Comments (10)