Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-03-2005, 16:27   #1 (permalink)
mentally ill
 
Registriert seit: Aug 2004
Beiträge: 172
Rekursive Schleife

Hi,

bastel gerade ein Minesweeper klone und hab probleme bei der "Freiraum-aufdeckung".

hab diese funktion, welche für das übergebene Feld alle angrenzenden felder überprüft ob sie leer sind und wenn ja sie aufdeckt und ins return array schreibt. sie funktioniert auch super, nur komme ich jetzt bei der rekursiven schleifenprogrammierung nicht weiter, denn er soll mir alle zurückgegebenen felder wieder überprüfen.
PHP-Code:
// Freiraum-Aufdeckung
    
function FreeSpaces (strField) {
        
aTemp strField.split("_");
        
iX parseInt(aTemp[1]);
        
iY parseInt(aTemp[2]);

        
aNext = Array();
        
aNext[0] = aTemp[0] + "_" iX "_" + (iY 1);
        
aNext[1] = aTemp[0] + "_" + (iX 1) + "_" + (iY 1);
        
aNext[2] = aTemp[0] + "_" + (iX 1) + "_" iY;
        
aNext[3] = aTemp[0] + "_" + (iX 1) + "_" + (iY 1);
        
aNext[4] = aTemp[0] + "_" iX "_" + (iY 1);
        
aNext[5] = aTemp[0] + "_" + (iX 1) + "_" + (iY 1);
        
aNext[6] = aTemp[0] + "_" + (iX 1) + "_" iY;
        
aNext[7] = aTemp[0] + "_" + (iX 1) + "_" + (iY 1);
        
        
aFree = new Array();
        
        
_root[strField][strField "_cover"].removeMovieClip();
        
        
        for(
0<= 7i++) {
            if(
_root[aNext[i]][aNext[i] + "_cover"].getDepth() == && _root[aNext[i]][aNext[i] + "_text"].text == 0) {
                
_root[aNext[i]][aNext[i] + "_cover"].removeMovieClip();
                
aFree.push(aNext[i]);
            }
        }
        return 
aFree;
    } 

dachte ich löse das so:

PHP-Code:
//decke alle angrenzenden leeren Felder auf
aFree _root.FreeSpaces(strField);
iCountFree aFree.length;
for (
0iCountFreei++) {
    
aFreeTemp _root.FreeSpaces(aFree[i]);
    for (
0aFreeTemp.lengtha++) {
        
aFree.push(aFreeTemp[a]);
    }
    
iCountFree aFree.length;

aber da crasht flash immer...

grüße
markus
__________________
there is no place like 127.0.0.1
--------------------------------------------------
[STUFF] E-Mail Liste für Newsletter o.ä.
[STUFF] MySQLConnector Klasse
menty ist offline   Mit Zitat antworten
Alt 13-03-2005, 17:06   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
??
was genau geht, und was geht nicht?
Das aufdecken klappt, aber was willst du danach machen??

Ich würde vielleicht das Feld eher aus einem 2D-Array aufbauen, ich denke, das wäre eleganter...
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 13-03-2005, 17:51   #3 (permalink)
poke
 
Registriert seit: Dec 2002
Ort: Iserlohn [NRW]
Beiträge: 2.304
ich denke, du erreichst in Flash eine unendlichkeit mit deiner schleife.. weiß zwar grad nicht, warum, aber wenn du schon rekursiv arbeiten möchtest, dann tu das auch richtig und schreib den Funktionsaufruf in die Funktion rein.


also so anstatt die Felder zurückzugeben sie einfach sofort zu überprüfen. dann hast du keine probleme mit arrays und schleifen.
ActionScript:
  1. for(i = 0; i <= 7; i++) {
  2.             if(_root[aNext[i]][aNext[i] + "_cover"].getDepth() == 2 && _root[aNext[i]][aNext[i] + "_text"].text == 0) {
  3.                 _root[aNext[i]][aNext[i] + "_cover"].removeMovieClip();
  4.                 FreeSpaces( aNext[i] );
  5.             }
  6.         }

evtl. reicht das ja schon
pokepika ist offline   Mit Zitat antworten
Alt 14-03-2005, 08:47   #4 (permalink)
mentally ill
 
Registriert seit: Aug 2004
Beiträge: 172
hi,

@pokepika:
danke für den tipp, evt. reicht das ja wirklich
werde das heute abend mal ausprobieren und das ergebnis dann posten.

@Janoscharlipp:
die aus sich selbst herausaufrufende schleife funktioniert nicht. er soll für das übergebene feld(auf welches geklickt wurde) die FreeSpaces Funktion aufrufen und alle 8 felder drumrum auf leerstelle prüfen. wenn sie eine ist, soll er das feld aufdecken und wieder FreeSpaces aufrufen, allerdings diesmal mit dem dem Feld, welches gerade aufgedeckt wurde. u.s.w.

hab ein 2D Array am anfang meines Codes(aMineField[y][x]), worin die werte der felder gespeichert sind. aber ob ich nun vom aktuellen feld die bezeichnung zersplitter und dann wieder für das aktuelle feld zusammen baue, oder ob ich erst das feld aus dem array suche und dann das array prüfe und danach die bezeichnung wieder zusammen setzte ist sinnfrei.
(hab schon mehrere varianten durchprobiert)

das aufdecken funzt ja auch, nur halt der automatismus nicht...

grüße
markus
__________________
there is no place like 127.0.0.1
--------------------------------------------------
[STUFF] E-Mail Liste für Newsletter o.ä.
[STUFF] MySQLConnector Klasse
menty ist offline   Mit Zitat antworten
Alt 15-03-2005, 08:50   #5 (permalink)
mentally ill
 
Registriert seit: Aug 2004
Beiträge: 172
morgen

die programmierung der rekursiven schleife geht vorran.
danke für die hilfe. leider steckt der teufel im detail, die funktion ruft sich selbst zwar auf, aber nur partiziell. sprich er deckt nur teile der eigentlichen freifläche auf. klicke ich dann auf ein angrenzendes feld, welches ebendfalls leer ist, gehts wieder ein stück weiter.

muß meine aufdeck funktion nochmal überdenken.

grüße
markus
__________________
there is no place like 127.0.0.1
--------------------------------------------------
[STUFF] E-Mail Liste für Newsletter o.ä.
[STUFF] MySQLConnector Klasse
menty ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 06:13 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele