@startuml
'https://plantuml.com/sequence-diagram
allow_mixing
skinparam style strictuml
skinparam classAttributeIconSize 0
skinparam circledCharacterRadius 0
skinparam circledCharacterFontSize 0
skinparam classFontStyle Bold
'autonumber

'Controleur
interface AntFacadeController <<interface>> {
    '+setParameters( evaporationParam:Integer, foodParam:Integer, pheromoneParam:Integer )
    +createColony(row:Integer,column:Integer)
    +createGrid(width:Integer, height:Integer)
    +putObstacle(row:Integer, column:Integer)
    '+putFood( row:Integer, column:Integer, quantity:Integer);
    '+createWorkers( amount:Integer )
    +createSoldiers(amount:Integer)
    '+setAntFile(antLogFile:String);
    +play( duration:Integer, record:boolean )
}

class Noeud {
    -free:boolean
    +isFree():boolean
    +setFree(boolean)
    +getVoisins():Noeud[*]
    +getFreeVoisins():Noeud[*]
}

abstract Fourmis <<abstract>> {
    +getPosition():Noeud
    +setPosition(position:Noeud)
    +move()
    +getFreeVoisinsNonVisite()
}
class Reine{
    +move() <<override>>
    +createSoldiers(amount:Integer)

}
class Soldat{
    +move() <<override>>
}


'class Graphe implements projet.v2.AntFacadeController{
class ControlFourmis implements AntFacadeController{
    +createGrid(width:Integer, height:Integer)
}


class Graphe{
 +getNoeud(row:Integer, column:Integer):Noeud
 +putObstacle(row:Integer, column:Integer)
}


Soldat --|> Fourmis
Reine -l-|> Fourmis

ControlFourmis "1 " *-l-> Graphe
ControlFourmis "1..*" *--> Fourmis

Graphe *-r-> "-noeuds\n0..n" Noeud : composé de >
'historique = liste de noeud déjà passé par la fourmi
Fourmis "-fourmi\n0..n" --- "-position 1\n-historique 0..*" Noeud  : est sur un >
Noeud o-> "-voisins\n0..*"  Noeud  : est voisin de >

@enduml