Kollisionsabfrage gesucht [c].
-
Hallo.
Ich habe hier einen kleinen Ausschnitt aus meinen Programm.#include <stdio.h> #include <windows.h> #include <time.h> int locate(y,x) { HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD xy; xy.Y = y; xy.X = x; SetConsoleCursorPosition(stdOut,xy); return 0; } struct feindstruktur { int x; int y; struct feindstruktur *next; }; struct feindstruktur *feindnull = NULL; struct feindstruktur *feind; void add(int y, int x) { struct feindstruktur *mann = (struct feindstruktur *) malloc(sizeof(struct feindstruktur)); mann->x = x; mann->y = y; mann->next = feindnull; feindnull = mann; } int main() { int i; srand(time(0)); for(i=0;i<90;i++) { add(rand()%24,rand()%79); // Hier werden 90 zufällig platzierte "." erzeugt. } do { system("cls"); feind = feindnull; while(feind) { locate(feind->y, feind->x); printf("."); // Mit locate(y,x); wird der Cursor an eine // zufällige Position des Bildschirms gesetzt. // Anschließend wird der Punkt gemalt. if(feind->x > 40) feind->x--; if(feind->x < 40) feind->x++; if(feind->y > 12) feind->y--; if(feind->y < 12) feind->y++; // HIer wird jeder Punkt einen Schritt näher // zur Mitte gesetzt. feind = feind->next; } locate(12,40);printf("%c",1); } while(!kbhit()); }Alle 90 Punkte soll in die Mitte.
Aber sie sollen alle kollidieren und nicht übereinander laufen....
Wie kann ich das realisieren??Falls jemand mir Denkanstöße geben kann, oder ein kleines beispiel oben reinschreiben kann, wäre ich ihm sehr dankbar.
Gruß michael
-
Alle Punkte durchlaufen und abfragen ob an der Stelle wo der aktuelle Pkt hin soll schon einer vorhanden ist.
Entweder du läufst eben alle punkte durch oder machst für das ganze "Spielfeld" ein bool 2D Feld und wenn an einer stelle ein pkt is dann setzt du den wert für die koordinate auf true..ansonsten auf false
So müsstest du nicht jedes mal alle pkt durchlaufen, dafür kostets mehr Speicher.
-
mhh... danke für den tipp..
ich habs aber aufgegeben, und mir nen weg-such algo gebaut.
Denn den punkt in der mitte sollte man bewegen können, und da müssen evtl die anderen punkte zurückweichen.