- Builder
- Factory
- Singleton
- Observer
- Template
`-- src
`-- ladder
`-- snake
|-- Audience.java
|-- Main.java
|-- User.java
|-- Utils.java
|-- game - generic design for a game
| |-- ComputerStrategy.java
| |-- Game.java
| |-- GameController.java
| |-- GameState.java
| |-- GameStats.java
| |-- Move.java
| |-- events
| | |-- GameEvent.java
| | |-- GameEventData.java
| | |-- GameEventHandler.java
| | `-- MoveMade.java
| `-- players
| |-- ComputerPlayer.java
| |-- HumanPlayer.java
| `-- Player.java
`-- games - implementations of various games
|-- GameFactory.java
|-- RoundRobinTurnTracker.java
|-- TurnTracker.java
|-- botstrategies
| `-- RandomDiceRollSnakeLadderStrategy.java
|-- exceptions
| |-- GameException.java
| |-- InvalidGamePlayerException.java
| |-- InvalidGameStateForActionException.java
| |-- InvalidMoveException.java
| `-- validation
| |-- InvalidBoardSizeException.java
| `-- ValidationException.java
`-- snakeladder
|-- SnakeLadderCellLocation.java
|-- SnakeLadderGame.java
|-- SnakeLadderGameStats.java
|-- SnakeLadderMove.java
|-- elements
| |-- Ladder.java
| |-- Snake.java
| `-- SnakeLadderGameElement.java
`-- factories
|-- LadderFactory.java
`-- SnakeFactory.java