**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();
}
}