Dat zou immers betekenen dat GameData.getMyAnts(); een lege lijst oplevert. Weet jij waarom?
Ik mis de klasse Snake om echt het probleem te zien.
Maar de eerste beurt draait de code zonder 1 enkele ant. (op een lege map) Dit was zo in de startersbot, en dit heb ik er niet uitgehaald omdat dit bij goede code niet zou mogen uitmaken. Je weet namelijk niet met hoeveel ants gestart wordt en of die überhaupt wel kunnen bewegen of elkaar kunnen bereiken.(zoals op de testmap getest wordt) Ook zou hij anders crashen op het moment dat de bot verloren is.
Maar ik heb me al geërgerd aan het protocol dat ze bedacht hebben. Zo wordt de laatste beurt van een spelletje 2x gespeeld wat mij ook al een uurtje zoekwerk geleverd heeft over waarom dat dat ding vastliep... er wordt letterlijk aan de bot doorgegeven van "speel nu turn 165", de bot geeft door wat hij wil doen, die ouput wordt genegeerd, hetzelfde spelbord wordt doorgegeven en dan opnieuw "speel nu turn 165". Natuurlijk sloeg de AI compleet in verwarring want dat is niet wat ze verwachtte.
Verder...
Ik zit met een probleem, eigenlijk. Ik hoop dat je er nog geen last van gehad hebt, maar de formationcode die er nu in zit kan time-outen omdat de path-finding veel te complex kan worden om binnen die seconde uit te rekenen. Daar weet ik wel een oplossing voor, maar eigenlijk is dit een symptoom van een architectuurprobleempje.
Op dit moment wordt iedere mier een object, terwijl alle mieren eigenlijk volledig equivalent zijn op hun positie na. Vanuit architectuurstandpunt was het eigenlijk niet goed om de mieren als apart te beschouwen, als mier A naar punt B wil, en mier B naar punt A, dan kunnen ze beter allebei stilstaan.
Maar, ik ken geen enkel goed algoritme dat zo een probleem oplost. Je hebt x doelen en y mieren, hoe bepaal je (heuristisch en efficiënt, niet fullblown bruteforcen) een goede manier om met de mieren de doelen te bereiken? Je kunt het ergens zien als maximum flow probleem met meerdere sources en drains, maar daar ken ik geen enkele goede heuristiek bij, en ik kan er ook geen bedenken... als er iemand iets weet of kan bedenken...
In ieder geval, mijn volgende stap zal zijn om eens een "mapping" algoritme te bouwen, waarbij ruimte wordt ingedeeld in subruimtes in subruimtes, enz. in een soort boom. Zo zou je dan kunnen zeggen welke speler welke ruimte 'controleert', wat kan helpen bij intelligentere aanvallen, en het zou zo moeten lukken om wat intelligenter de formaties te bewegen om alles weer in milliseconden te kunnen uitrekenen. Bovendien kunnen we daarmee A# i.p.v. A* gebruiken, wat efficiënter (maar moeilijker) is.