hi,
Martin Altmann hat geschrieben:
Jimmy,
nur über ein Konstrukt nach dem folgenden Schema:
Tja sowas hatte ich befürchtet. Ich hab nun sowas
Code: Alles auswählen
aLogic := { { WR_UP ,0} ,;
{ WR_RIGHT,0} ,;
{ WR_DOWN ,0} ,;
{ WR_LEFT ,0} }
iMax := LEN(aNextWay)
FOR i:= 1 TO iMax
TestWay := aNextWay[i,2]
DO CASE
CASE TestWay = WR_UP ; aLogic[WR_UP ,2]++
CASE TestWay = WR_RIGHT ; aLogic[WR_RIGHT,2]++
CASE TestWay = WR_DOWN ; aLogic[WR_DOWN ,2]++
CASE TestWay = WR_LEFT ; aLogic[WR_LEFT ,2]++
ENDCASE
NEXT
also auch "nur" ein Zähler in einer FOR / NEXT "Schleife" ...
Aber ich hab in meinen Fall nun wieder "Logic" ansetzten können
Code: Alles auswählen
iMax := LEN(aLogic)
IF iMax > 0
//
// old Direction
//
TestWay := ::nDirection
//
// oppsite Way
//
TestWay := TestWay+2
IF TestWay > 4
TestWay := TestWay-4
ENDIF
//
// remove "go back"
//
iMax := LEN(aLogic)
FOR i := iMax TO 1 STEP -1
IF aLogic[i,1] = TestWay
AREMOVE(aLogic,i)
ENDIF
NEXT
durch das AREMOVE() konnte ich nun alle aus dem Array entfernen die
"zurück laufen" und somit habe ich in meinem Demo z.Z. nur noch eine
Richtung (der Rest wurde vorher "ausgefiltert").
Nun muss ich mal ein anderes Layout wählen um zu sehen wie er dann
reagiert aber das Prinzip (scheint) zu funktionieren !!!
Was mich nun interessieren würde wäre der "ganze Weg" durch das
Labyrinth den z.Z, "denke" ich nur 2 Schritte vorraus.
Da das ganze nun mit Arrays, ASCAN() und ASORT() läuft hatte ich den
Thread angefangen den meine 2 Schritte sind noch "procedural" und ich
müsste es recusive machen deshalb das "schachteln".
Ich werde mal versuchen das ganze jetzt recusive zu machen und werde
zwecks optimierung dann wiede damit ankommen. Gerade bei recursiven
Functionen macht das sicherlich viel aus.
*** Gedankensprung ***
Auch denke ich statt "procedural" könnte man vielleicht je einen Thread
für eine "neuen Weg" starten damit Xbase++ gleichzeitg "rechts" und
"links" durch suchen werden kann...
Frage : wieviele Thread hab ihr bislang max. laufen lassen ?
... ich bin mir nicht sicher wie gross der "Suchbaum" wird und ob ich max
13*4*10*4 Threads gleichzeigt laufen lassen kann
*** eof ***
ok nun zurück : ASORT() haben wir nun hier gehört aber wie könnte man
recursive den Code von Martin für ASCAN() erweitern ?
Code: Alles auswählen
aEval(::aArray2, { |x| iif( ( x[1] == ::aArray1[nPos1,1]) .AND. ;
( x[2] == ::aArray1[nPos1,2] ),;
aadd( ::aResult, x[3]), ) } )
RETURN ::aResult
Das Ergebniss eines ASCAN soll der nStart Wert des nächsten Arrays sein
deshalb denke ich an recursive
... oder sollte ich mir den Codeblock als String zusammen stellen und den
dann AEVAL(en) ?