class Elektriker // FixLight erweitert die Klasse Light { int xPos; int yPos; int xDim; int yDim; int altPosX; // altPosX werde ich unten als Speicher brauchen int altPosY; // altPosY werde ich unten als Speicher brauchen int z; // z brauche für die Zuweisung der Zufallszahl int counter; Elektriker(int xP, int yP, int xD, int yD, int xA, int yA) { xPos = xP; // Startposition X yPos = yP; // Startposition Y xDim = xD; // Seitenlänge des BigLights >> Breite yDim = yD; // Seitenlänge des BigLights >> Höhe altPosX = xA; // Startwert: ansonsten gibts ein Loch >> hat in der ersten Runde keinen Wert altPosY = yA; // Startwert: ansonsten gibts ein Loch >> hat in der ersten Runde keinen Wert counter = 0; } void move() { paintMe(); altPosX = xPos; // altPosX dient als Speicher von xPos in die nächste Runde altPosY = yPos; // altPosY dient als Speicher von yPos in die nächste Runde counter++; if (counter == 25) { MovingLight newLeuchte = new MovingLight(xPos, yPos, 10, 10, 20, 20); // zeichne einen neuen Ball leuchtenListe.add(newLeuchte); // füge ihn in der Liste hinzu counter = 0; } z = (int)random(0,4); // Eine Zahl [0, 1, 2, 3] wird gewählt if (z==0) { moveOben(); // Wenn 0: Dann tue dies.. } else if (z==1) { moveUnten(); // Wenn 1: Dann tue jenes.. } else if (z==2) { moveRechts(); // Wenn 2: Dann tue das andere.. } else if (z==3) { moveLinks(); // Wenn 3: Dann tue noch was anderes.. } } void moveOben() // Definiert die erste der 4 Bewegungsrichtungen { // void moveOben verkleinert die y-Position d.h. Die Leuchte bewegt sich nach oben.. if(rasterPosition[xPos/10][yPos/10 - 1] == N_FREE) { yPos = yPos - 10; // Wenn das Feld zu welchem es soll "leer" ist, Dann: } // ..verkleiner yPos um 10 >> Verschiebe! else if(rasterPosition[xPos/10][yPos/10 - 1] == N_BIG_LIGHT) { yPos = yPos; changeColor(); } else // Es werden jeweils die beiden Eckpunkte des BigLights überprüft { yPos = yPos; // Sollte die Position nicht "leer" sein, so tue nichts } } void moveUnten() // Definiert die zweite der 4 Bewegungsrichtungen { // void moveUnten vergrössert die y-Position d.h. Die Leuchte bewegt sich nach unten.. if(rasterPosition[xPos/10][yPos/10 + 1] == N_FREE) { yPos = yPos + 10; // Wenn das Feld zu welchem es soll "leer" ist, Dann: } // ..vergrössere yPos um 10 >> Verschiebe! else if(rasterPosition[xPos/10][yPos/10 - 1] == N_BIG_LIGHT) { yPos = yPos; changeColor(); } else { yPos = yPos; // Sollte die Position nicht "leer" sein, so tue nichts } } void moveRechts() // Definiert die dritte der 4 Bewegungsrichtungen { // void moveRechts vergrössert die x-Position d.h. Die Leuchte bewegt sich nach rechts.. if(rasterPosition[xPos/10 + 1][yPos/10] == N_FREE) { xPos = xPos + 10; // Wenn das Feld zu welchem es soll "leer" ist, Dann: } // ..vergrössere xPos um 10 >> Verschiebe! else if(rasterPosition[xPos/10][yPos/10 - 1] == N_BIG_LIGHT) { xPos = xPos; changeColor(); } else { xPos = xPos; // Sollte die Position nicht "leer" sein, so tue nichts } } void moveLinks() // Definiert die dritte der 4 Bewegungsrichtungen { // void moveRechts vergrössert die x-Position d.h. Die Leuchte bewegt sich nach links.. if(rasterPosition[xPos/10 - 1][yPos/10] == N_FREE) { xPos = xPos - 10; // Wenn das Feld zu welchem es soll "leer" ist, Dann: } // ..verkleinere xPos um 10 >> Verschiebe! else if(rasterPosition[xPos/10][yPos/10 - 1] == N_BIG_LIGHT) { xPos = xPos; changeColor(); } else { xPos = xPos; // Sollte die Position nicht "leer" sein, so tue nichts } } void paintMe() { // Zeichnet das wesentliche des Oblichts: Das Viereck noFill(); stroke(0,150,0); strokeWeight(1); rect(xPos, yPos, 10, 10); rect(xPos - 2, yPos - 2, 14, 14); line(xPos, yPos, xPos + 10, yPos + 10); line(xPos, yPos + 10, xPos + 10, yPos); } void changeColor() { // Zeichnet das wesentliche des Oblichts: Das Viereck noFill(); stroke(0,50,0); strokeWeight(1); rect(xPos, yPos, 10, 10); rect(xPos - 2, yPos - 2, 14, 14); line(xPos, yPos, xPos + 10, yPos + 10); line(xPos, yPos + 10, xPos + 10, yPos); } }