class MovingLight extends Light // FixLight erweitert die Klasse Light { 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 MovingLight(int xP, int yP, int xD, int yD, int xA, int yA) { xPos = xP; // Startposition X yPos = yP; // Startposition Y xDim = xD; // Dimension X yDim = yD; // Dimension Y altPosX = xA; // Startwert: ansonsten gibts ein Loch altPosY = yA; // Startwert: ansonsten gibts ein Loch } void move() // Methode, welche die Leuchten bewegt { //rectMode(CORNER); noFill(); stroke(255); strokeWeight(0); rect(xPos,yPos,10,10); // Fläche der Leuchte wird gezeichnet ellipse(xPos+5,yPos+5,4,4); // Die Leuchte selbst wird gezeichnet //rasterPosition[xPos/10][yPos/10] = 6; //rasterPosition[altPosX/10][altPosY/10] = 0; noFill(); stroke(100); rect(altPosX,altPosY,10,10); altPosX = xPos; // xPos wird in altPosX für die nächste Runde gespeichert altPosY = yPos; // yPos wird in altPosY für die nächste Runde gespeichert z = (int)random(0,4); // Eine Zufallszahl [0,1,2,3] entscheidet, ob sich die Leuchte nach [oben, unten, rechts, links] bewegen soll if (z==0) {moveOben(); // ..falls 0, dann führe moveOben aus } else if (z==1) {moveUnten(); // ..falls 1, dann führe moveUnten aus } else if (z==2) {moveRechts(); // ..falls 2, dann führe moveRechts aus } else if (z==3) {moveLinks(); // ..falls 3, dann führe moveLinks aus } } 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) // ..falls das Feld zu welchem es soll "leer" ist, Dann: { yPos = yPos - 10; // ..verkleiner yPos um 10 >> Verschiebe! rasterPosition[xPos/10][yPos/10] = N_MOVING_LIGHT; // Setze an dieser Position den Wert "Leuchte" rasterPosition[altPosX/10][altPosY/10] = N_FREE; // Setze an der vorherigen Position den Wert "leer" } else if(rasterPosition[xPos/10][yPos/10] == N_BIG_LIGHT) // Testet, ob sich die Leuchte in einem "Oblicht" befindet. Falls ja, wird folgendes ausgeführt.. { yPos = yPos; // Sollte dies der Fall sein, dann soll sich die Leuchte nicht bewegen FixLight newFixLeuchte = new FixLight(xPos, yPos, 10, 10, punkteListe); fixLeuchtenListe.add(newFixLeuchte); // An die Stelle der Leuchte wird ein FixLight gezeichnet rasterPosition[xPos/10][yPos/10] = 5; // Diese speichert den Wert "FixLight" fill(255,0,0); // Das "FixLight" leuchet kurz rot auf rect(xPos,yPos,10,10); deleteLeuchtenAtPosition(xPos, yPos, leuchtenListe); // Die "Leuchte" die durch das "FixLight ersetzt wurde, wird gelöscht } else { yPos = yPos; // Ist die Position weder "leer" noch ein "Oblicht", 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) // ..falls das Feld zu welchem es soll "leer" ist, Dann: { yPos = yPos + 10; // ..vergrössere yPos um 10 >> Verschiebe! rasterPosition[xPos/10][yPos/10] = N_MOVING_LIGHT; // Setze an dieser Position den Wert "Leuchte" rasterPosition[altPosX/10][altPosY/10] = N_FREE; // Setze an der vorherigen Position den Wert "leer" } else if(rasterPosition[xPos/10][yPos/10] == N_BIG_LIGHT) // Testet, ob sich die Leuchte in einem "Oblicht" befindet. Falls ja, wird folgendes ausgeführt.. { yPos = yPos; // Sollte dies der Fall sein, dann soll sich die Leuchte nicht bewegen FixLight newFixLeuchte = new FixLight(xPos, yPos, 10, 10, punkteListe); fixLeuchtenListe.add(newFixLeuchte); // An die Stelle der Leuchte wird ein FixLight gezeichnet rasterPosition[xPos/10][yPos/10] = 5; // Diese speichert den Wert "FixLight" fill(255,0,0); // Das "FixLight" leuchet kurz rot auf rect(xPos,yPos,10,10); deleteLeuchtenAtPosition(xPos, yPos, leuchtenListe); // Die "Leuchte" die durch das "FixLight ersetzt wurde, wird gelöscht } else { yPos = yPos; // Ist die Position weder "leer" noch ein "Oblicht", 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] == 0) // ..falls das Feld zu welchem es soll keine Wertigkeit besitzt. (=0 ist) { xPos = xPos + 10; // ..vergrössere xPos um 10 >> Verschiebe! rasterPosition[xPos/10][yPos/10] = N_MOVING_LIGHT; // Setze an dieser Position den Wert "Leuchte" rasterPosition[altPosX/10][altPosY/10] = N_FREE; // Setze an der vorherigen Position den Wert "leer" } else if(rasterPosition[xPos/10][yPos/10] == N_BIG_LIGHT) // Testet, ob sich die Leuchte in einem "Oblicht" befindet. Falls ja, wird folgendes ausgeführt.. { yPos = yPos; // Sollte dies der Fall sein, dann soll sich die Leuchte nicht bewegen FixLight newFixLeuchte = new FixLight(xPos, yPos, 10, 10, punkteListe); fixLeuchtenListe.add(newFixLeuchte); // An die Stelle der Leuchte wird ein FixLight gezeichnet rasterPosition[xPos/10][yPos/10] = 5; // Diese speichert den Wert "FixLight" fill(255,0,0); // Das "FixLight" leuchet kurz rot auf rect(xPos,yPos,10,10); deleteLeuchtenAtPosition(xPos, yPos, leuchtenListe); // Die "Leuchte" die durch das "FixLight ersetzt wurde, wird gelöscht } else { xPos = xPos; // Ist die Position weder "leer" noch ein "Oblicht", 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] == 0) // ..falls das Feld zu welchem es soll keine Wertigkeit besitzt. (=0 ist) { xPos = xPos - 10; // ..verkleinert xPos um 10 >> Verschiebe! rasterPosition[xPos/10][yPos/10] = N_MOVING_LIGHT; // Setze an dieser Position den Wert "Leuchte" rasterPosition[altPosX/10][altPosY/10] = N_FREE; // Setze an der vorherigen Position den Wert "leer" } else if(rasterPosition[xPos/10][yPos/10] == N_BIG_LIGHT) // Testet, ob sich die Leuchte in einem "Oblicht" befindet. Falls ja, wird folgendes ausgeführt.. { yPos = yPos; // Sollte dies der Fall sein, dann soll sich die Leuchte nicht bewegen FixLight newFixLeuchte = new FixLight(xPos, yPos, 10, 10, punkteListe); fixLeuchtenListe.add(newFixLeuchte); // An die Stelle der Leuchte wird ein FixLight gezeichnet rasterPosition[xPos/10][yPos/10] = 5; // Diese speichert den Wert "FixLight" fill(255,0,0); // Das "FixLight" leuchet kurz rot auf rect(xPos,yPos,10,10); deleteLeuchtenAtPosition(xPos, yPos, leuchtenListe); // Die "Leuchte" die durch das "FixLight ersetzt wurde, wird gelöscht } else { xPos = xPos; // Ist die Position weder "leer" noch ein "Oblicht", so tue nichts! } } void markierung() // Zeichnet einen Rahmen um die ausgewählte "Leuchte" { noFill(); strokeWeight(2); stroke(100,0,0); rect(altPosX, altPosY, 10, 10); ellipse(altPosX + 5, altPosY + 5, 4, 4); } }