KI Snake
-
TGGC schrieb:
Wo ist das Gesetz, das es ohne Einsammeln nicht Snake heissen darf?
-
Also eigentlich gibt es bi mir schon was zum aufsammeln aber wenn das nun genau hinter der schlange liegt dreht die bei wegfinder automatisch um 180 um.
Ich hätte es besser erklären solln:
Die KI schlange soll nichts fressen sondern nur als "mobile Wand" unterwegs sein die die schwierigkeit erhöht. Ich habe das Spiel mit meinem basiswissen der struktorierten Programmierung geschrieben (d.h. der erste Beitrag: Bahnhof) ich lenke die Schlange mit gotoxy über den screen und die KI sollte das auch so machen.
Im moment Besteht meine Schlange aus zwei Arrays einer für die einer ür die y koords die in einer Schleife als xy für die gotoxy genommen werden. Das sieht dan so aus://Zeichnen der Schlange for (l=0; l<=Laenge; l++){ gotoxy (x[l], y[l]); cprintf("o\b"); }Die KI müsste in die gleiche Schleife damit die synchron arbeiten.
Die nicht KI Schlange hab ich so gesteuert:
if (kbhit()){ richtung = getch(); if (richtung == 97) ; else; if (richtung == 100) ; else; if (richtung == 115) ; else; if (richtung == 119) ; else; } else; if (richtung == 97) rx--; else; if (richtung == 100) rx++; else; if (richtung == 115) ry++; else; if (richtung == 119) ry--; else;Das hab ich mal reingeschrieben um einen ungefähren einblick ins prog zu verschaffen. Ich hoffe jetzt ist mein Problem deutlich genug geschildert
-
Hab vergessen zu sagen das es eine KONSOLENANWENDUNG ist
-
Der_Einzige schrieb:
Also eigentlich gibt es bi mir schon was zum aufsammeln aber wenn das nun genau hinter der schlange liegt dreht die bei wegfinder automatisch um 180 um.
Wieso sollte er das tun? Dort ist doch ei Hindernis (die Schlange) und die Wegsuche ist grad dazu da, diese zu umgehen.
Bye, TGGC (Fakten)
-
Der_Einzige schrieb:
Also eigentlich gibt es bi mir schon was zum aufsammeln aber wenn das nun genau hinter der schlange liegt dreht die bei wegfinder automatisch um 180 um.
Eigentlich kann man bei keinem Snake 180° wenden...

Das solltest Du schon abprüfen, sowohl beim Spieler, als auch bei der KI.
Der_Einzige schrieb:
if (kbhit()){ richtung = getch(); if (richtung == 97) ; else; if (richtung == 100) ; else; if (richtung == 115) ; else; if (richtung == 119) ; else; } else; if (richtung == 97) rx--; else; if (richtung == 100) rx++; else; if (richtung == 115) ry++; else; if (richtung == 119) ry--; else;Was sollen die ganzen leeren if-Abfragen?!

Wenn richtung == 97 Dann -> Mache nichts. Ansonsten -> Mache nichts.
Mache halt sowas:
#define HOCH 1 #define RUNTER 2 #define LINKS 4 #define RECHTS 8 unsigned char aktuelleRichtung; unsigned char gewuenschteRichtung; unsigned char input; /* Eingabe holen und daraus die neue gewünschte Richtung interpretieren */ if (kbhit()){ input = getch(); if (input == 97) gewuenschteRichtung = LINKS; if (input == 100) gewuenschteRichtung = RECHTS; if (input == 115) gewuenschteRichtung = RUNTER; if (input == 119) gewuenschteRichtung = HOCH; } /* Die aktuelle Richtung nur ändern, wenn gewünschte Richtung nicht 180° zu aktuelle Richtung steht */ if (gewuenschteRichtung == LINKS && aktuelleRichtung != RECHTS || gewuenschteRichtung == RECHTS && aktuelleRichtung != LINKS || gewuenschteRichtung == RUNTER && aktuelleRichtung != HOCH || gewuenschteRichtung == HOCH && aktuelleRichtung != RUNTER) aktuelleRichtung = gewuenschteRichtung; /* Die Position entsprechend der aktuellen Richtung updaten */ switch (aktuelleRichtung){ case LINKS : rx--; break; case RECHTS : rx++; break; case RUNTER : ry++; break; case HOCH : ry--; break; }
-
TGGC schrieb:
Der_Einzige schrieb:
Also eigentlich gibt es bi mir schon was zum aufsammeln aber wenn das nun genau hinter der schlange liegt dreht die bei wegfinder automatisch um 180 um.
Wieso sollte er das tun? Dort ist doch ei Hindernis (die Schlange) und die Wegsuche ist grad dazu da, diese zu umgehen.
Bye, TGGC (Fakten)
mit einem 0815 Wegfindungsalgorithmus kommste aber nicht weit, da die Hindernisse sich ja bei jeder Bewegung verändern. D.h. dein gefundener "optimaler" Weg, ist nicht mehr optimal. Außerdem kann es passieren, dass er überhauptkeinen Weg findet, obwohl eine Möglich ist (da die Hindernisse eben nicht statisch sind)..
-
life schrieb:
mit einem 0815 Wegfindungsalgorithmus kommste aber nicht weit, da die Hindernisse sich ja bei jeder Bewegung verändern.
Ist ja auch so schwer, wenn der Weg blockiert wird ihn neu zu berechnen...
Bye, TGGC (Fakten)
-
@Sgt. Nukem
Ich werds mal probieren.
Und noch n detail am Rande was ist ein Wegfindungsalgorithmus???
-
Der_Einzige schrieb:
Und noch n detail am Rande was ist ein Wegfindungsalgorithmus???
LOL

Was könnte der Name wohl bedeuten?
-
Also es hat prima geklapt das sie sich nicht selbst fressen kann nur mein problem ist eigentlich noch da denn ich wollte ja ne KI die selbstständig fährt, aber trotzdem Danke ich glaub den Rest krieg ich allein hin.
mfg bauarbeiterjoe
-
ok ich hab mir hier die posts durchgelesen aber ich verstehe eins nicht: du hast ein snake konsolen spiel programmiert wobei die schlange gleichzeitig vom spieler und von der ki bewegt wird

-
So ähnlich also:
Ich steuere eine Schlange UND die KI steuert ire eigene Schlange also insgesamt 2 Schlangen die KI soll nur rumfahren und als Hinderniss dienen. Und was ein Wegfinde... Kann ich mir vortellen aber eigentlich meinte ich das ich nicht weiss wie ich so was schreibe (Befehle, QT)
-
// Gegeben: int snake_x; // X-Pos der KI-Schlange int snake_y; // Y int p_x; // Der gewünschte Ort (neues zum Einsammeln) int p_y; int diff_x = p_x - snake_x; // Der Abstand zwischen Punkt und Schlange ( >0 -> Punkt ist rechts, <0 -> Punkt ist links ) int diff_y = p_y - snake_y; // ( >0 -> unten) if(abs(diff_x) > abs(diff_y)) // Der Abstand auf der X-Achse ist größer, also sollte die Schlange erstmal links/rechts fahren, nicht hoch/runter diff_x > 0 ? KI_gewuenschteRichtung = RECHTS : KI_gewuenschteRichtung = LINKS; else diff_y > 0 ? KI_gewuenschteRichtung = RUNTER : ,,,
-
Danke
else diff_y > 0 ? KI_gewuenschteRichtung = RUNTER : ,,,nur was sollen die drei Beistriche am Schluss
-
Ich schätze das bedeutet soviel wie Autocogito.
Bye, TGGC (Fakten)
-
TGGC schrieb:
life schrieb:
mit einem 0815 Wegfindungsalgorithmus kommste aber nicht weit, da die Hindernisse sich ja bei jeder Bewegung verändern.
Ist ja auch so schwer, wenn der Weg blockiert wird ihn neu zu berechnen...
Bye, TGGC (Fakten)
Dein berechneter Weg ist aber falsch. Das ist das Problem. Du fährst in eine Sackgasse und dann kannste soviel berechnen wie du willst, da kommste nimmer raus. Dein Wegfindungsalgorithmus muss schon berücksichtigen, dass Wege blockiert werden können bzw. neue Wege entstehen können, ansonsten kannste nicht sicherstellen, dass deine Schlange auch wirklich ihr Ziel erreicht..
Mal davon abgesehn ist natürlich der kürzeste Weg nicht immer der optimalste bei Snake.
-
life schrieb:
Dein berechneter Weg ist aber falsch.
Definiere falsch. Und noch besser: definiere richtig.
Bye, TGGC (Fakten)
-
TGGC schrieb:
life schrieb:
Dein berechneter Weg ist aber falsch.
Definiere falsch. Und noch besser: definiere richtig.
Bye, TGGC (Fakten)
Sorry.. Dachte wär die bekannt.. Also wenn man von Wegfindungsalgorithemn spricht meint man als optimalen Weg meist den kürzesten möglichen Weg. Dein gefundener Weg ist eben dies nicht, weil er nicht berücksichtigt, dass Blokaden verschwinden / erscheienen.
-
Du sagtest doch eben schon selbst, der Kürzeste ist nicht unbedingt der Optimale bei Snake.
Bye, TGGC (Fakten)
-
stimmt, aber immernoch optimaler als garkeiner ..
