Machine Coding | Flipkart | Snake and Ladder
Anonymous User
1427

**Can you please check below machine coding code. **
SDE1
Any Suggestions?

Dice.java

import java.util.Random;
public class Dice {
	private int number;
	public Dice(int number) {
		this.number = number;
	}
	public int getNumber() {
		return number;
	}
	public int RollDie() {
		Random r = new Random();
		return r.nextInt((number - 1) + 1) + 1;
	}
}

Entity.java

public  class Entity {

	private Position start;
	private Position end;
	public Entity(Position start, Position end) {
		this.start = start;
		this.end = end;
	}
	public Position getStart() {
		return start;
	}
	public Position getEnd() {
		return end;
	}
}

Snake.java

public class Snake extends Entity {
	public Snake(Position start, Position end) {
		super(start, end);
	}
}

Ladder.java


public class Ladder extends Entity {
	public Ladder(Position start, Position end) {
		super(start, end);
	}
}

Player.java

public class Player {
	private String name;

	public Player(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}

	public int RollDice(Dice dice) {
		return dice.RollDie();
	}
}

Position.java

public class Position {
	private int position;
	public Position(int position) {
		this.position = position;
	}
	public int getPosition() {
		return position;
	}
	public void setPosition(int position) {
		this.position = position;
	}
}

SnakeAndLadder.java

import java.io.*;
import java.util.*;
public class SnakeAndLadder {
	private ArrayList<Snake>snakes;
	private ArrayList<Ladder>ladders;
	private HashMap<Player, Position> playerPositions;
	Position startPosition = new Position(1);
	Position endPosition = new Position(100);

	public SnakeAndLadder(Position startPosition , Position endPosition) {
		snakes = new ArrayList<>();
		ladders = new ArrayList<>();
		playerPositions = new HashMap<>();
		this.startPosition = startPosition;
		this.endPosition = endPosition;
	}

	private Position hasLadder(int finalPosition) {
		for (int i = 0; i < ladders.size(); i++) {
			if (ladders.get(i).getStart().getPosition() == finalPosition) {
				return ladders.get(i).getEnd();
			}
		}
		return null;
	}
	private Position hasSnake(int finalPosition) {
		for (int i = 0; i < snakes.size(); i++) {
			if (snakes.get(i).getStart().getPosition() == finalPosition) {
				return snakes.get(i).getEnd();
			}
		}
		return null;
	}
	public boolean MovePlayer(Player player, int finalPosition) {
		if (finalPosition > endPosition.getPosition()) {
			return false;
		}
		while (true) {
			boolean has = false;
			Position snakeTail = hasSnake(finalPosition);
			if (snakeTail != null) {
				finalPosition = snakeTail.getPosition();
				has = true;
			}
			Position ladderTail = hasLadder(finalPosition);
			if (ladderTail != null) {
				finalPosition = ladderTail.getPosition();
				has = true;
			}
			if (has == false) {
				break;
			}
		}
		gamePlayerPosition(player, finalPosition);
		return true;
	}
	public Position getEndPosition() {
		return endPosition;
	}
	public ArrayList<Snake> getAllSnakes() {
		return snakes;
	}
	public ArrayList<Ladder> getAllLadders() {
		return ladders;
	}

	public HashMap<Player, Position> getPlayerPositions() {
		return playerPositions;
	}

	public void gamePlayerPosition(Player player, int value) {
		playerPositions.put(player, new Position(value));
	}

	public Position getPlayerPosition(Player player) {
		return playerPositions.get(player);
	}
}


SnakeAndLadderGame.java

import java.io.*;
import java.util.*;

public class SnakeAndLadderGame {
	private SnakeAndLadder snakeAndLadder;
	private Queue<Player>playerOrder;
	private ArrayList<Player>winningOrder;
	int size = 6;
	Dice dice;
	int playerSize = 2;
	public SnakeAndLadderGame(int size, int startPosition, int endPosition) {
		this.size = size;
		this.dice = new Dice(size);
		snakeAndLadder = new SnakeAndLadder(new Position(startPosition), new Position(endPosition));
		Scanner sc = new Scanner(System.in);
		this.winningOrder  = new ArrayList<>();
		this.playerOrder = new LinkedList<>();
		InitializeSnakes(sc);
		InitializeLadders(sc);
		initializePlayers(sc);
	}

	public void InitializeSnakes(Scanner sc) {
		int numberOfSnakes = sc.nextInt();
		for (int i = 0; i < numberOfSnakes; i++) {
			sc.nextLine();
			Position start =  new Position(sc.nextInt());
			Position end =  new Position(sc.nextInt());
			Snake newSnake = new Snake(start, end);
			snakeAndLadder.getAllSnakes().add(newSnake);
		}

	}
	public void InitializeLadders(Scanner sc) {
		int numberOfLadders = sc.nextInt();
		// System.out.println(numberOfLadders);
		for (int i = 0; i < numberOfLadders; i++) {
			sc.nextLine();
			Position start =  new Position(sc.nextInt());
			Position end =  new Position(sc.nextInt());
			Ladder newLadder = new Ladder(start, end);
			snakeAndLadder.getAllLadders().add(newLadder);
		}
	}

	public void initializePlayers(Scanner sc) {
		int numberOfPlayers = sc.nextInt();
		// System.out.println(numberOfPlayers);
		for (int i = 0; i < numberOfPlayers; i++) {
			String name = sc.next();
			Player newPlayer = new Player(name);
			playerOrder.add(newPlayer);
			snakeAndLadder.gamePlayerPosition(newPlayer, 0);
		}
	}
	public void PlayGame() {
		while (winningOrder.size() < playerSize - 1 ) {
			Player currentPlayer = playerOrder.peek();
			int value  = currentPlayer.RollDice(this.dice);
			Position currentPosition = snakeAndLadder.getPlayerPosition(currentPlayer);
			int finalPosition = value + currentPosition.getPosition();
			boolean valid = snakeAndLadder.MovePlayer(currentPlayer, finalPosition);
			if (valid) {
				playerOrder.poll();
				System.out.println(currentPlayer.getName() + " rolled a " + value + " and moved from " + currentPosition.getPosition() + " to " + snakeAndLadder.getPlayerPosition(currentPlayer).getPosition() );
				if (snakeAndLadder.getPlayerPosition(currentPlayer).getPosition() == snakeAndLadder.getEndPosition().getPosition()) {
					winningOrder.add(currentPlayer);
					System.out.println(currentPlayer.getName() + " wins the game");
				} else {
					playerOrder.add(currentPlayer);
				}
			} else {
				playerOrder.poll();
				playerOrder.add(currentPlayer);
			}
		}
	}
	public Player getCurrentPlayer() {
		return playerOrder.peek();
	}

	public static void main(String args[]) {
		try {
			System.setIn(new FileInputStream("input.txt"));
			System.setOut(new PrintStream(new FileOutputStream("output.txt")));
		} catch (Exception e) {
			System.err.println("Error");
		}
		SnakeAndLadderGame snakeAndLadderGame = new SnakeAndLadderGame(6, 1, 100);
		snakeAndLadderGame.PlayGame();

	}
}
Comments (3)