|
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Senior Sanchez Forumsjunki
Anmeldungsdatum: 07.02.2007 Beiträge: 61
|
Verfasst am: 12.02.2007, 13:40 Titel: Tasks |
|
|
Hi,
Könnte nochmal jemand die Geschichte mit den unterschiedlichen Tasks erklären? Ich blicke das irgendwie gar nicht, finde es sehr verwirrend beschrieben.
Also Tasks sind ja die zu lösenden Aufgaben. TaskSheepCollect ist doch im Grunde immer die Aufgabe die man erfüllen muss: Ich soll bestimmte Schafe in einem Kreis sammeln.
Eine TaskList ist jetzt wiederum eine Liste die aus lauter TaskSheepCollects besteht, die ich erfüllen muss. Dabei kann es sein, dass ich diese TaskSheepCollects entweder seriell oder parallel ausführen muss.
Und eine TaskCompetition ist dann jetzt genau was?!
Wenns jemand erklären sollte, dann bitte mit anderen Worten als die, die auf der Homepage bzw. inner Präsi benutzt wurden. |
|
| Nach oben |
|
 |
Micha Neuling
Anmeldungsdatum: 07.02.2007 Beiträge: 9
|
Verfasst am: 13.02.2007, 15:32 Titel: |
|
|
also die TaskCompetition enthält nen TaskArray (also meist mehrere TaskList) in dem dann an der Stelle t die Task für Team t drin sind. Den Array gibbet per getTasks() als clone.
Ne TaskList ist nen Vector<Task> das heisst die kann nicht nur TaskSheepCollect enthalten sondern auch weitere TaskList. Und sie hat nen boolean-Atribut parallel, wenn sie nicht parallel ist kann man per getCurrentTask() das Task kriegen ansonsten musss man per getTaskList() den Vector abfragen und selber auseinandernehmen.
Wenn ne TaskList Parallel ist sind die Unterlisten aber nicht zwangsläufig parallel, könnte aber auch eher nen Fehler des MapEditors sein. |
|
| Nach oben |
|
 |
Senior Sanchez Forumsjunki
Anmeldungsdatum: 07.02.2007 Beiträge: 61
|
Verfasst am: 13.02.2007, 16:21 Titel: |
|
|
Jetzt wird die ganze Sache doch gleich mal klarer.
Ich habe mir, wie man vllt merkt, die konkrete Implementierung des Schafspiels noch gar nicht angeschaut, aber quasi nochmal zum Verständnis.
Es findet an sich immer eine TaskCompetition statt die für jedes Team eine entsprechende TaskList enthält. Einzelaufgaben, also wo ich nur direkt eine TaskList bekomme und gegen keine weiteren Gegner antrete, gibt es nicht, richtig?
Ansonsten bekomme ich halt direkt TaskSheepCollects oder Listen von eben diesen, die ich dann entweder parallel oder seriell, abarbeiten muss.
Wenns so ist, habe ich die Sache dann wohl verstanden.
Das man so etwas aber nicht mal wirklich genauer in der Dokumentation findet, finde ich etwas ungünstig. |
|
| Nach oben |
|
 |
Micha Neuling
Anmeldungsdatum: 07.02.2007 Beiträge: 9
|
Verfasst am: 14.02.2007, 13:57 Titel: |
|
|
| Ich glaub bei neuen Karten sollte das so sein, alte haben glaub ich aber noch ne TaskList als Wurzel. Müsste sich mal ein Dev zu äußern ^^. |
|
| Nach oben |
|
 |
zet Forumsjunki
Anmeldungsdatum: 05.02.2007 Beiträge: 85
|
Verfasst am: 14.02.2007, 20:04 Titel: |
|
|
Ja, die initialisierungskarte ist ohne TaskCompetition. Genau dieser Task wird aber für neu angelegte Karten IMMER in der Wurzel abgelegt und sonst nirgends. In dem befindet sich dann die Liste mit Tasks, wo jeder Eintrag einem Team zugehört.
Jeder Task hat eine Bedingung die erfüllt sein muß, damit das Programm diesen als gelöst betrachtet. Bei Sequentiellen listen muß dafür ein Task nach dem anderen gelöst werden, bei Paralellen müssen alle gleichzeitig gelöst sein, damit die Liste als gelöst gilt.
Dadurch ergeben sich mitunter sehr komplexe aufbauten, aber so kompliziert wirds nicht werden, ihr könnt damit rechnen, dass es für jedes Team nur eine sequentielle Liste gibt in der entweder die Schafsammelpunkte drinnen stehen oder Paralleltask Listen, welche wiederum NUR Sammelpunkte enthalten. Also z.B.
| Code: |
+ TaskCompetition
+--+ Team 1 Liste, sequentiell
| +-- Sammelpunkt 1
| +-- Sammelpunkt 2
| +--+ Parallellists
| +--Sammelpunkt 1
| +--Sammelpunkt 2
|
+--+ Team 2 Liste, sequentiell
+-- Sammelpunkt 1
+-- Sammelpunkt 2
+--+ Parallellists
+--Sammelpunkt 1
+--Sammelpunkt 2
|
Eure KI muss also nur zwei Situationen beherrschen: Einzelne Sammelpunkte ansteuern und mehrere Sammelpunkte gleichzeitig ansteuern.
Das sollte ansich nicht so kompliziert sein. Es dürfte auch nicht zu erwarten sein, dass eine Wettbewerbskarte mit einem Paralleltask mit mehr als 3 Sammelpunkte gleichzeitig da sein dürfte - also maximal ein Sammelpunkt pro Hund. |
|
| Nach oben |
|
 |
