Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-11-2005, 08:32   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
2d array aktualisieren.

hallo zusammen,

ich habe folgendes array:

Code:
var cG:Array = [["tmp","tmp", "tmp", "y", "y", "b", "b", "g", "g"], 
		      ["tmp","y", "tmp", "y", "g", "g", "r", "r","tmp"],
		      ["tmp","tmp", "tmp", "r", "r", "r", "r", "r","y"],
		      ["tmp","b", "b", "y", "g", "g", "r", "b","tmp"],
		      ["tmp","r", "b", "b", "b", "b", "r", "r","r"]];
Der Wert an Position cG[1][1]= "y" ist ringsum (oben, unten, links, rechts)
von "tmp"-Werten umschlossen, deswegen soll er auch zu "tmp" werden.

Das wie folgt:

Code:
Array.prototype.clean = function() {
	
var i: Number = this.length, j: Number;

	while(--i) {
		j = this[i].length;
		if (i > 3) {
			while(j--) {
				if ( this[i][j] == "tmp" ) {
					if ( this[i][j-2] == "tmp" ) {
						if ( this[i][j-1] != "tmp" ) {
							if ( this[i-1][j-1] == "tmp" && this[i+1][j-1] == "tmp" ) {
								this[i][j-1] = "tmp";
							}
						}
					}
				}
			}
		}
	}
	
}
Es gibt aber auch folgenden Fall (wird es geben), bsp:

Code:
var cG:Array = [["tmp","tmp", "tmp", "tmp", "tmp", "b", "b", "g", "g"], 
		      ["tmp","y", "y", "y", "tmp", "g", "r", "r","tmp"],
		      ["tmp","tmp", "tmp", "tmp", "tmp", "r", "r", "r","y"],
		      ["tmp","b", "b", "y", "g", "g", "r", "b","tmp"],
		      ["tmp","r", "b", "b", "b", "b", "r", "r","r"]];
Jetzt werden gleich mehrere "y"-Werte (nämlich cG[1][1],cG[1][2],cG[1][3])
von allen Seiten von "tmp"-Werten eingeschlossen. In diesem Fall sollen auch
diese "y" zu "tmp" Werten werden...

Habe da noch keinen wirklichen Plan die o.g. Funktion dahingehend zu
erweitern?

???
arrFoo
arrFoo ist offline   Mit Zitat antworten
Alt 24-11-2005, 13:17   #2 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
keiner ´ne idee?
arrFoo ist offline   Mit Zitat antworten
Alt 24-11-2005, 13:45   #3 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
ist knifflig, deine Frage... vor allem die zweite... werde mich aber nachher mal dahinterhocken und gucken, ob ich was finde...!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 24-11-2005, 15:19   #4 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Hier, schnell was runtergehackt, ist aber noch nicht fertig, habe nur erstmal keine Zeit weiterzumachen. Evtl. heute Abend kann ich es fertig machen.
Sobald du Ringe von Feldern baust, kommt es in eine Endlosschleife.
PHP-Code:
map = [
    [
00000],
    [
00000],
    [
00100],
    [
00100],
    [
00000],
    [
00000]
];

function 
enclosed(mapxyborderValueoldXoldY)
{
    var 
maxX map[0].length;
    var 
maxY map.length;
    
    var 
neighbours = [
        {
x: -1y:  0},
        {
x:  1y:  0},
        {
x:  0y: -1},
        {
x:  0y:  1}
    ];
    
    var 
i;
    var 
neighbours.length;
    
    var 
newX;
    var 
newY;
    
    var 
ownValue map[y][x];
    var 
newValue;
    
    for (
0li++) {
        
newX neighbours[i].x;
        
newY neighbours[i].y;
        
        
// verhindere, zu dem Feld zurückzugehen, von dem man kommt
        
if ((newX == oldX) && (newY == oldY)) {
            
trace("backfield");
            continue;
        }
        
        
// verhindere Zugriffe außerhalb des Arrays
        
if ((newX 0) || (newX >= maxX) || (newY 0) || (newY >= maxY)) {
            
trace("außerhalb");
            continue; 
// oder return false, wenn die Umgebung geschlossen sein muss
        
}
        
        
newValue map[newY][newX];
            
        if (
newValue == borderValue) {
            
// ok
        
} else if (newValue == ownValue) {
            
// ein Geschwisterfeld => weiter gehts
            
if (!enclosed(mapnewXnewYborderValuexy)) {
                return 
false;
            }
        } else {
            
// das war wohl nichts
            
return false;
        }
    }
    
    return 
true;
}

trace(enclosed(map220)); 
EDIT: AS-Tags werden noch nicht gerendert, deshalb PHP
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 24-11-2005, 15:57   #5 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
hmmm...

das hat bei mir noch nicht ganz gefunzt...
Du aktualisierst jetzt noch nicht das vorhandene Array - richtig?

???
arrFoo

Geändert von arrFoo (24-11-2005 um 16:04 Uhr)
arrFoo ist offline   Mit Zitat antworten
Alt 24-11-2005, 15:59   #6 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Was geht nicht?
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 24-11-2005, 16:04   #7 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
Du aktualisierst jetzt noch nicht das vorhandene Array - richtig?

???
arrFoo
arrFoo ist offline   Mit Zitat antworten
Alt 24-11-2005, 16:06   #8 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Ähh, ups, stimmt.
Musst du eben mitschreiben, welche Felder evtl. geändert werden müssen. Da musst du dir was geschicktes überlegen, da solche Kommunikation (innere Funktionen müssen das ihreren Aufrufern mitteilen) bei rekursiven Abläufen etwas schwierig werden können. Vielleicht bastelt dir das ja jemand anders, ansonsten wie gesagt später.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 24-11-2005, 16:09   #9 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
später ist ok - ist nichts öffentliches o.ä.
arrFoo ist offline   Mit Zitat antworten
Alt 24-11-2005, 16:40   #10 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
*grrr* so ist das mit diesen Sachen, lassen einen einfach nicht los …

PHP-Code:
map = [
    [
00000],
    [
00000],
    [
00110],
    [
21010],
    [
01110],
    [
00000]
];

function 
saveVisited(xyvisited)
{
    if (
visited == null) {
        
visited = new Array();
    }
    
    if (
visited[y] == null) {
        
visited[y] = new Array();
    }
    
    
visited[y][x] = true;
    
    return 
visited;
}

function 
getEnclosedFields(mapxyborderValuevisitedenclosed)
{
    
visited saveVisited(xyvisited);
    
    if (
enclosed == null) {
        
enclosed = new Array();
    }
    
    var 
maxX map[0].length;
    var 
maxY map.length;
    
    var 
neighbours = [
        {
x: -1y:  0},
        {
x:  1y:  0},
        {
x:  0y: -1},
        {
x:  0y:  1}
    ];
    
    var 
i;
    var 
neighbours.length;
    
    var 
newX;
    var 
newY;
    
    var 
ownValue map[y][x];
    var 
newValue;
    
    for (
0li++) {
        
newX neighbours[i].x;
        
newY neighbours[i].y;
        
        
// verhindere, auf bereits besuchte Felder zurück zu laufen
        
if (visited[newY][newX]) {
            continue;
        }
        
        
// verhindere Zugriffe außerhalb des Arrays
        
if ((newX 0) || (newX >= maxX) || (newY 0) || (newY >= maxY)) {
            
// das bewirkt, dass der Rand als Grenze interpretiert wird
            
continue;
            
            
// das würde bedeuten, dass der Rand als offen interpretiert wird
            // return (new Array());
        
}
        
        
newValue map[newY][newX];
            
        if (
newValue == borderValue) {
            
// ok
        
} else if (newValue == ownValue) {
            
// ein Geschwisterfeld => weiter gehts
            // Zuweisung muss nicht sein (Array wird als Referenz übergeben)
            // nur der Übersichtlichkeit wegen
            
enclosed getEnclosedFields(mapnewXnewYborderValuevisitedenclosed);
            
            
// das Feld führte in die Freiheit
            
if (enclosed.length == 0) {
                return (new Array());
            }
        } else {
            
// das war wohl nichts, dieses Feld ist offen (bzw. kein Rand)
            
return (new Array());
        }
    }
    
    
enclosed.push({xxyy});
    
    return 
enclosed;
}

// speichert value in alle in fields aufgelisteten Felder von map
function setFields(mapfieldsvalue)
{
    var 
i;
    var 
fields.length;
    
    for (
0li++) {
        
map[fields[i].y][fields[i].x] = value;
    }
}

enclosed getEnclosedFields(map220);

setFields(mapenclosed0); 
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 24-11-2005, 19:31   #11 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
...das scheint echt super zu klappen!!!

danke soweit
arrFoo
arrFoo ist offline   Mit Zitat antworten
Alt 24-11-2005, 19:35   #12 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Dazu hätte man nicht nochn Thread aufmachen müssen...einfach mal nen Arsch in der Hose haben...

LinK:array entsprechend updaten.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 24-11-2005, 20:03   #13 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 53
nachdem ihr da soooo freundlich wart

aber nun gut - mein fehler,
hätte man auch dort weitermachen können
und sich weiter anpöbeln lassen...
arrFoo ist offline   Mit Zitat antworten
Alt 24-11-2005, 20:06   #14 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Na, ...also angepöbelt hat dich da keiner.

Bloss wenn man solche Beiträge liest und man selber nichts vorlegt kommt das nicht so gut an...
__________________
ERROR: Signature is too large
rendner[i] 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 20:52 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele