Skip to content
This repository was archived by the owner on May 18, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 85 additions & 0 deletions snake&ladder/models/Board.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package models;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class Board {

private int rows;
private int columns;
private int[][] board;
private final List<Ladder> ladders;
private final List<Snake> snakes;
HashMap<Integer, Ladder> ladderFootPositions;
HashMap<Integer, Snake> snakeHeadPosition;
List<Player> players;

public Board(int rows, int columns, int noOfladders, int noOfSnakes)
{
this.rows=rows;
this.columns=columns;
board = new int[rows][columns];
ladders = new ArrayList<>();
snakes = new ArrayList<>();
players = new ArrayList<>();
ladderFootPositions = new HashMap<>();
snakeHeadPosition = new HashMap<>();
}

public void addLadder(Ladder ladder)
{
ladders.add(ladder);
ladderFootPositions.put(ladder.getLadderFootPosition(), ladder);
}

public void addSnake(Snake snake)
{
snakes.add(snake);
snakeHeadPosition.put(snake.getSnakeHeadPosition(), snake);
}

public void addPlayer(Player player)
{
players.add(player);
}

public int getRows() {
return rows;
}

public int getColumns() {
return columns;
}

public List<Player> getPlayers() {
return players;
}

public void setPlayers(List<Player> players) {
this.players = players;
}

public int getNumberOfPlayers()
{
return this.players.size();
}

public HashMap<Integer, Ladder> getLadderFootPositions() {
return ladderFootPositions;
}

public void setLadderFootPositions(HashMap<Integer, Ladder> ladderFootPositions) {
this.ladderFootPositions = ladderFootPositions;
}

public HashMap<Integer, Snake> getSnakeHeadPosition() {
return snakeHeadPosition;
}

public void setSnakeHeadPosition(HashMap<Integer, Snake> snakeHeadPosition) {
this.snakeHeadPosition = snakeHeadPosition;
}


}
28 changes: 28 additions & 0 deletions snake&ladder/models/Dice.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package models;

public class Dice {

int firstNumber=1;
int lastNumber;

public Dice(int lastNumber)
{
this.lastNumber = lastNumber;
}

public int getLastNumber() {
return lastNumber;
}

public void setLastNumber(int lastNumber) {
this.lastNumber = lastNumber;
}

public int getFirstNumber() {
return firstNumber;
}




}
53 changes: 53 additions & 0 deletions snake&ladder/models/Ladder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package models;

public class Ladder {

int id;
int ladderFootPosition;
int ladderTopPosition;
Location ladderFoot;
Location ladderTop;

public Ladder(int startPositionNumber, int endPositionNumber,
int boardRows, int boardColumns)
{
this.ladderFootPosition = startPositionNumber;
this.ladderTopPosition = endPositionNumber;
ladderFoot = new Location(startPositionNumber, boardRows, boardColumns);
ladderTop = new Location(endPositionNumber, boardRows, boardColumns);
}

public Location getLadderFoot() {
return ladderFoot;
}

public void setLadderFoot(Location ladderFoot) {
this.ladderFoot = ladderFoot;
}

public Location getLadderHead() {
return ladderTop;
}

public void setLadderHead(Location ladderHead) {
this.ladderTop = ladderHead;
}

public int getLadderFootPosition() {
return ladderFootPosition;
}

public void setLadderFootPosition(int ladderFootPosition) {
this.ladderFootPosition = ladderFootPosition;
}

public int getLadderTopPosition() {
return ladderTopPosition;
}

public void setLadderTopPosition(int ladderTopPosition) {
this.ladderTopPosition = ladderTopPosition;
}


}
30 changes: 30 additions & 0 deletions snake&ladder/models/Location.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package models;

public class Location {

int row;
int column;

Location(int positionNumber, int boardRows, int boardColumns)
{
this.row = (positionNumber-1)/boardColumns;
this.column = (positionNumber - 1)%boardColumns;
}

public int getRow() {
return row;
}

public void setRow(int row) {
this.row = row;
}

public int getColumn() {
return column;
}

public void setColumn(int column) {
this.column = column;
}

}
31 changes: 31 additions & 0 deletions snake&ladder/models/Player.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package models;

public class Player {
String name;
Location location;
int positionNumber;

public Player(String name, int positionNumber, int boardRows, int boardColumns)
{
this.name = name;
this.positionNumber = positionNumber;
this.location = new Location(positionNumber, boardRows, boardColumns);
}

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

public int getPositionNumber() {
return positionNumber;
}

public void setPositionNumber(int positionNumber) {
this.positionNumber = positionNumber;
}


}
34 changes: 34 additions & 0 deletions snake&ladder/models/Snake.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package models;

public class Snake {

int id;
int snakeHeadPosition;
int snakeTailPosition;
Location tail;
Location head;

public Snake(int headPosition, int tailPosition, int boardRows, int boardColumns)
{
this.head = new Location(headPosition, boardRows, boardColumns);
this.tail = new Location(tailPosition, boardRows, boardColumns);
}

public int getSnakeHeadPosition() {
return snakeHeadPosition;
}

public void setSnakeHeadPosition(int snakeHeadPosition) {
this.snakeHeadPosition = snakeHeadPosition;
}

public int getSnakeTailPosition() {
return snakeTailPosition;
}

public void setSnakeTailPosition(int snakeTailPosition) {
this.snakeTailPosition = snakeTailPosition;
}


}
2 changes: 2 additions & 0 deletions snake&ladder/module-info.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
module design {
}
16 changes: 16 additions & 0 deletions snake&ladder/services/DiceRoll.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package services;

import models.Dice;

public class DiceRoll {

Dice dice;
DiceRoll(int diceSize)
{
this.dice = new Dice(diceSize);
}
int returnMoves()
{
return (int) ((Math.random() * ((this.dice.getLastNumber() - this.dice.getFirstNumber()) + 1)) + this.dice.getFirstNumber());
}
}
51 changes: 51 additions & 0 deletions snake&ladder/services/Driver.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package services;

import java.util.Scanner;

public class Driver {

public static void main(String[] args) {
Scanner s=new Scanner(System.in);
/*
* First Take all inputs
*/
int noOfLadders=0, noOfSnakes = 0, noOfPlayers=0;
int ladders[][];
int snakes[][];
String playerNames[];

noOfLadders = s.nextInt();
ladders = new int[noOfLadders][noOfLadders>0?2:0];
for(int idx=0;idx<noOfLadders;idx++)
{
ladders[idx][0]=s.nextInt();
ladders[idx][1]=s.nextInt();
}

noOfSnakes = s.nextInt();
snakes = new int[noOfSnakes][noOfSnakes>0?2:0];
for(int idx=0;idx<noOfSnakes;idx++)
{
snakes[idx][0]=s.nextInt();
snakes[idx][1]=s.nextInt();
}

noOfPlayers = s.nextInt();
playerNames = new String[noOfPlayers];
for(int idx=0;idx<noOfPlayers;idx++) {
playerNames[idx]=s.next();
}

/*
* Setup the board game with the players
*/

InitialiseBoard setupGame = new InitialiseBoard(10, 10, ladders, snakes);
setupGame.setPlayers(playerNames);

GameController controller = new GameController(setupGame.board);

controller.startGame();

}
}
57 changes: 57 additions & 0 deletions snake&ladder/services/GameController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package services;

import models.Board;
import models.Player;

public class GameController {

Board board;
boolean winnerFound;
Player winner;

public GameController(Board board) {
this.board = board;
this.winnerFound=false;
}

void startGame()
{
DiceRoll diceRoll = new DiceRoll(6);
MovePlayer movePlayer = new MovePlayer();

while(!winnerFound)
{
for(int i=0;i<board.getNumberOfPlayers();i++)
{
int moves = diceRoll.returnMoves();
Player player = board.getPlayers().get(i);
System.out.println(player.getName()+" rolled an "+moves);

int position = movePlayer.movePlayer(player, moves, board);

checksPositionAndUpdatesGameStatus(position, player);
if(winnerFound)
{
printWinner();
break;
}
}
}
}

private void printWinner() {

System.out.println(this.winner.getName()+" has Won!");
}

private void checksPositionAndUpdatesGameStatus(int position, Player player) {
if(player.getPositionNumber()==board.getColumns()*board.getRows())
{
this.winnerFound = true;
this.winner = player;
}
}



}
Loading