Basti Neuling
Geschlecht:  Anmeldungsdatum: 16.02.2007 Beiträge: 16 Wohnort: Schönebeck
|
Verfasst am: 16.02.2007, 19:49 Titel: |
|
|
| Kann ich auch davon ausgehen, dass die "Team x Liste" deiner Auflistung immer eine serielle TaskList ist, oder kann die bereits parallel sein? |
|
| Nach oben |
|
 |
zet Forumsjunki
Anmeldungsdatum: 05.02.2007 Beiträge: 85
|
Verfasst am: 18.02.2007, 21:55 Titel: |
|
|
| Theoretisch ja - kann auch schon parallel sein. |
|
| Nach oben |
|
 |
Gast
|
Verfasst am: 05.03.2007, 19:25 Titel: think Task? |
|
|
Was für ein Task ist denn der in der Think Methode übergebene?
| Zitat: |
| public DogCommand think(Field f, Dog dog, Task task) |
Ist das der TaskCompetition Task oder die Liste für das Team oder irgendein anderer? |
|
| Nach oben |
|
 |
zet Forumsjunki
Anmeldungsdatum: 05.02.2007 Beiträge: 85
|
Verfasst am: 07.03.2007, 09:10 Titel: |
|
|
| ist der gleiche task wie der, den man mit field.getTask bekommt. Da man ohnehin den abrufen würde, übergeb ich den gleich als argument mit. |
|
| Nach oben |
|
 |
Gast
|
Verfasst am: 16.03.2007, 20:44 Titel: |
|
|
Gibt es Chancen, dass es zu einer Situation
| Code: |
- parallel
-> seriell
->collect
->collect
-> collect
-> collect
|
kommt? Oder ist so etwas definitiv ausgeschlossen (was bei der komplexität der Situation gut vorstellbar wäre)?[/code] |
|
| Nach oben |
|
 |
zet Forumsjunki
Anmeldungsdatum: 05.02.2007 Beiträge: 85
|
Verfasst am: 17.03.2007, 12:54 Titel: |
|
|
Nein, wir werden uns auf sowas beschränken:
| Code: |
seriell
collect
collect
paralell
collect
collect
|
D.h. wenn euer Hund Paralelltasks und serielle Tasks kann, ist das kein Problem mehr. |
|
| Nach oben |
|
 |
Senior Sanchez Forumsjunki
Anmeldungsdatum: 07.02.2007 Beiträge: 61
|
Verfasst am: 19.03.2007, 14:27 Titel: |
|
|
Ich muss nochmal fragen:
Was ich dort bei think() oder bei field.getTask() übergeben bekomme ist IMMER eine Instanz von TaskCompetition, richtig?
Von dieser kann ich mir dann über den Index meine eigene Tasks holen und die parsen, korrekt?
Sämtliche Tasks sind auch von Anfang an verfügbar, richtig? Oder wird diese Liste dynamisch erweitert, wenn ein alter Task abgeschlossen ist und ein neuer hinzukommt? |
|
| Nach oben |
|
 |
Mike Gast
|
Verfasst am: 20.03.2007, 03:43 Titel: |
|
|
Hi,
wie kann ich denn z.B. auf Funktionen wie z.B.
getTaskList() (von app.logic.TaskList)
oder
getTasks() (von app.logic.TaskCompetition)
zugreifen?
Ich brauche doch eine Instanz der jeweiligen Klasse um diese Funktionen nutzen zu können oder?
(Ich bitte logische Fehler meinerseits zu entschuldigen und zu korrigieren,
bin was statische und nicht-statische Methoden und deren Nutzung/Zugriff angeht noch nicht auf nem ausreichenden Wissensstand) |
|
| Nach oben |
|
 |
Senior Sanchez Forumsjunki
Anmeldungsdatum: 07.02.2007 Beiträge: 61
|
Verfasst am: 20.03.2007, 10:46 Titel: |
|
|
| Mike hat folgendes geschrieben: |
Hi,
wie kann ich denn z.B. auf Funktionen wie z.B.
getTaskList() (von app.logic.TaskList)
oder
getTasks() (von app.logic.TaskCompetition)
zugreifen?
Ich brauche doch eine Instanz der jeweiligen Klasse um diese Funktionen nutzen zu können oder?
(Ich bitte logische Fehler meinerseits zu entschuldigen und zu korrigieren,
bin was statische und nicht-statische Methoden und deren Nutzung/Zugriff angeht noch nicht auf nem ausreichenden Wissensstand) |
Du bekommst ja ein Task Objekt. Wenn du dir die Klassenhierarchie mal anschaust, wirst du feststellen, dass Task die Oberklasse von TaskSheepCollect, TaskList und TaskCompetition ist. Ergo kannst du, nachdem du am besten per instanceof die Zugehörigkeit zu einer der Klassen geprüft hast, das Task Objekt auf diese Klasse casten. |
|
| Nach oben |
|
 |
toster Neuling
Geschlecht:  Anmeldungsdatum: 23.02.2007 Beiträge: 11 Wohnort: Magdeburg
|
Verfasst am: 24.03.2007, 21:11 Titel: |
|
|
| Wenn ich die Methode getCurrentTask(dog, task) aufrufe, bekomme ich dann immer entweder den aktuellen TaskSheepCollect oder eine parallele TaskList zurück? |
|
| Nach oben |
|
 |
|