ich habe mir dein Zip-Paket mal runtergeladen und ausprobiert.
Deinen beschriebenen Fehler kann ich nicht nachvollziehen. Obwohl deine roten Sprites im Quelltext verwendet werden, d.h. sie sind nicht
auskommentiert, gibt es bei mir kein weißes Fenster. Ich habe viele Male das Programm gestartet und jedesmal hat es den Hintergrund
komplett gezeichnet und dann einen Weg eingezeichnet. (Ich habe XP / SP3).
Ein Mangel besteht: Liegen Start und Ziel nicht auf derselben Zeile (StartY <> ZielY), dann werden sie vom Weg überzeichnet und sind
nicht mehr zu sehen.
In der Procedure StartZiel():
Code: Alles auswählen
If Not StartX=0 Or StartX=15
(Not hat eine höhere Priorität als Or, nachzulesen in der Hilfe unter "Variablen, Typen und Operatoren"). Ich weiß nicht, ob du das so
wolltest.
Wenn ja, dann wäre es so einfacher:
Code: Alles auswählen
If StartX > 0
Code: Alles auswählen
Procedure BackGround() ; Schleife zum Zeichnen des Hintergrundes
For x = 0 To 16
For y =0 To 12
DisplaySprite(1,64*x,64*y)
Hier ein Vorschlag, wie ich den Weg zeichnen würde. Die Prozeduren Wegfindung1, Wegfindung2 und Wegfindung3 wären zu löschen.
Die Prozedur Wegfindung zeichnet den Weg bei beliebigem Start/Ziel.
Code: Alles auswählen
Procedure WegFindung() ; Findet den direkten Weg vom Start zum Ziel
StartDrawing(ScreenOutput())
deltaX = ZielX - StartX : SchrittX = Sign(deltaX)
deltaY = ZielY - StartY : SchrittY = Sign(deltaY)
WegX = StartX
WegY = StartY
If Abs(deltaX) >= 2 ; zeichne horizontalen Weg
WegX + SchrittX
While WegX <> ZielX
DisplaySprite(2, WegX * 64, WegY * 64)
WegX + SchrittX
Wend
WegX - SchrittX ; Korrektur, falls Kurve erforderlich
EndIf
If Abs(deltaX) >= 1 And Abs(deltaY) >= 1 ; zeichne Kurve
WegX + SchrittX
If deltaX > 0
If deltaY > 0 : Kurve = 4 : Else : Kurve = 5 : EndIf
Else
If deltaY > 0 : Kurve = 6 : Else : Kurve = 7 : EndIf
EndIf
DisplaySprite(Kurve, WegX * 64, WegY * 64)
EndIf
If Abs(deltaY) >= 2 ; zeichne vertikalen Weg
WegY + SchrittY
While WegY <> ZielY
DisplaySprite(3, WegX * 64, WegY * 64)
WegY + SchrittY
Wend
EndIf
StopDrawing()
FlipBuffers()
EndProcedure
z.B. dem A*-Algorithmus, nicht vorbeikommen.
Das waren aber nur Optimierungsvorschläge. Dein eigentliches Problem tritt leider (zum Glück) bei mir nicht auf.
Edit:
Deine neuere Version StartZiel() startet ja nur, wenn StartX = ZielX und StartY = ZielY ist:
Code: Alles auswählen
Procedure StartZiel() ; Findet einen Zufälligen Start und Zielpunkt
While StartX=ZielX And StartY=ZielY
Code: Alles auswählen
Repeat
; hier Start und Ziel berechnen
Until StartX <> ZielX Or StartY <> ZielY