@startuml
class fr.unice.polytech.citadelle.game_interactor.PhaseManager {
+ {static} String MID_GAME_PHASE
+ {static} String END_GAME_PHASE
+ {static} String LAST_TURN_PHASE
- Player player
- Board board
+ <<Create>> PhaseManager(Player,Board)
+ String analyseGame()
~ boolean isLastTurnPhase()
~ boolean isEndGamePhase()
}
class fr.unice.polytech.citadelle.game_interactor.game_strategy.Strategy {
~ Player player
~ Board board
~ Predict predict
~ int numberOfCharacter
+ <<Create>> Strategy(int,Board,Player)
+ <<Create>> Strategy(int,Board,Player,Predict)
+ int randomInt(int)
+ Character chooseCharacterForThiefRandom(LinkedHashMap<Character,Optional<Behaviour>>)
+ Character chooseCharacterForAssassinRandom(LinkedHashMap<Character,Optional<Behaviour>>)
+ Character chooseCharacterForMagicianRandom(LinkedHashMap<Character,Optional<Behaviour>>)
+ Player choosePlayerForWarlordRandom()
+ Player choosePlayerForWarlordAdvanced()
+ Character chooseCharacterForAssassinAdvanced()
+ Character chooseCharacterForThiefAdvanced()
+ Character chooseCharacterForMagicianAdvanced()
- Player findThePlayerWithMostCards()
+ Player findThePlayerWithMostGolds()
+ Player findThePlayerWithClosestScoreAssassin()
+ int warlordInterestScore(District,Player)
+ District chooseDistrictToDestroy(Player)
+ ArrayList<District> chooseMagicianActionForRandom()
+ ArrayList<District> chooseMagicianActionAdvanced()
- ArrayList<District> CardToBeSwapped()
- boolean isThereAPlayerWithTwoTimesHis()
+ int cityDistrictScore(Player)
+ int playerPredictScore(Player)
+ boolean hasFiveDistrictColors(Player)
+ int countNumberOfDistrictWithColor(Player,String)
+ String has3districtWithSameColour(Player)
+ Character getAPrediction(Player,ArrayList<Character>)
+ Predict getPredict()
+ Optional<Character> getCharacterOfPlayer(Player)
}
class fr.unice.polytech.citadelle.game_interactor.game_behaviour.Investor {
+ <<Create>> Investor(Player,Board)
+ void executeSpell(ArrayList<SpellDistrict>,DeckDistrict)
+ void normalBehaviour()
+ void endGameBehaviour()
+ void lastTurnBehaviour()
+ District chooseBetweenTwoCards(District,District)
}
class fr.unice.polytech.citadelle.game_interactor.game_behaviour.Behaviour {
# Player player
# int numberOfCharacter
~ Strategy strategy
~ CityManagement cityMan
~ Executor executor
~ PhaseManager phaseManager
~ Board board
# {static} int ZERO_CARD
# {static} int ONE_CARD
# {static} int TWO_CARD
+ <<Create>> Behaviour(Player,Board)
+ District selectTheHigherDistrict(ArrayList<District>)
+ District selectTheLowerDistrict(ArrayList<District>)
+ Character play(LinkedHashMap<Character,Optional<Behaviour>>)
- void executeSpellOfCharacter(Behaviour,LinkedHashMap<Character,Optional<Behaviour>>)
- void executeSpellOfPurpleDistricts(Player)
+ void buildArchitect()
+ void normalBehaviour()
+ void endGameBehaviour()
+ void lastTurnBehaviour()
+ Character selectCharacterForSpell(LinkedHashMap<Character,Optional<Behaviour>>)
+ Player selectPlayerForWarlord()
- Character chooseCharacterForMagician(LinkedHashMap<Character,Optional<Behaviour>>)
- Character chooseCharacterForAssassin(LinkedHashMap<Character,Optional<Behaviour>>)
- Character chooseCharacterForThief(LinkedHashMap<Character,Optional<Behaviour>>)
+ void ifPossibleBuildADistrict()
+ ArrayList<District> pick2CardsIntoTheDeck()
+ ArrayList<District> chooseToKeepOrNotPickedCards(ArrayList<District>)
+ void takeCard(District)
+ void takeGold()
+ void addDistrict(District)
+ void buildDistrict(District)
+ District pickCard()
+ District pickCardsInDeck()
~ void removeOtherCard(ArrayList<District>,District)
+ District chooseBetweenTwoCards(District,District)
+ int randomInt(int)
+ void setCharacterIsAlive(Boolean)
+ Player getPlayer()
+ Boolean getBehaviourIsKing()
+ CityManagement getCityManager()
+ Executor getExecutor()
+ ArrayList<District> chooseMagicianAction()
+ District chooseDistrictToDestroy(Player)
}
class fr.unice.polytech.citadelle.game_interactor.game_strategy.Predict {
~ Board board
+ <<Create>> Predict(Board)
+ Character predictWhoIsPlayer(Player,ArrayList<Character>)
- Optional<Character> checkAlreadyReveal(Player)
+ ArrayList<Character> allCharacters()
+ ArrayList<Character> targetableCharactersForPredictWhoIsPlayer(ArrayList<Character>)
- int goldsForPredictWhoIsPlayer(Player)
- ArrayList<District> handForPredictWhoIsPlayer(Player)
- ArrayList<District> cityForPredictWhoIsPlayer(Player)
+ ArrayList<Player> playersForPredictWhoIsPlayer(Player)
+ boolean canBeArchitect(Player,ArrayList<Character>)
+ boolean canBeBishop(Player,ArrayList<Character>)
+ boolean canBeKing(Player,ArrayList<Character>)
+ boolean canBeMerchant(Player,ArrayList<Character>)
+ boolean canBeThief(Player,ArrayList<Character>)
+ boolean canBeMagician(Player,ArrayList<Character>)
+ boolean canBeWarlord(Player,ArrayList<Character>)
+ Character listGetCharacter(int)
}
class fr.unice.polytech.citadelle.game_interactor.Executor {
~ Player player
+ <<Create>> Executor(Player)
+ void takeCard(District,DeckDistrict)
+ void buildDistrict(District)
+ void takeGold()
+ void putCardBackInDeck(DeckDistrict,District)
+ District pickCard(DeckDistrict)
+ ArrayList<District> pickCards(DeckDistrict)
+ District pickBlindDistrict(DeckDistrict)
+ void addDistrict(District)
}
class fr.unice.polytech.citadelle.game_interactor.CityManagement {
~ Player player
+ <<Create>> CityManagement(Player)
+ ArrayList<District> getBuildableDistrictWithTwoMoreGold()
+ ArrayList<District> listOfDistrictBuildable()
+ ArrayList<District> districtWeCanBuild(ArrayList<District>)
+ ArrayList<District> districtWeHaveEnoughMoneyToBuild(int)
+ boolean isAlreadyBuilt(String)
}
class fr.unice.polytech.citadelle.game_interactor.game_behaviour.Rusher {
- {static} int MAX_VALUES_OF_CARDS
+ <<Create>> Rusher(Player,Board)
+ void executeSpell(ArrayList<SpellDistrict>,DeckDistrict)
+ void normalBehaviour()
+ void endGameBehaviour()
+ void lastTurnBehaviour()
+ void ifPossibleBuildACheapDistrict()
+ District getCheaperDistrict(ArrayList<District>)
- ArrayList<District> getAllCheapersDistricts(ArrayList<District>)
+ District chooseBetweenTwoCards(District,District)
}


fr.unice.polytech.citadelle.game_interactor.game_behaviour.Behaviour <|-- fr.unice.polytech.citadelle.game_interactor.game_behaviour.Investor
fr.unice.polytech.citadelle.game_interactor.game_behaviour.Behaviour <|-- fr.unice.polytech.citadelle.game_interactor.game_behaviour.Rusher
@enduml