Model.
Board
package model;
import [Link];
import [Link];
public class Board {
private final int boardSize = 100;
private final List<Snake> snakes;
private final List<Ladder> ladders;
public Board(){
snakes = new ArrayList<>();
ladders = new ArrayList<>();
initializeSnakeAndLadder();
}
private void initializeSnakeAndLadder(){
// Initialize snakes
[Link](new Snake(16, 6));
[Link](new Snake(48, 26));
[Link](new Snake(64, 60));
[Link](new Snake(93, 73));
// Initialize ladders
[Link](new Ladder(1, 38));
[Link](new Ladder(4, 14));
[Link](new Ladder(9, 31));
[Link](new Ladder(21, 42));
[Link](new Ladder(28, 84));
[Link](new Ladder(51, 67));
[Link](new Ladder(80, 99));
}
public int getBoardSize() {
return boardSize;
}
public List<Snake> getSnakes(){
return snakes;
}
public List<Ladder> getLadders(){
return ladders;
}
DICE
package model;
public class Dice {
final static int MIN_LIMIT = 1;
final static int MAX_LIMIT = 6;
public static int getMinLimit() {
return MIN_LIMIT;
}
public static int getMaxLimit() {
return MAX_LIMIT;
}
}
LADDER
package model;
public class Ladder {
private final int start;
private final int end;
public Ladder(int start, int end){
[Link] = start;
[Link] = end;
}
public int getStart(){
return start;
}
public int getEnd(){
return end;
}
}
PLAYER
package model;
public class Player {
private final String name;
private int position;
public Player(String name){
[Link] = name;
[Link] = 0;
}
public String getName(){
return name;
}
public int getPosition(){
return position;
}
public void setPosition(int position){
[Link] = position;
}
}
SNAKE
package model;
public class Snake {
private final int start;
private final int end;
public Snake(int start, int end){
[Link] = start;
[Link]= end;
}
public int getStart(){
return start;
}
public int getEnd(){
return end;
}
}
SERVICES:
BOARDSERVICE
package service;
import [Link];
import [Link];
import [Link];
public class BoardService {
private final Board board;
public BoardService(Board board) {
[Link] = board;
}
public int getNewPositionAfterSnakeOrLadder(int position) {
for (Snake snake : [Link]()) {
if ([Link]() == position) {
return [Link]();
}
}
for (Ladder ladder : [Link]()) {
if ([Link]() == position) {
return [Link]();
}
}
return position;
}
}
DICESERVICE
package service;
import [Link];
public class DiceService {
public int roll() {
int minLimit = [Link]();
int maxLimit = [Link]();
return (int) ([Link]() * (maxLimit - minLimit + 1) +
minLimit);
}
}
IGAME
package service;
public interface IGame {
void play();
}
IGAMEMANAGER
package service;
import [Link];
public interface IGameManager {
void startNewGame(List<String> players);
}
GAMEMANAGER
package service;
import [Link];
public class GameManager implements IGameManager{
private static GameManager instance;
private GameManager() {
}
public static synchronized GameManager getInstance() {
if (instance == null) {
instance = new GameManager();
}
return instance;
}
@Override
public void startNewGame(List<String> players) {
IGame game = new SnakeAndLadderGame(players);
[Link]();
}
}
SNAKE&LADDER GAME
package service;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class SnakeAndLadderGame implements IGame {
private final Board board;
private final List<Player> players;
private final Dice dice;
private final DiceService diceService;
private final BoardService boardService;
private int currentPlayerIndex;
public SnakeAndLadderGame(List<String> playerNames) {
board = new Board();
dice = new Dice();
diceService = new DiceService();
boardService = new BoardService(board);
players = new ArrayList<>();
for (String playerName : playerNames) {
[Link](new Player(playerName));
}
currentPlayerIndex = 0;
}
@Override
public void play() {
while (!isGameOver()) {
Player currentPlayer = [Link](currentPlayerIndex);
int diceRoll = [Link]();
int newPosition = [Link]() + diceRoll;
if (newPosition <= [Link]()) {
[Link]([Link](new
Position));
[Link]([Link]() + " rolled a " +
diceRoll +
" and moved to position " +
[Link]());
}
if ([Link]() == [Link]()) {
[Link]([Link]() + " wins!");
break;
}
currentPlayerIndex = (currentPlayerIndex + 1) % [Link]();
}
}
private boolean isGameOver() {
for (Player player : players) {
if ([Link]() == [Link]()) {
return true;
}
}
return false;
}
}
SNAKEAND LADDERDEMO
package service;
import [Link];
import [Link];
public class SnakeAndLadderDemo {
public static void run() {
IGameManager gameManager = [Link]();
// Start game 1
List<String> players1 = [Link]("Player 1", "Player 2",
"Player 3");
[Link](players1);
// Start game 2
List<String> players2 = [Link]("Player 4", "Player 5");
[Link](players2);
}
}
main:
import [Link];
public class Main {
public static void main(String[] args) {
[Link]();
}
}