P
P
ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
/*
*/
while(!inputCorrect) {
int number = 0;
try {
number = scanner.nextInt();
} catch(Exception e) {
//ignore
inputCorrect = true;
playerList.add(new Player(colorList[i]));
} else {
/*
*/
+ "type in \"r\".");
while(!initComplete) {
try {
input = scanner.next();
} catch(Exception e) {
// ignore
if(input.equals("r")) {
currentPlayer.rollDice();
} else {
continue;
if(++playerCounter==playerList.size())
initComplete = true;
}
/*
*/
while(!onlyOneHighest) {
int rollerCounter = 0;
while(!rollsComplete) {
Player currentPlayer = highestRollers.get(rollerCounter);
try {
input = scanner.next();
} catch(Exception e) {
// ignore
if(input.equals("r")) {
currentPlayer.rollDice();
} else {
continue;
if(++rollerCounter==highestRollers.size())
rollsComplete = true;
highestRollers = determineHighestRoller(highestRollers);
onlyOneHighest = highestRollers.size()==1;
currentPlayer = highestRollers.get(0);
ludoBoard.initializePieces(playerList.get(i));
runGame();
/*
*/
ludoBoard.printBoard();
while(!rollComplete) {
try {
input = scanner.next();
} catch(Exception e) {
// ignore
if(input.equals("r")) {
currentPlayer.rollDice();
rollComplete = true;
} else {
continue;
}
}
if(!movesArePossible) {
setNextPlayer();
continue;
try {
input = scanner.next();
} catch(Exception e) {
// ignore
if(input.equals("r")) {
currentPlayer.rollDice();
rollComplete = true;
} else {
continue;
setNextPlayer();
continue;
if(command.equals("t")) {
if(!currentPlayer.hasRolledSix()) {
continue;
int pieceNumber = 0;
try {
pieceNumber = scanner.nextInt() - 1;
} catch(Exception e) {
continue;
if(pieceNumber<0 || pieceNumber>3) {
continue;
}
commandSuccessful = ludoBoard.takePieceOut(piece);
} else if(command.equals("m")) {
int pieceNumber = 0;
try {
pieceNumber = scanner.nextInt() - 1;
} catch(Exception e) {
continue;
if(pieceNumber<0 || pieceNumber>3) {
continue;
commandSuccessful = ludoBoard.movePiece(piece,
squareAmount);
} else {
System.out.println("Invalid command. Try again.");
continue;
if(commandSuccessful) {
if(currentPlayer.hasWon()) {
System.out.println("Congratulations! " +
currentPlayer + " has won the game!");
break game;
if(currentPlayer.hasRolledSix()) {
continue game;
setNextPlayer();
turnComplete = true;
scanner.close();
}
/*
* high-rollers.
*/
int playerCounter = 1;
while(!complete) {
if(currentHighest>nextPlayersRoll) {
} else if(currentHighest<nextPlayersRoll) {
highRollers.clear();
} else if(currentHighest==nextPlayersRoll) {
// high rollers
if(!highRollers.contains(highestRoller))
highRollers.add(highestRoller);
if(!highRollers.contains(nextPlayer))
highRollers.add(nextPlayer);
if(playerCounter==playersWhoRolled.size())
complete = true;
if(highRollers.size()==0)
highRollers.add(highestRoller);
return highRollers;
/*
*
* Sets the next player as current
*/
if(nextIndex==playerList.size())
nextIndex = 0;
currentPlayer = playerList.get(nextIndex);
class LudoBoard {
int[][] greenHomePos = { { 2, 2 }, { 2, 3 }, { 3, 2 }, { 3, 3 } };
int[][] yellowHomePos = { { 2, 11 }, { 2, 12 }, { 3, 11 }, { 3, 12 } };
int[][] greenPath = { { 6, 1 }, { 6, 2 }, { 6, 3 }, { 6, 4 }, { 6, 5 },
{ 5, 6 }, { 4, 6 }, { 3, 6 }, { 2, 6 }, { 1, 6 }, { 0, 6 },
{ 0, 7 }, { 0, 8 }, { 2, 8 }, { 3, 8 }, { 4, 8 }, { 5, 8 },
{ 6, 9 }, { 6, 10 }, { 6, 11 }, { 6, 12 }, { 6, 13 }, { 6, 14 },
{ 7, 14 }, { 8, 14 }, { 8, 12 }, { 8, 11 }, { 8, 10 }, { 8, 9 },
{ 8, 5 }, { 8, 4 }, { 8, 3 }, { 8, 2 }, { 8, 1 }, { 8, 0 },
{ 7, 0 }, { 7, 1 }, { 7, 2 }, { 7, 3 }, { 7, 4 }, { 7, 5 }, { 7, 6 } };
int[][] yellowPath = { { 1, 8 }, { 2, 8 }, { 3, 8 }, { 4, 8 }, { 5, 8 },
{ 6, 9 }, { 6, 10 }, { 6, 11 }, { 6, 12 }, { 6, 13 }, { 6, 14 },
{ 7, 14 }, { 8, 14 }, { 8, 12 }, { 8, 11 }, { 8, 10 }, { 8, 9 },
{ 8, 5 }, { 8, 4 }, { 8, 3 }, { 8, 2 }, { 8, 1 }, { 8, 0 },
{ 7, 0 }, { 6, 0 }, { 6, 2 }, { 6, 3 }, { 6, 4 }, { 6, 5 },
{ 5, 6 }, { 4, 6 }, { 3, 6 }, { 2, 6 }, { 1, 6 }, { 0, 6 },
{ 0, 7 }, { 1, 7 }, { 2, 7 }, { 3, 7 }, { 4, 7 }, { 5, 7 }, { 6, 7 } };
{ 8, 5 }, { 8, 4 }, { 8, 3 }, { 8, 2 }, { 8, 1 }, { 8, 0 },
{ 7, 0 }, { 6, 0 }, { 6, 2 }, { 6, 3 }, { 6, 4 }, { 6, 5 },
{ 5, 6 }, { 4, 6 }, { 3, 6 }, { 2, 6 }, { 1, 6 }, { 0, 6 },
{ 0, 7 }, { 0, 8 }, { 2, 8 }, { 3, 8 }, { 4, 8 }, { 5, 8 },
{ 6, 9 }, { 6, 10 }, { 6, 11 }, { 6, 12 }, { 6, 13 }, { 6, 14 },
{ 7, 14 }, { 8, 14 }, { 8, 12 }, { 8, 11 }, { 8, 10 }, { 8, 9 },
{ 9, 8 }, { 10, 8 }, { 11, 8 }, { 12, 8 }, { 13, 8 }, { 14, 8 },
{ 14, 7}, { 13, 7}, { 12, 7}, { 11, 7}, { 10, 7}, { 9, 7}, { 8, 7} };
int[][] bluePath = { { 8, 13 }, { 8, 12 }, { 8, 11 }, { 8, 10 }, { 8, 9 },
{ 8, 5 }, { 8, 4 }, { 8, 3 }, { 8, 2 }, { 8, 1 }, { 8, 0 },
{ 7, 0 }, { 6, 0 }, { 6, 2 }, { 6, 3 }, { 6, 4 }, { 6, 5 },
{ 5, 6 }, { 4, 6 }, { 3, 6 }, { 2, 6 }, { 1, 6 }, { 0, 6 },
{ 0, 7 }, { 0, 8 }, { 2, 8 }, { 3, 8 }, { 4, 8 }, { 5, 8 },
{ 6, 9 }, { 6, 10 }, { 6, 11 }, { 6, 12 }, { 6, 13 }, { 6, 14 },
{ 7, 14 }, { 7, 13 }, { 7, 12 }, { 7, 11 }, { 7, 10 }, { 7, 9 }, { 7, 8 } };
LudoBoard() {
/*
*/
positionMap.put("Green", greenHomePos);
positionMap.put("Yellow", yellowHomePos);
positionMap.put("Red", redHomePos);
positionMap.put("Blue", blueHomePos);
/*
*/
pathMap.put("Green", greenPath);
pathMap.put("Yellow", yellowPath);
pathMap.put("Red", redPath);
pathMap.put("Blue", bluePath);
/*
* Initialize pieceRecord
*/
pieceRecord[i][j]
border[0][0] = "------";
border[0][1] = "------";
border[0][2] = "------";
border[0][3] = "------";
border[0][4] = "------";
border[0][5] = "------";
border[0][6] = "------";
border[0][7] = "------";
border[0][8] = "------";
border[0][9] = "------";
border[0][10] = "------";
border[0][11] = "------";
border[0][12] = "------";
border[0][13] = "------";
border[0][14] = "------";
border[1][1] = "------";
border[1][2] = "------";
border[1][3] = "------";
border[1][4] = "------";
border[1][6] = "------";
border[1][7] = "------";
border[1][8] = "------";
border[1][10] = "------";
border[1][11] = "------";
border[1][12] = "------";
border[1][13] = "------";
border[2][2] = "------";
border[2][3] = "------";
border[2][6] = "------";
border[2][7] = "------";
border[2][8] = "------";
border[2][11] = "------";
border[2][12] = "------";
border[3][2] = "------";
border[3][3] = "------";
border[3][6] = "------";
border[3][7] = "------";
border[3][8] = "------";
border[3][11] = "------";
border[3][12] = "------";
border[4][2] = "------";
border[4][3] = "------";
border[4][6] = "------";
border[4][7] = "------";
border[4][8] = "------";
border[4][9] = " ";
border[4][11] = "------";
border[4][12] = "------";
border[5][1] = "------";
border[5][2] = "------";
border[5][3] = "------";
border[5][4] = "------";
border[5][6] = "------";
border[5][7] = "------";
border[5][8] = "------";
border[5][10] = "------";
border[5][11] = "------";
border[5][12] = "------";
border[5][13] = "------";
border[6][0] = "------";
border[6][1] = "------";
border[6][2] = "------";
border[6][3] = "------";
border[6][4] = "------";
border[6][5] = "------";
border[6][6] = "------";
border[6][7] = "------";
border[6][8] = "------";
border[6][9] = "------";
border[6][10] = "------";
border[6][11] = "------";
border[6][12] = "------";
border[6][13] = "------";
border[6][14] = "------";
border[7][0] = "------";
border[7][1] = "------";
border[7][2] = "------";
border[7][3] = "------";
border[7][4] = "------";
border[7][5] = "------";
border[7][9] = "------";
border[7][10] = "------";
border[7][11] = "------";
border[7][12] = "------";
border[7][13] = "------";
border[7][14] = "------";
border[8][0] = "------";
border[8][1] = "------";
border[8][2] = "------";
border[8][3] = "------";
border[8][4] = "------";
border[8][5] = "------";
border[8][9] = "------";
border[8][10] = "------";
border[8][11] = "------";
border[8][12] = "------";
border[8][13] = "------";
border[8][14] = "------";
border[9][0] = "------";
border[9][1] = "------";
border[9][2] = "------";
border[9][3] = "------";
border[9][4] = "------";
border[9][5] = "------";
border[9][6] = "------";
border[9][7] = "------";
border[9][8] = "------";
border[9][9] = "------";
border[9][10] = "------";
border[9][11] = "------";
border[9][12] = "------";
border[9][13] = "------";
border[9][14] = "------";
border[10][1] = "------";
border[10][2] = "------";
border[10][3] = "------";
border[10][4] = "------";
border[10][6] = "------";
border[10][7] = "------";
border[10][8] = "------";
border[10][10] = "------";
border[10][11] = "------";
border[10][12] = "------";
border[10][13] = "------";
border[11][2] = "------";
border[11][3] = "------";
border[11][6] = "------";
border[11][7] = "------";
border[11][8] = "------";
border[11][11] = "------";
border[11][12] = "------";
border[12][2] = "------";
border[12][3] = "------";
border[12][6] = "------";
border[12][7] = "------";
border[12][8] = "------";
border[12][11] = "------";
border[12][12] = "------";
border[12][13] = " ";
border[13][2] = "------";
border[13][3] = "------";
border[13][6] = "------";
border[13][7] = "------";
border[13][8] = "------";
border[13][11] = "------";
border[13][12] = "------";
border[14][1] = "------";
border[14][2] = "------";
border[14][3] = "------";
border[14][4] = "------";
border[14][6] = "------";
border[14][7] = "------";
border[14][8] = "------";
border[14][10] = "------";
border[14][11] = "------";
border[14][12] = "------";
border[14][13] = "------";
border[14][14] = " ";
border[15][0] = "------";
border[15][1] = "------";
border[15][2] = "------";
border[15][3] = "------";
border[15][4] = "------";
border[15][5] = "------";
border[15][6] = "------";
border[15][7] = "------";
border[15][8] = "------";
border[15][9] = "------";
border[15][10] = "------";
border[15][11] = "------";
border[15][12] = "------";
border[15][13] = "------";
border[15][14] = "------";
void printBoard() {
System.out.print(border[i][j]);
System.out.println();
if(i==15)
break;
System.out.println();
/*
*/
if(piece==null)
break;
if(contents.length()==0) {
return renderedBlock;
/*
*/
/*
*/
if(piece.isTakenOut())
return false;
if(successfullyMoved) {
piece.setTakenOut(true);
return true;
return false;
}
/*
*/
return false;
int currentBlock = 0;
// will remain 0
currentBlock = i;
break;
}
int endPosition = currentBlock + howManySquares;
if(endPosition>=path.length)
consumeEnemy(path[endPosition][0], path[endPosition][1]);
if(!piece.isTakenOut()) {
piece.setTakenOut(true);
} else
if(endPosition+1==path.length)
piece.setCompleted(true);
return true;
/*
*/
boolean movesArePossible(Player player, int numberRolled) {
if(numberRolled==6) {
if(canTakePieceOut(piece))
return true;
if(canMovePiece(piece, numberRolled))
return true;
return false;
if(piece.isTakenOut())
return false;
boolean canMove = canMovePiece(piece, 6);
if(canMove)
return true;
return false;
return false;
int currentBlock = 0;
// will remain 0
currentBlock = i;
break;
}
}
if(endPosition>=path.length)
return true;
/*
*/
if(pieceRecord[homeY][homeX][0]==null) {
piece.setTakenOut(false);
break;
/*
*/
return false;
else if(currentPiece!=null)
pieceList.add(currentPiece);
else break;
if(pieceList.size()==1)
return true;
return false;
else if(currentPiece!=null)
pieceList.add(currentPiece);
else break;
}
if(pieceList.size()>1)
return true;
/*
*/
if(notInitialized) {
pieceRecord[yCoord][xCoord][0] = piece;
piece.setY(yCoord);
piece.setX(xCoord);
} else {
if(pieceRecord[currentY][currentX][i]==piece) {
pieceRecord[currentY][currentX][i] = null;
rearrangeBlock(currentY, currentX);
break;
pieceRecord[yCoord][xCoord][3] = piece;
piece.setY(yCoord);
piece.setX(xCoord);
rearrangeBlock(yCoord, xCoord);
/*
* as in 1 2 3 4, not 2 3 1 4
*/
private void rearrangeBlock(int yCoord, int xCoord) {
if(piece!=null) {
pieceList.add(piece);
pieceRecord[yCoord][xCoord][i] = null;
if(pieceList.size()!=0) {
int lowestPieceNumber = 5;
int lowestPieceIndex = 5;
lowestPieceNumber = nextPieceNumber;
lowestPieceIndex = j;
pieceRecord[yCoord][xCoord][i] = pieceList.get(lowestPieceIndex);
class Player {
Player(String color) {
this.color = color;
piece = new Piece[4];
void rollDice() {
if(numberRolled==6)
hasRolledSix = true;
return piece[pieceNumber];
String getColor() {
return color;
int getNumberRolled() {
return numberRolled;
}
boolean hasRolledSix() {
return hasRolledSix;
@Override
boolean hasWon() {
if(!piece[i].isCompleted())
return false;
return true;
class Piece {
this.pieceNumber = pieceNumber+1;
this.color = color;
String getColor() {
return color;
int getPieceNumber() {
return pieceNumber;
int getX() {
return xCoord;
int getY() {
return yCoord;
void setX(int x) {
xCoord = x;
void setY(int y) {
yCoord = y;
}
takenOut = mode;
boolean isTakenOut() {
return takenOut;
completed = mode;
boolean isCompleted() {
return completed;
class Dice {
int roll() {