Hallo ich habe versucht den A-Stern Algorithmus zu programmieren aber es klapt irgendwie nicht so wie ich es will. Denn er macht einfach nichts. Da her wollte ich wissen was ich falsch gemacht habe da ich durch den Debug modus auch nicht schau werde. Das ist warscheinlich auch nicht die smarteste Wariante.
Alles anzeigen
Ich hoffe ihr werdet daraus schau und überseht meine Rechtscheibfehler.
GML-Quellcode
- openh = 0
- closeh = 1
- open[0,0] = 0
- close[0,1] = argument0 // die X-Koortditane des start punktes ( Argumennt2 ist die des Ziels)
- close[0,2] = argument1 // die Y_Koordiante des start punktes ( Argumennt3 ist die des Ziels)
- close[0,3] = -1
- close[0,4] = 0
- find = false
- while (find == false){ //die Schleife
- for (i = 0; i > 4; i++){ //Schaut sich alle 4 nachbarn von dem letzten in der close list an
- add = true
- switch i{
- case 1:
- for (i = 0; i < closeh; i++){ //Schaut ob ein nachbar schon in der close lost ist
- if (open[i,1] = close[closeh,1]-1 and close[i,2] = close[closeh,2]){
- add = false
- }
- }
- for ( j = 0; j < closeh; j++){// schaut ob der nachbar schon in der open list ist
- if (close[j,1] = close[closeh,1]-1 and close[j,2] = close[closeh,2]){
- add = false
- }
- }
- if global.grid[close[closeh,1]-1,close[closeh,2]] > 10{ // Schaut ob das Feld begebar ist
- add = false
- }
- if close[closeh,1]-1 = argument2 and close[closeh,2] = argument3{ // schaut ob das Feld das Ziel Feld ist
- closeh += 1
- close[closeh,0] = close[closeh-1,0]+1 // der Wert des Felde
- close[closeh,1] = argument2 // die X-Koordinate
- close[closeh,2] = argument3 // die Y-Koordinate
- close[closeh,3] = closeh-1 // das Feld von dem man kam
- close[closeh,4] = close[closeh-1,4]+1 // der bisherige Weg wert
- find = true
- }
- if add = true{ // fügt das Feld der openlist hinzu
- openh += 1
- open[openh,1] = close[closeh,1]-1
- open[openh,2] = close[closeh,2]
- open[openh,3] = closeh
- open[openh,4] = close[closeh,4]+1
- open[openh,0] = open[openh,4]+1+abs(open[openh,1]-argument2)+abs(open[openh,2]-argument3)
- }
- break; // das gleiche für ein anderen Nachbarn
- case 2:
- for (i = 0; i < closeh; i++){
- if (open[i,1] = close[closeh,1]-1 and close[i,2] = close[closeh,2]){
- add = false
- }
- }
- for ( j = 0; j < closeh; j++){
- if (close[j,1] = close[closeh,1]-1 and close[j,2] = close[closeh,2]){
- add = false
- }
- }
- if global.grid[close[closeh,1]-1,close[closeh,2]] > 10{
- add = false
- }
- if close[closeh,1]-1 = argument2 and close[closeh,2] = argument3{
- closeh += 1
- close[closeh,0] = close[closeh-1,0]+1
- close[closeh,1] = argument2
- close[closeh,2] = argument3
- close[closeh,3] = closeh-1
- close[closeh,4] = close[closeh-1,4]+1
- find = true
- }
- if add = true{
- openh += 1
- open[openh,1] = close[closeh,1]-1
- open[openh,2] = close[closeh,2]
- open[openh,3] = closeh
- open[openh,4] = close[closeh,4]+1
- open[openh,0] = open[openh,4]+1+abs(open[openh,1]-argument2)+abs(open[openh,2]-argument3)
- }
- break;
- case 3:// das gleiche für ein anderen Nachbarn
- for (i = 0; i < closeh; i++){
- if (open[i,1] = close[closeh,1]-1 and close[i,2] = close[closeh,2]){
- add = false
- }
- }
- for ( j = 0; j < closeh; j++){
- if (close[j,1] = close[closeh,1]-1 and close[j,2] = close[closeh,2]){
- add = false
- }
- }
- if global.grid[close[closeh,1]-1,close[closeh,2]] > 10{
- add = false
- }
- if close[closeh,1]-1 = argument2 and close[closeh,2] = argument3{
- closeh += 1
- close[closeh,0] = close[closeh-1,0]+1
- close[closeh,1] = argument2
- close[closeh,2] = argument3
- close[closeh,3] = closeh-1
- close[closeh,4] = close[closeh-1,4]+1
- find = true
- }
- if add = true{
- openh += 1
- open[openh,1] = close[closeh,1]-1
- open[openh,2] = close[closeh,2]
- open[openh,3] = closeh
- open[openh,4] = close[closeh,4]+1
- open[openh,0] = open[openh,4]+1+abs(open[openh,1]-argument2)+abs(open[openh,2]-argument3)
- }
- break;
- case 4:// das gleiche für ein anderen Nachbarn
- for (i = 0; i < closeh; i++){
- if (open[i,1] = close[closeh,1]-1 and close[i,2] = close[closeh,2]){
- add = false
- }
- }
- for ( j = 0; j < closeh; j++){
- if (close[j,1] = close[closeh,1]-1 and close[j,2] = close[closeh,2]){
- add = false
- }
- }
- if global.grid[close[closeh,1]-1,close[closeh,2]] > 10{
- add = false
- }
- if close[closeh,1]-1 = argument2 and close[closeh,2] = argument3{
- closeh += 1
- close[closeh,0] = close[closeh-1,0]+1
- close[closeh,1] = argument2
- close[closeh,2] = argument3
- close[closeh,3] = closeh-1
- close[closeh,4] = close[closeh-1,4]+1
- find = true
- }
- if add = true{
- openh += 1
- open[openh,1] = close[closeh,1]-1
- open[openh,2] = close[closeh,2]
- open[openh,3] = closeh
- open[openh,4] = close[closeh,4]+1
- open[openh,0] = open[openh,4]+1+abs(open[openh,1]-argument2)+abs(open[openh,2]-argument3)
- }
- break;
- jt = 0
- for (i = 1; i < openh; i ++){
- if open[jt,1] > open[i,1]{ // schaut nach dem kleinsten Wert in der openlist
- jt = i
- }
- }
- closeh += 1 // fügt den kleinsten Wert der close list hinzu
- close[closeh,0] = open[jt,0]
- close[closeh,1] = open[jt,1]
- close[closeh,2] = open[jt,2]
- close[closeh,3] = open[jt,3]
- close[closeh,4] = open[jt,4]
- }
- }
- }
- if find = true{
- fal[0,0] = argument2 // setzt den Ziel punkt und den letzten in der close list als start punkt vom Pfad zum ziel
- fal[0,1] = argument3
- fal[1,0] = close[closeh,1]
- fal[1,1] = close[closeh,2]
- l = 1
- k = close[closeh,3]
- while !path = true{ // Folgt den Pfad rückwerts zum Startpunkt
- l += 1
- fal[i,0] = close[k,1]
- fal[i,1] = close[k,2]
- k = close[k,3]
- if fal[i,0] = argument0 and fal[i,1] = argument1{ // hat er den Start punkt erreicht?
- path = true
- }
- }
- }
Ich hoffe ihr werdet daraus schau und überseht meine Rechtscheibfehler.