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);
}
}