Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-11-2005, 15:32   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
array nach anliegenden gleichen werten parsen

Hi,

ich habe eine Array:

PHP-Code:
arr = [["n","e","s","n","e","e","e"],
       [
"n","n","n","n","e","n","e"],
       [
"s","s","s","n","e","e","e"],
       [
"s","n","n","n","n","n","n"],
       [
"s","n","s","s","s","s","n"]]; 
Nehmen wir an - meine Startposition ist arr[2][3].
Diese Position ist ein "n". Ich will jetzt ab dieser Position
das Array durchparsen, ob links,rechts, über oder unter
dem "n" der nächste Buchstabe wieder ein "n" ist.

Ist das so sollen alle "n" in "x" geändert werden.

Im oberen Array wäre z.B. die Position arr[1][5] zwar ein
"n", welches aber nicht zu einem x werden dürfte, da es
ausgehend von der startposition arr[2][3] keine "n´s" neben
sich hätte sonder ´umzingelt´ von "e" ist.

Kann mir dabei jemand helfen eine feine Funktion dafür
zu entwickeln?


Danke für eure Hilfe.
arrFoo
arrFoo ist offline   Mit Zitat antworten
Alt 06-11-2005, 15:43   #2 (permalink)
Flash-Noob
 
Benutzerbild von deskounlmtd
 
