Priebeh parsovania čiar je znázornený na obrázku 1 v podobe UML diagramu sekvencií (diagram neznázorňuje celý priebeh parsovania, iba časť týkajúcu sa získavania informácií o čiarach).
Objekt typu Parser sa nachádza v triede Communication a jeho metóda parse() je volaná vždy po prijatí správy zo servera.
Na začiatku sa vytvorí objekt typu ParsedData, ktorý v sebe uchováva informácie získané zo serveru. Tento objekt vracia funkcia po ukončení. Následne sa prijatý S-výraz rozdelí na jednotlivé časti vo funkcii breakDown(). V cykle je volaná processPerceptor() (z triedy Perceptors)pre každú časť prijatého S-výrazu.
Funkcia processPerceptor() identifikuje časť správy a zavolá príslušnú funkciu na získanie dát (napr. pre informácie z gyroskopu, o čase, stave hry, čo agent vidí, … ).
Ak sa jedná o informácie, čo agent vidí (S-výraz „see“), zavolá sa funkcia retrieveSeenData() triedy SeenPerceptor, ktorá vráti objekt obsahujúci dané dáta (SeenPerceptorData). Po návrate s tejto funkcie sa skopírujú dáta do objektu typu ParsedData.
Funkcia retrieveSeenData() triedy SeenPerceptor prebieha podobne ako funkcia parse() triedy Parser. Správa sa rozdelí na jednotlivé časti, tentokrát uložené v podobe objektu typu SArray. Následne je vytvorený objekt SeenPerceptorData, kde sa získané dáta uložia. V cykle je volaná funkcia dispatch(), ktorá na základe typu získava dáta o polohe lopty, ostatných hráčov, čiar alebo fixných objektov (trieda FixedObject).
V prípade čiar je volaná funkcia getLine(). Funkcia najskôr získa dva objekty typu Vector3D z objektu typu SArray volaním funkcie getPolarCoordinates(). Po vytvorení týchto dvoch objektov vráti nový objekt typu PrasedLineWithFlags, v opačnom prípade null. V konštruktore triedy PrasedLineWithFlags sa nastavia príznaky koncových bodov čiary, ak uhol Phi je z intervalu -58° až 58°, nastaví sa daný bod na koncovým bodom čiary (endFlag na true), inak že nie je (endFlag na false).
Vrátený objekt sa vo funkcii dispatch() pridá do zoznamu čiar.
Obrázok 1: UML DIagram Sekvencií - priebeh parsovania čiar
Typ: public
Implementované rozhrania:
java.io.Serializable
Premenné:
Vector3D position1
Vector3D position2
boolean endFlag1
boolean endFlag2
Trieda uchováva informácie o koncových bodoch čiary v podobe objektu typu Vector3D a pre oba body nesie informáciu o tom, či daný bod je koncovím bodom čiary (endFlag - koncový príznak bodu).
Parametre:
Vector3D position1
Vector3D position2
Prijíma informácie o koncoch čiary a nastaví príznak, či daný bod je koncovým bodom čiary, alebo nie na základe uhla phi, ak je z intervalu -58° až 58°, daný bod je koncovým bodom čiary, inak nie je (agent ho vidí na hranici viditeľnosti a pravdepodobne čiara pokračuje ďalej).
Typ: public
Návratová hodnota: double
Funkcia vráti vzdialenosť medzi koncovými bodmi čiary: sqrt((x2-x1)2 +(y2-y1)2 (z2-z1)2 )
Typ triedy: Public
Premenné:
Vector3D ball- poloha lopty
Map<FixedObject, Vector3D> fixedObjects - (kľúč = kontrólny bod, hodnota = ako ho vidí agent)
List<PlayerData> players- ostatný hráči na ihrisku
List <ParsedLineWithFlags> lines - čiary
Trieda uchovávajúca informácie získané o tom, čo agent vidí.
Trieda spracovávajúca informácie zo servera.
Trieda spracovávajúca informácie o tom, čo agent vidí. Najskôr rozdelí prijatú správu na časti a na základe typu (“B“, “P“ alebo “L“) spracuje danú časť.
Pozri aj: Prepočítanie relatívnej pozície z parsera, Správy zo servera