2D array aus rects

U

UchihaSevenfold

Neues Mitglied
0
hey hey

ich hab da ein Problem und zwar wollte ich mit einem 2d array aus rects eine art schachbrettmuster erstellen und jedes rect soll eine andere farbe bekommen. ich hab schon rum gegoogelt aber ich find dazu irgendwie nichts das ich jedem rect eine farbe zuteilen kann.

kann mir dabei vll jemand helfen meine versuche schlagen alle fehl =(

liebe grüße
uchiha
 
Hallo,

habe hier einen kleinen Ausschnitt aus meinem Spiel, wenn du dich damit ein bisschen beschäftigst, solltest du recht schnell einen Ansatz bekommen, wie so was gemacht werden kann. :)

Vorweg: der Code hat die Funktion von einem Bauplan. Es wird eine Map ausgewählt und die wird dann gebaut. Beispiel 4 (fett-markiert) sollte genau das sein was du brauchst...

Code:
/** MAP_00 [18] (MAP -> =    zwei Linien mittig bis an Rand) */
    public void getMap_00() {
        x = 10;
        y = 45;
        int i;
        for (i = 0; i < 18; i++) {
            if (i % 9 == 0 && i != 0) {
                y += 10;
                x = 10;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            x += 10;
        }
        Log.d("[MAP] getMap_00", " hat " + i + " Bloecke erzeugt.");
    }

    /** MAP_01 [9] (MAP -> /    Balken von links unten nach rechts oben) */
    public void getMap_01() {
        x = 0;
        y = 100;
        int i;
        for (i = 0; i < 9; i++) {
            x += 10;
            y -= 10;
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
        }
        Log.d("[MAP] getMap_01", " hat " + i + " Bloecke erzeugt.");
    }

    /** MAP_02 [9] (MAP -> \    Balken von links oben nach rechts unten) */
    public void getMap_02() {
        //
        x = 0;
        y = 0;
        int i;
        for (i = 0; i < 9; i++) {
            x += 10;
            y += 10;
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
        }
        Log.d("[MAP] getMap_02", " hat " + i + " Bloecke erzeugt.");
    }

    /** MAP_03 [18] (MAP -> X) */
    public void getMap_03() {
        //     /    Balken links unten nach rechts oben
        x = 0;
        y = 100;
        int i;
        for (i = 0; i < 9; i++) {
            x += 10;
            y -= 10;
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
        }
        //     \    Balken links oben nach rechts unten
        x = y = 0;
        for (i = 0; i < 9; i++) {
            x += 10;
            y += 10;
            if (x != 50 && y != 50) {
                block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
                gameView.addBlockToList(block);
            }
        }
        Log.d("[MAP] getMap_03", " hat " + (i * 2) + " Bloecke erzeugt.");
    }

    [B]/** MAP_04 [70] (MAP -> O    grosser Block in der Mitte) */
    public void getMap_04() {
        x = 30;
        y = 40;
        int i;
        for (i = 0; i < 70; i++) {
            if (x == 72) {
                x = 30;
                y += 5;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            x += 3;
        }
        Log.d("[MAP] getMap_04", " hat " + i + " Bloecke erzeugt.");
    }[/B]

    /** MAP_05 [76] (MAP -> - -- -    drei Bloecke verteilt, horizontal mittig) */
    public void getMap_05() {
        // Links
        x = 4;
        y = 40;
        int i;
        for (i = 0; i < 24; i++) {
            if (x == 28) {
                x = 4;
                y += 5;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            x += 4;
        }
        // Mitte
        x = 36;
        y = 40;
        int j;
        for (j = 0; j < 28; j++) {
            if (x == 64) {
                x = 36;
                y += 5;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            x += 4;
        }
        // Rechts
        x = 72;
        y = 40;
        int k;
        for (k = 0; k < 24; k++) {
            if (x == 96) {
                x = 72;
                y += 5;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            x += 4;
        }
        Log.d("[MAP] getMap_04", " hat " + (i + j + k) + " Bloecke erzeugt.");
    }

    /** MAP_06 [1] (MAP -> .    ein einzelner Baustein in der Mitte) */
    public void getMap_06() {
        x = 50;
        y = 50;
        block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
        gameView.addBlockToList(block);
        Log.d("[MAP] getMap_04", " hat " + 1 + " Block erzeugt.");
    }

    /** MAP_07 [128] (MAP -> 4x24 in Ecken + 1x28 Mitte) */
    public void getMap_07() {
        // Links oben 
        x = 4;
        y = 10;
        int i;
        for (i = 0; i < 24; i++) {
            if (x == 28) {
                x = 4;
                y += 5;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            x += 4;
        }
        // Links unten
        x = 4;
        y = 90;
        int l;
        for (l = 0; l < 24; l++) {
            if (x == 28) {
                x = 4;
                y -= 5;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            x += 4;
        }
        // Mitte
        x = 36;
        y = 40;
        int j;
        for (j = 0; j < 28; j++) {
            if (x == 64) {
                x = 36;
                y += 5;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            x += 4;
        }
        // Rechts unten
        x = 72;
        y = 90;
        int k;
        for (k = 0; k < 24; k++) {
            if (x == 96) {
                x = 72;
                y -= 5;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            x += 4;
        }
        // Rechts oben
        x = 72;
        y = 10;
        int m;
        for (m = 0; m < 24; m++) {
            if (x == 96) {
                x = 72;
                y += 5;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            x += 4;
        }
        Log.d("[MAP] getMap_04", " hat " + (i + j + k + l + m) + " Bloecke erzeugt.");
    }

    /** MAP_08 [36] (XX) */
    public void getMap_08() {
        // erstes X (linke Seite)
        x = 0;
        y = 100;
        int i;
        for (i = 0; i < 9; i++) {
            x += 5;
            y -= 10;
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
        }
        x = y = 0;
        for (i = 0; i < 9; i++) {
            x += 5;
            y += 10;
            if (x != 50 && y != 50) {
                block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
                gameView.addBlockToList(block);
            }
        }

        // zweites X (rechte Seite)
        x = 50;
        y = 100;
        int j;
        for (j = 0; j < 9; j++) {
            x += 5;
            y -= 10;
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
        }
        x = 50;
        y = 0;
        for (j = 0; j < 9; j++) {
            x += 5;
            y += 10;
            if (x != 50 && y != 50) {
                block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
                gameView.addBlockToList(block);
            }
        }
        Log.d("[MAP] getMap_03", " hat " + ((i * 2) + (j * 2)) + " Bloecke erzeugt.");
    }

    /** MAP_09 [32] (quer verteilt) */
    public void getMap_09() {
        x = 10;
        y = 20;
        int i;
        for (i = 0; i < 32; i++) {
            if (i % 4 == 0 && i != 0) {
                y = 20;
                x += 10;
            }
            if (x == 50) {
                --i;
                continue;
            }
            block = new Block(gameView, gameView.rX(x), gameView.rY(y), b_sz, b_sz, b_hth);
            gameView.addBlockToList(block);
            y += 20;
        }
        Log.d("[MAP] getMap_10", " hat " + i + " Bloecke erzeugt.");
    }
Falls der Code dir doch nichts bringen sollte (da vielleicht doch etwas unübersichtlich^^), hier ein einfacheres Beispiel:

Sagen wir das ist das Sachbrett (5x4):
##### <- X bis 5 hochzählen, dann Y-Wert +1 bzw. -1 und X wieder auf 0 setzen
##### <- und das gleiche nochmal 3x :)
#####
#####

in einer Schleife könnte man das so darstellen (habs nicht geprüft...)
Code:
for (int i = 0; i < 20; i++) {
                if (i % 5 == 0 && i != 0) {
                    x = 0;
                    y += 1; // bzw. -1 (je nachdem ob oben oder unten angefangen wird)
                }
                x++;
            }
Grüße

NACHTRAG:
Hab gerade deine Frage nochmal gelesen. Falls es dir nur um die Farbe geht...
... dafür würde sich es anbieten eine Klasse "Feld" o.ä. zu erstellen und dann im Konstruktor eine Farbe entgegen zu nehmen.
Ablegen kannst du deine einzelnen Felder auch in einer Liste, da brauchst du nicht zwangsläufig ein 2D-Array.. Gerade was die Performance angeht, schätze ich Listen sehr :)
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: UchihaSevenfold
Ja, ich denke, ich würde mir auch eine Klasse "Feld" oder sowas in der Art erstellen, vielleicht kommen ja später noch Merkmale mehr hinzu, dann mußt du nur in der Klasse was hinzufügen.
Neben Farbe könnte ich mir auch den "Platz" vorstellen, wo das Feld dann liegt (entweder durchnumeriert wie eine Position oder mit XY oder sonst wie). Dann könnte man auch z.B. anhand der PosNr die Objekte in einer Liste sortieren.
 

Ähnliche Themen

R
Antworten
6
Aufrufe
1.011
swa00
swa00
R
  • Robby1950
2
Antworten
23
Aufrufe
1.015
Robby1950
R
B
Antworten
6
Aufrufe
1.051
jogimuc
J
Zurück
Oben Unten