tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
14
ZUGRIFFE
640
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    gufi gufi ist offline Mitglied Bronze
    Registriert seit
    Jul 2003
    Ort
    wien
    Beiträge
    47
    Hallo Leute,

    folgendes Problem liegt mir vor und ich hoff ihr wisst ne Lösung drauf (und ich hoff ich erklär das jetzt verstädnlich )


    Und zwar:

    Gemacht wird das alles in C#, ist aber denk ich Sprachen unabhängig.

    Ich hab ein Spielfeld, desen größe ich nicht weis (bekomm ich erst kurz vor Spielbeginn vom Server übermittelt). Auf diesem Spielfeld liegt irgendwo ein Item das ich mit einem Maxerl finden muss und zu einem bestimmten Punkt bringen muss (bei dem ich auch nicht weis wo er sein wird).

    Das Maxerl kann immer nur ein Feld gehen, danach ist der andere Spieler drann.
    Das Maxerl kann auch min. sein Nachbarfeld sehen (sprich alle 8 die rundherum sind), je nach Feld gegebenheit kann er auch auch 2 Felder weit sehen.
    Wenn man an den Rand kommt, kommt man auf der anderen seite wieder raus.

    Jetzt meine Frage:
    Ich brauch einen Algorithmus und irgendeine Taktik, um dieses Feld möglichst schnell nach diesem Item zu durchsuchen, und danach möglichst schnell den Punkt zu finden, zu dem ich dieses Item bringen muss.

    Weis einer was?

    Wäre für jeden Tipp dankbar
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Also das "Maxerl" soll möglichst schnell zum Item kommen, am besten vor dem anderen (menschlichen?) Spieler?

    Laut deiner Beschreibung vermute ich, das Spielfeld ist in x mal y Quadrate eingeteilt, und bei jedem Schritt wechselt das Maxerl zu einem benachabrten; links rechts oben unten, aber nicht schräg. Ist das korrekt?

    Gibts auf deinem Spielfeld auch Hindernisse/Mauern etc oder kann man sich überall frei bewegen?

    Und wann kann man 1, wann 2 Felder weiter?
    Geändert von sheel (13.12.10 um 13:53 Uhr)
     

  3. #3
    gufi gufi ist offline Mitglied Bronze
    Registriert seit
    Jul 2003
    Ort
    wien
    Beiträge
    47
    Also das "Maxerl" soll möglichst schnell zum Item kommen, am besten vor dem anderen (menschlichen?) Spieler?
    Richtig. Aber dieses Spiel wird nicht menschlich gesteuert. Es soll vollkommen alleine Ablaufen.

    Laut deiner Beschreibung vermute ich, das Spielfeld ist in x mal y Quadrate eingeteilt, und bei jedem Schritt wechselt das Maxerl zu einem benachabrten; links rechts oben unten, aber nicht schräg. Ist das korrekt?
    Genau so ist es.

    Gibts auf deinem Spielfeld auch Hindernisse/Mauern etc oder kann man sich überall frei bewegen?
    Hab ich ganz vergessen. Ja es gibt Hindernisse: 1) einen See (da kann das "Maxerl" nicht durch sondern muss rund herum) .... 2) einen Berg. Auf diesen kann man hinauf, jedoch bedarf es dafür 2 Züge fürs hinauf gehen und 1 Zug fürs hinunter gehen.

    Und wann kann man 1, wann 2 Felder weiter?
    Man kann immer nur 1 Feld weiter GEHEN. Jedoch kann der das Maxerl das benachbarte Feld (links, rechts, vorn, hinten) sehen (ob was drauf ist) bei gewissen Feldern kann er auch 2 Felder weit sehen (also 2 links , 2 rechts, 2 vorn und 2 hinten).
     

  4. #4
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Ahaa, jetzt wirds klarer.

    Es geht also nicht darum, nur einen möglichst kurzen Weg zum Schon bekannten Item zu ermitteln, sondern die Itemposition muss auch erst gefunden werden?

    In dem Fall musst du wohl alles durchlaufen.

    Zum Beispiel links unten beginnend immer nach oben, wenn er oben rauskommt kommt er ja unten wieder rein und geht bei jedem Nach-unten-wechseln weiter nach rechts.
    Man kann natürlich auch in der Mitte beginnen, muss halt wissen wo man angefangen hat; damit man da auch wieder aufhört.

    Generell muss wegen der Einser-Sichtbarkeit nur jede dritte Spalte durchlaufen werden, da er ja eine links bzw. rechts sehen kann.
    Spart schonmal viel.

    Wenn er beim See anstösst wäre eine Möglichkeit ebendrei weiter nach rechts, umdrehen und von da an das Ganze nach unten weiter.
    Wenn er am See nach rechts ist, darf er allerdings beim nächsten Rand-Oben-Unten-Wechsel nicht nach rechts,.

    Die Zweiersicht-Felder, sind die einzeln verstreut oder gehäuft?
    Wenn einzeln, bringen sie dir bei der Methode nicht viel.

    Und für den Berg überleg ich noch...
    Kann das Item auch am Berg oben sein?
    Ist der Berg nur ein Feld oder hat der auch eine Ausdehnung?
    Gibts eine Normal-Fläche oben oder muss man bis zu einer Spitze immer Bergsteigen (mit den Doppelschritten)?

    Ich mach vllt. eine Skizze, dauert allerdings noch bis ich dazu komme.
    edit: Dann wart ich doch lieber auf deinen Screenshot
    Geändert von sheel (13.12.10 um 21:55 Uhr)
     

  5. #5
    gufi gufi ist offline Mitglied Bronze
    Registriert seit
    Jul 2003
    Ort
    wien
    Beiträge
    47
    Es geht also nicht darum, nur einen möglichst kurzen Weg zum Schon bekannten Item zu ermitteln, sondern die Itemposition muss auch erst gefunden werden?
    richtig! und wenn ich das Item gefunden hab, dann muss ich es zu einem bestimmten Punkt bringen, den muss ich aber auch suchen. bzw. wenn ich ihn beim Item suchen sehe dann wird das auch gespeicher und ich kann gleich danach darauf zusteuern.

    Die Zweiersicht-Felder, sind die einzeln verstreut oder gehäuft?
    Das kommt auf den Server an der das Feld erstellt. Es kann alles so sein das man 2 Felder weit sieht, es kann vereinzelt sein oder es kann so sein das man nur 1 Feld weit sieht.

    Kann das Item auch am Berg oben sein?
    Nein.

    Ist der Berg nur ein Feld oder hat der auch eine Ausdehnung?
    Steht nur auf einem Feld. Es gibt da auch gewissen regeln, das nicht 2 Bergen nebeneinander stehen dürfen usw. aber die sind jetzt nicht relevant und zu lange um sie aufzulisten

    Gibts eine Normal-Fläche oben oder muss man bis zu einer Spitze immer Bergsteigen (mit den Doppelschritten)?
    Man muss ganz hinauf und kann nicht umdrehen.

    -------
    Ich hab ja auch schonmal darüber nachgedacht: Ist es vl. auch ne schnell möglichkeit das ganze in einem "Z" zu durchlaufen? Dann hätt ich ja schon mal einiges abgedeckt und nur mehr 2 "Punkte" die ich durchsuchen muss.

    Was mir noch eingefallen ist: Meinen Startpunkt kann ich Festlegen (der ist dann immer dort) jedoch nur auf der X-Achse, d.h. wenn ich den Startpunkt rechts unten wähle dann kanns auch sein das der server sagt ich bin oben und der Gegner unten, dann is mein startpunkt rechts oben.

    Danke schonmal im vorraus

    ps: ich werd versuchen nen screenshot aufzutreiben, dann kann man sich das glaub ich besser vorstellen, kann aber leider noch etwas dauern.
    Geändert von gufi (13.12.10 um 21:14 Uhr)
     

  6. #6
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Sind die Seen auch wie die Berge immer genau ein Feld groß?
    Ob du diagonal gehst oder nicht ist egal. Wenn du einmal nach rechts gehst und dann z.B. nach unten, dann deckst du genau 6 vorher unbekannte Felder auf. Wenn du zwei Mal nach rechts gehst deckst du auch genau 6 vorher unbekannte Felder auf.
    Allerdings würde ich Kurven in deinem Weg meiden. Denn wenn du in einem Z läufst, dann erzeugst du Felder die "teuer" sind um sie aufzudecken: im nächsten Durchlauf müsstest du in die Ecken vom Z hineinlaufen und brauchst dann zwei Züge um nur ein einziges unbekanntes Feld aufzudecken (einen Zug um zum Feld hinzulaufen und eines um wieder zurückzugehen). Diese Behauptung solltest du aber noch mal überprüfen - ich habe mir das nur im Kopf vorgestellt, da kann leicht ein Denkfehler auftreten
    Geändert von Shakie (14.12.10 um 00:52 Uhr)
     
    hihi = -h²

  7. #7
    gufi gufi ist offline Mitglied Bronze
    Registriert seit
    Jul 2003
    Ort
    wien
    Beiträge
    47
    Sind die Seen auch wie die Berge immer genau ein Feld groß?
    Jap, der See ist 1 Feld groß
     

  8. #8
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  9. #9
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Berge und Seen sind also immer nur ein Feld groß. Gut, erleichert einiges.

    Sind Berge/Seen schon von Anfang an bekannt oder müssen die auch erst während dem Herumgehen erkannt werden?

    Und die 2-Sicht-Felder, bekannt/durch sehen findbar/erst beim draufstehen erkennbar?
     

  10. #10
    gufi gufi ist offline Mitglied Bronze
    Registriert seit
    Jul 2003
    Ort
    wien
    Beiträge
    47
    von dem spielfeld weis ich garnichts, außer die größe und die hol ich mir kurz vor beginn.

    die 2 sicht felder seh ich bzw. weis ich erst beim draufstehen.
     

  11. #11
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    aStar A* ist der wohl passende Algorithmus.

    http://de.wikipedia.org/wiki/A*-Algorithmus

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  12. #12
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Ich kannte A* zwar nicht, aber Wiki sagt:
    Der A*-Algorithmus findet allgemein einen optimalen Pfad zwischen zwei Knoten in einem Graphen.
    Ich verstehe nicht wie A* für die Schatzsuche behilflich sein sollte. Schließlich ist der Zielknoten nicht bekannt!?
     
    hihi = -h²

  13. #13
    kle-ben kle-ben ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    492
    Zitat Zitat von chmee Beitrag anzeigen
    aStar A* ist der wohl passende Algorithmus.
    Tiefen- und Breitensuche funktioniert hier nicht da die Karte unbekannt ist.
    Der A* Algorithmus funktioniert leider erst recht nicht da das Ziel unbekannt ist.
    Es gibt also keine Heuristik mit der man einen optimalen weg bestimmen kann.

    Es bleibt dir also nichts anderes übrig als die gesammte Karte abzulaufen.
    Da du jedoch über den Rand laufen kannst ist das jedoch relativ einfach.

    - Laufe solange nach Links bis du wieder zu deiner Ausgangspositon gelangst.
    - Gehe zwei Felder nach unten und definiere die aktuelle Position als Ausgangspunkt.
    - Beginne wieder von vorne.

    Kommt während dieses Ablaufs das Item in deinen Sichtbereich musst du
    natürlich unterbrechen und darauf zulaufen. Merke dir bei dem Vorgang alle
    Felder. Bist du bei deiner Suche nach dem Item auf das Zielfeld gestoßen zu
    dem du das Item später bringen musst, dann kannst du anschließend den
    A* Algorithmus anwenden um den kürzesten weg zu finden.
     
    Theorie ist Wissen, das nicht funktioniert.
    Praxis ist, wenn alles funktioniert und man weiß nicht warum

  14. #14
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    Sorry, ich hab dann zu schnell überfolgen und nicht gelesen, dass Punkt B nicht bekannt ist, sondern erst gesucht werden muß. Folgend: Wenn Du auf der Karte losgehst, erscheinen also mehr Felder als nur das betretene..

    Die eben genannte Idee scheitert an Löchern zwischen zwei Hindernissen. Und man sieht an einer Zeichnung, dass es in der Vertikalen auch mehr Schritte sein dürfen..
    Name:  Algorithmus_welt.gif
