@startuml package "GameSystem" {
enum ProgressType { INVENTION ROADCONSTRUCTION MONOPOLY } enum Color { RED ORANGE BLUE WHITE } enum InfrastructureType { CITY COLONY ROAD } enum Resources { WOOD CLAY WOOL WHEAT MINERALS } enum LandType { FOREST HILL MEADOW FIELD MOUNTAIN DESERT SEA }
class Infrastructure { - type : InfrastructureType - color : Color + setToCity() }
class Build{ - board : GameBoard + updateGameBoard() }
package "GameBoard" { class GameBoard { + determinateResources(Integer) : Map<Color,Map<Resources,Integer>> }
class LandTile { - identifier : Integer - num : Integer - resource : Resources - type : LandType + getResources() : Resources } class Port { - nbResourcesForExchanges : Integer + isSpecialised() : boolean + getSpecialisation() : Map<Resources,Integer> } class CommonPort class SpecialPort { specialisation : Resources }
Port <|-- CommonPort Port <|-- SpecialPort Port -- "[2..3] \n - position" LandTile GameBoard -- "[25] \n - tiles" LandTile GameBoard -up- "- infrastructuresGameBoard[]" Build LandTile "[2..3] \n - position" -up- Infrastructure }
class Dice { - value : Integer + rollDice() : Integer }
package "Card" { class DevelopmentCard { - name : String + playCard(Player) } class ProgressCard { - typeOfProgress : ProgressType } class KnightCard class VictoryPointCard
DevelopmentCard <|-right- KnightCard DevelopmentCard <|-up- ProgressCard DevelopmentCard <|-up- VictoryPointCard }
class Trade{ + selectResources(Map<Resources, Integer>) : Map<Resources, Integer> + sendResourcesToPlayer(Map<Resources, Integer>) + sendResourcesToBank(Map<Resources, Integer>) } class Game { - players : Player[] - pointsToWin : Integer + start() + createGameBoard() + attributeColors() + determinatePlayersOrder() + beginningPlacement() + distributeResources(Map<Resources,Integer>) + determineWinner() : Player + end() } Game -- "- gameBoard" GameBoard Game -- "[25] \n - listDevCards" DevelopmentCard Game -- "- dice" Dice : "\t\t"
class Player { - name : String - color : Color - /score : Integer - nbKnights : Integer - hasLongestRoad : Boolean - hasGreatestArmy : Boolean + playTurn(GameBoard) + addToScore(Integer) + addToNbKnights(Integer) + constructRoad() + constructColony() + constructCity() + startExchangeWithPlayer() + startExchangeWithBank() + drawDevelopmentCard() } Player -left- "- listVictoryPointCards[]" DevelopmentCard : "\t\t\t\t\t\t\t\t\t" Player -- "[0..9] \n - listPorts" Port Player --> Trade Player -- Build Trade --> Player Trade -- Game Build -- Infrastructure
class Map <T,V>{ put(K,V) get(K) : V } note bottom of Map : It's a dictionnary. K is the key and V the values. \n We don't associate the methods of Game, Trade, \n GameBoard and Port which need it because of clarity. \n But it will be important.
Player -left- "- resources" Map : "<<bind>> K = Resources, V = Integer" } @enduml