Snake and Ladder - Low Level Design
Requirements:
Entities:
Board
Game
Player
Dice
Snake
Ladder
User-defined types:
MoverType - SNAKE, LADDER, JETPACK
Domain classes:
abstract class Mover {
int startPosition;
int endPosition;
MoverType moverType;
int move(int playerPosition); // Returns the destination player position
MoverType getType();
int getStartPosition();
int getEndPosition();
}
class Snake extends Mover {
int move(int playerPosition) {}
MoverType getType() {}
}
class Ladder extends Mover {
int move(int playerPosition) {}
MoverType getType() {}
}
class Jetpack extends Mover {
int move(int playerPosition) {}
MoverType getType() {}
}
class Board {
int[] squares;
Map<Integer, Mover> moverPositions;
Board(int n) {} // Create pre-defined positions for Movers
Board(int n, Map<Integer, Mover> moverPositions) {} // Create all the movers
Map<Integer, Mover> getMoverPositions() {}
boolean isMoverSquare(int playerPosition) {}
Mover getMover(int playerPosition) {}
boolean isWinningPosition(int playerPosition) {}
}
class Player {
int playerNumber;
}
class Dice {
int start;
int end;
int getFaceValue() {}
}
class Game {
Board board;
Queue<Player> players;
Map<Player, Integer> playerPositionMap;
Dice dice;
void initGame(int n, Queue<Player> players, Map<Integer, Mover> moverPositions) {}
void viewCurrentGameState() {}
void playGame() {}
}