Hits: 1
Größe:  3,9 KB
    Letztlich muß ein Alg.s gefunden werden, der die Welt vollständig absucht - da würd ich erstmal definieren, dass es freie und unfreie Felder gibt. Unter den unfreien Feldern gibt es welche, die nicht passierbar sind und jene, die etwas bringen (sprich: Schatz). Da sollte sich etwas in der Robotik finden (zB Bug-Alogrithmus?).

    Auch wenn folgende Links nicht immer direkt mit diesem Problem zu tun haben,
    pack ich sie mal hier rein:
    http://www.phpgangsta.de/algorithmus...-shortest-path
    http://www.o-bizz.de/qbtuts/ai-tuts/...athfinding.pdf

    Diese beiden PDFs klingen vielversprechend:
    http://www.brichzin.de/seminarfach/SA07_Pfadsuche.pdf
    http://page.mi.fu-berlin.de/alt/vorl...ien-hempel.pdf

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  15. #15
    gufi gufi ist offline Mitglied Bronze
    Registriert seit
    Jul 2003
    Ort
    wien
    Beiträge
    47
    Hei

    danke für euere Antworten. Ich werd die Woche den Algo. mal einbaun und am 25.1. weis ich dann wies ausgegangen is! Geb euch natürlich bescheid

    Sollte noch wer andere Vorschläge haben, werd ich auch diese gerne ausprobieren.

    lg
     

Ähnliche Themen

  1. Algorithmus für DDS (DXT) gesucht!?
    Von GodWar im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 12.08.06, 14:47
  2. Algorithmus gesucht
    Von Cuchulainn1981 im Forum Coders Talk
    Antworten: 0
    Letzter Beitrag: 14.05.06, 16:48
  3. Algorithmus für Zeitraumeinteilung gesucht!
    Von polo_krausi im Forum Coders Talk
    Antworten: 3
    Letzter Beitrag: 20.07.05, 17:45
  4. NestedSet - Algorithmus gesucht
    Von F.o.G. im Forum PHP
    Antworten: 32
    Letzter Beitrag: 21.05.04, 15:31
  5. Algorithmus gesucht
    Von Andreas Gaisbauer im Forum Coders Talk
    Antworten: 1
    Letzter Beitrag: 12.08.03, 13:41