C Wegsuche Wegewahl

hell-student

Lieutenant
Registriert
Nov. 2007
Beiträge
671
Hallo Zusammen,

Ich beschäftig mich grad mit nem kleinen Prog, welches ich in der Zeit, wenn ich mal nicht lernen muss bissel proggen möchte. Also geschrieben wird zur Einfachheit einfach in C. Möchte quasi sowas wie Pacman machen. Speicher momentan das Spielfeld im nem Array und geb das Lvl auf der Console aus. "." steht für freies Feld. Möchte jetzt haben, dass ein "Gegner KI" auf dem Feld herümläuft und dies solange tut, bis es auf ein Feld "#" stoßt (z.b Field[23][123] oder so). Nun weiß ich grad nicht was die beste Strategie wäre fürs suchen. Immer geradeaus bis Wand, dann zufällig nach links oder rechts bis wieder wand, dann zufällig wieder in einer Richtung. Dabei ist aber das Prob, dass die Figur vielleicht einfach am Rand entland läuft und dies immer im Kreis tut. Also auf dem Feld sind halt freie Felder "." Wände "+" und halt das "#" Feld. Ne Pseudozufallszahl und je nach dem in eine Richtung bring ja auch nicht soviel. Hoffe ich konnt erklärn worum es geht.
 
Zuletzt bearbeitet:
In ner Schleife den Gegner so lange laufen lassen, bis ein Feld eine Kreuzung darstellt.
Dann entweder Zufallszahl um die Richtungsänderung festzulegen (simpel) oder du erhöhst die Chance auf einen Weg in die Position des Spielers.

Zum Beispiel ist der Spieler in der linken oberen Ecke (nehmen wir an oben links ist Position 0/0) und der Gegner an ner Kreuzung bei 10/10.
Dann muss die Richtung erkannt werden, in der der Spieler anzutreffen ist. Also wäre das für diese Gegner oben links. -> Zufallszahl erzeugen .. sagen wir höchste Ziffer ist die 7 niedrigste ist 0. Dann führen 0,1,2 nach links 3,4,5 nach oben 6 nach rechts und 7 nach unten.

Voila
 
Zuletzt bearbeitet:
Hmm mein Prob dabei ist, dass es nicht allzu enge Gänge sind, also eigentlich relativ wenige Mauern sind. Also sowas wie Kreuzungen gibts bei mir nicht
 
Definition Kreuzung bei mir:
Mehr als Weg vor und Weg zurück.

Du lässt den Gegner einen Schritt laufen, dann wird die Kreuzungserkennung durchgeführt. (4 Wege überprüfen. Wenn mögliche Wege >2, dann ist das Feld eine Kreuzung)
Dann führste das mit der Zufallszahl aus (siehe letzter Post) mit der relativen Richtung bevorzugt.
Sind nur 3 wege möglich, müssen die Zufallszahlen auf diese 3 Wege angepasst werden.


Wenn du noch fragen hast -> fragen ;)


Jemand anders kann aber auch einen KI-Vorschlag machen.


----



Ablauf im Programm:

Code:
while Hit=0 {
    sleep(1);
    macheSchritt(Richtung);
    if Kreuzung(PosGegnerX, PosGegnerY) 
        Richtung = erkenneRichtung();
    if ((PosGegnerX == PosSpielerX) && (PosGegnerY == PosSpielerY)){
        Hit=1;
        GameOver();
    }
}
Sollte so in etwa klappen. Natürlich müssen ein paar Fälle abgedeckt sein.
"Boolean Kreuzung(X,Y)" könnte auch gleichzeitig eine Abbiegung erkennen, oder auch einen Gang. Dann wäre das schon fast die fertige Lösung.
 
Zuletzt bearbeitet:
Zurück
Oben