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.