Registriert seit: Aug 2003
Beiträge: 594
Genau was für janoshnosh?
deskounlmtd ist offline   Mit Zitat antworten
Alt 06-11-2005, 15:44   #3 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hallo!
Ist doch recht einfach:
PHP-Code:
function suchen(ab) {
    if (
arr[a-1][b] == "n") {
        
trace("n oben");
        
arr[a][b-1] = "x"
    
}
    if (
arr[a+1][b] == "n") {
        
trace("n unten");
        
arr[a+1][b] = "x"
    
}
    if (
arr[a][b+1] == "n") {
        
trace("n rechts");
        
arr[a][b+1] = "x"
    
}
    if (
arr[a][b-1] == "n") {
        
trace("n links");
        
arr[a][b-1] = x
    
}
}
suchen(2,3
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 06-11-2005, 15:53   #4 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
ja, auf deine art und weise bekomme ich aber nur
die 1´ten direkt umliegenden "n´s" mit. diese n´s haben
aber wieder direkt anliegende n´s, die will ich auch
noch in "x" umwandeln.

d.h., das wenn links z.b. ein n ist und daneben
wieder eines und dann darunter wieder eines das alle zu
einem x werden, sofern sie oben,links,rechts oder unten ein
n um sich haben - ausgehend von arr[2][3].

kann man doch bestimmt einen algorithmus für entwickeln?


arrFoo
arrFoo ist offline   Mit Zitat antworten
Alt 06-11-2005, 15:56   #5 (permalink)
:Void
 
Benutzerbild von janoshnosh
 
Registriert seit: Jun 2005
Ort: börlin
Beiträge: 931
hi,
ich habe zwar anfänglich gar nicht verstanden was du meinst, vermute aber, das richtige getroffen zu haben. rekursion ist das stichwort:
PHP-Code:
arr = [["n","e","s","n","e","e","e"],
       [
"n","n","n","n","e","n","e"],
       [
"s","s","s","n","e","e","e"],
       [
"s","n","n","n","n","n","n"],
       [
"s","n","s","s","s","s","n"]];  

checkArr (2,3'n''x');

function 
checkArr (x:Numbery:Numbera:Stringr:String) {
    
    if (
arr[x][y] == a) {
        
arr[x][y] = r;
        
        
checkArr ((x-1), yar);
        
checkArr ((x+1), yar);
        
checkArr (x, (y-1), ar);
        
checkArr (x, (y+1), ar);
        
    }
    
traceArr(arr);
    
}


function 
traceArr (a:Array) {
    for (var 
i=0i<a.lengthi++) {
        
trace(a[i]);
    }

gruß janosch


EDIT:
lol danjiel, so ists

Geändert von janoshnosh (06-11-2005 um 15:57 Uhr)
janoshnosh ist offline   Mit Zitat antworten
Alt 06-11-2005, 15:56   #6 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
PHP-Code:
function suchen(ab) { 
    if (
arr[a-1][b] == "n") { 
        
trace("n oben"); 
        
arr[a][b-1] = "x" 
        
suchen(a,b-1)
    } 
    if (
arr[a+1][b] == "n") { 
        
trace("n unten"); 
        
arr[a+1][b] = "x" 
        
suchen(a+1,b)
    } 
    if (
arr[a][b+1] == "n") { 
        
trace("n rechts"); 
        
arr[a][b+1] = "x" 
        
suchen(a,b+1)
    } 
    if (
arr[a][b-1] == "n") { 
        
trace("n links"); 
        
arr[a][b-1] = 
        suchen
(a,b-1)
    } 

suchen(2,3
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 06-11-2005, 16:03   #7 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
@janoshnosh

Deine Methode bringt mit über 256 Rekursionen den Player
zum Absturz.

@Der Frager,

das geht nur zum Teil richtig oder?


?arrFoo
arrFoo ist offline   Mit Zitat antworten
Alt 06-11-2005, 16:07   #8 (permalink)
:Void
 
Benutzerbild von janoshnosh
 
Registriert seit: Jun 2005
Ort: börlin
Beiträge: 931
das bringt nur den rechner zum absturz, wenn du falsche parameter benutzt, denn es wird ja nur auf gleichheit überprüft und bei gleichheit geändert, also irgendwann gibts keine gleichheit mehr - wie groß ist denn dein array? kann sein, dass es auch wegen zu großen arrays abstürzt...?

mit deinem geposteten array geht es doch aber? bei mir gings mit dem code, genau so wie er oben steht.

gruß janosch
janoshnosh ist offline   Mit Zitat antworten
Alt 06-11-2005, 16:11   #9 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
@janoshnosh

meine array ist so, wie ich es oben angebe. Deine Methode
eingesetzt bringt bei mir den Player zum rauchen.

@Der Frager
Bei Deiner Methode werden alle "n´s" rechts,unter und links
von arr[2][3] korrekt in "x" umgewandelt. Das "n" und die
weiteren "n´s" die in den Reihen darüber direkt anliegen werden,
nicht berücksichtigt - sollten sie aber?

?arrFoo
arrFoo ist offline   Mit Zitat antworten
Alt 06-11-2005, 16:12   #10 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hatte mich vertippt:
PHP-Code:
arr = [["n""e""s""n""e""e""e"], ["n""n""n""n""e""n""e"], ["s""s""s""n""e""e""e"], ["s""n""n""n""n""n""n"], ["s""n""s""s""s""s""n"]];
function 
suchen(ab) {
    if (
arr[a-1][b] == "n") {
        
arr[a-1][b] = "x";
        
suchen(a-1b);
    }
    if (
arr[a+1][b] == "n") {
        
arr[a+1][b] = "x";
        
suchen(a+1b);
    }
    if (
arr[a][b+1] == "n") {
        
arr[a][b+1] = "x";
        
suchen(ab+1);
    }
    if (
arr[a][b-1] == "n") {
        
arr[a][b-1] = x;
        
suchen(ab-1);
    }
}
for (var 
0x<5x++) {
    
trace(arr[x]);
}
trace("-------------------")
suchen(23);
for (var 
0x<5x++) {
    
trace(arr[x]);

...und das andere Script tut's auch

edit: Ist aber AS 2.0
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++

Geändert von Der Frager (06-11-2005 um 16:14 Uhr)
Der Frager ist offline   Mit Zitat antworten
Alt 06-11-2005, 16:14   #11 (permalink)
:Void
 
Benutzerbild von janoshnosh
 
Registriert seit: Jun 2005
Ort: börlin
Beiträge: 931
Code:
x,e,s,x,e,e,e
x,x,x,x,e,n,e
s,s,s,x,e,e,e
s,x,x,x,x,x,x
s,x,s,s,s,s,x
ist mein ergebnis, frisch aus dem flash mx 2004 pro output-fenster, den oben geposteten code benutzt (und nichts anderes!)
janoshnosh ist offline   Mit Zitat antworten
Alt 06-11-2005, 16:22   #12 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
Klasse - es klappt - pure Begeisterung und
besten Dank.

arrFoo
arrFoo 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 11:11 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele