Rekursion
Übersicht

![]() |
The YetiBetreff: Rekursion |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das hier soll eigentlich ein Karo malen (brauch ich für ne Bewegung, also wundert euch nicht über die umständliche Art und Weise ![]() Code: [AUSKLAPPEN] Graphics 1024,768,16,2
Global Basebild=LoadImage("Graphics/Base.PNG") Global bewegungsbild=CreateImage (401,401) Function move(px,py,x,y,counter) If counter<200 Plot x,y If Not ImageRectCollide(bewegungsbild,0,0,0,x,y+1,1,1) Then move(0,0,x,y+1,counter+1) If Not ImageRectCollide(bewegungsbild,0,0,0,x,y-1,1,1) Then move(0,0,x,y-1,counter+1) If Not ImageRectCollide(bewegungsbild,0,0,0,x+1,y,1,1) Then move(0,0,x+1,y,counter+1) If Not ImageRectCollide(bewegungsbild,0,0,0,x-1,y,1,1) Then move(0,0,x-1,y,counter+1) EndIf If counter=0 DrawImage Basebild, x-20, y-20 SetBuffer BackBuffer() DrawImage bewegungsbild,px-200,py-200 EndIf End Function Repeat Cls WaitMouse SetBuffer ImageBuffer(bewegungsbild) Cls move(MouseX(),MouseY(),200,200,counter) Flip Until KeyHit(1) End EDIT: Hab´s jetzt anders (besser) gemacht. Interesse, was falsch war, ahb ich aber immer noch ![]() |
||
sdjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bei meinem Überflug des Textes fand ich keine Endbedingung.
Rekursionen sollten auch irgendwann aufhören ^^. |
||
![]() |
The Yeti |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Ding hört auf, sich weiter selbst abzurufen, wenn counter>199. | ||
zocker2150 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HI,
(falls das der vollständige code ist...) ich würde counter einen startwert geben. Code: [AUSKLAPPEN] Function move(px,py,x,y,counter)
If counter<200 Then <--- Then würde ich hier mal reinmachen (End If dann nicht vergessen). Dann seh ich noch ein Problem mit Code: [AUSKLAPPEN] If Not ImageRectCollide(bewegungsbild,0,0,0,x,y+1,1,1) Then move(0,0,x,y+1,counter+1)
das bedeutet ja, das er so lange runterläuft (y+1), bis eine Kollision stattfindet. Wenn dem nicht der fall ist läuft der counter bis 199 und er geht aus der Funktion. Die anderen prüft er ja solange nicht. Müsste man mal mit dem Debuger nachschauen aber ich bin mit fast sicher, das er gleich aus der Funktion raussprinkt und sich selber wieder aufruft. Dann geht das Hauptprogramm weiter mit... Code: [AUSKLAPPEN] move(MouseX(),MouseY(),200,200,counter)
...was dann keinen Sinn mehr machen kann weil "counter" schon 199 ist. Hoffe ich konnte helfen ![]() |
||
![]() |
Blatolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mach den counter global und übergib ihn nicht als parameter.
Im main loop als 5. parameter counter zu übergeben ist sinnlos da diese variable immer 0 ist da sie nicht global ist. Denn sonst wird die funktion 4^200 mal aufgerufen, wenn jedes mal die funktion 4 mal aufgerufen wird. Und das ist natürlich klar dass der speicher überlastet wird. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group