< GMU:Immersive Strategien | Inhalte | Bälle
Code D
Ball[] ball = new Ball[15]; int a,b,c; //Abstände der Ebenen Ball mausBall;
void setup() {
size(1280,1024); //size(1920,1200); smooth(); noStroke(); colorMode(HSB,360,100,100,100); a = 500; //700 Größe der ersten Ebene b = 400; //600 Größe der zweiten Ebene c = 40; //60 Lücke for (int i=0; i < 5; i++) { ball[i] = new Ball(); //in erster Ebene ball[i].x = random(ball[i].g1,a-ball[i].g1); ball[i].y = random(ball[i].g2,height-ball[i].g2); } for (int i=5; i < 10; i++) { ball[i] = new Ball(); //in zweiter Ebene ball[i].x = random(a+c+ball[i].g1,a+c+b-ball[i].g1); ball[i].y = random(ball[i].g2,height-ball[i].g2); } for (int i=10; i < ball.length; i++) { ball[i] = new Ball(); //in dritter Ebene ball[i].x = random(a+c+b+c+ball[i].g1,width-ball[i].g1); ball[i].y = random(ball[i].g2,height-ball[i].g2); } mausBall = new Ball();
}
void draw() {
background(0); mausBall.x = mouseX; mausBall.y = mouseY; mausBall.maleBall(); mausBall.position[0] = mausBall.x-mausBall.g1/2; mausBall.position[1] = mausBall.x+mausBall.g1/2; mausBall.position[2] = mausBall.y-mausBall.g2/2; mausBall.position[3] = mausBall.y+mausBall.g2/2; for (int i=0; i < 15; i++) { ball[i].position[0] = ball[i].x-ball[i].g1/2; ball[i].position[1] = ball[i].x+ball[i].g1/2; ball[i].position[2] = ball[i].y-ball[i].g2/2; ball[i].position[3] = ball[i].y+ball[i].g2/2; } for (int i=0; i < 5; i++) { //Bewegen if (ball[i].angle <= 360) { ball[i].angle -= 2; } if (ball[i].angle <= 0) { ball[i].angle = 360; } //im Bogen ball[i].vx = cos(radians(ball[i].angle))*ball[i].g1/6; ball[i].vy = sin(radians(ball[i].angle))*ball[i].g2/6; ball[i].x = ball[i].x + ball[i].vx; ball[i].y = ball[i].y + ball[i].vy; //Ballgröße zurücksetzen if (ball[i].g1 != 90) { ball[i].g1 = 90; } //Rand oben if (ball[i].x <= 0+ball[i].g1/2) { ball[i].angle = 60; ball[i].g1 = ball[i].g1-20; } //Rand unten if (ball[i].x >= a-ball[i].g1/2) { ball[i].angle = 180; ball[i].g1 = ball[i].g1-20; } //links raus if (ball[i].y <= 0-ball[i].g2) { ball[i].y = height+ball[i].g2/2; } //rechts raus if (ball[i].y >= height+ball[i].g2) { ball[i].y = 0-ball[i].g2/2; } //Bälle stoßen aneinander for (int j=i+1; j < 5; j++) { if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[3] >= ball[j].position[2]) && (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[3] <= ball[j].position[3])) { ball[i].angle = 135; ball[j].angle = 45; } if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[3] >= ball[j].position[2]) && (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[3] <= ball[j].position[3])) { ball[i].angle = 45; ball[j].angle = 135; } if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[2] <= ball[j].position[3]) && (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[2] >= ball[j].position[2])) { ball[i].angle = 135; ball[j].angle = 45; } if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[2] <= ball[j].position[3]) && (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[2] >= ball[j].position[2])) { ball[i].angle = 45; ball[j].angle = 135; } } ball[i].maleBall(); } for (int i=5; i < 10; i++) { //Bewegen if (ball[i].angle <= 360) { ball[i].angle -= 3; } if (ball[i].angle <= 0) { ball[i].angle = 360; } //im Bogen ball[i].vx = cos(radians(ball[i].angle))*ball[i].g1/6; ball[i].vy = sin(radians(ball[i].angle))*ball[i].g2/6; ball[i].x = ball[i].x + ball[i].vx; ball[i].y = ball[i].y + ball[i].vy; //Ballgröße zurücksetzen if (ball[i].g1 != 90) { ball[i].g1 = 90; } //Rand oben if (ball[i].x <= a+c+ball[i].g1/2) { ball[i].angle = 60; ball[i].g1 = ball[i].g1-20; } //Rand unten if (ball[i].x >= a+c+b-ball[i].g1/2) { ball[i].angle = 180; ball[i].g1 = ball[i].g1-20; } //links raus if (ball[i].y <= 0-ball[i].g2) { ball[i].y = height+ball[i].g2/2; } //rechts raus if (ball[i].y >= height+ball[i].g2) { ball[i].y = 0-ball[i].g2/2; } //Bälle stoßen aneinander for (int j=i+1; j < 10; j++) { if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[3] >= ball[j].position[2]) && (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[3] <= ball[j].position[3])) { ball[i].angle = 135; ball[j].angle = 45; } if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[3] >= ball[j].position[2]) && (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[3] <= ball[j].position[3])) { ball[i].angle = 45; ball[j].angle = 135; } if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[2] <= ball[j].position[3]) && (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[2] >= ball[j].position[2])) { ball[i].angle = 135; ball[j].angle = 45; } if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[2] <= ball[j].position[3]) && (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[2] >= ball[j].position[2])) { ball[i].angle = 45; ball[j].angle = 135; } } ball[i].maleBall(); } for (int i=10; i < 15; i++) { //Bewegen if (ball[i].angle <= 360) { ball[i].angle -= 4; } if (ball[i].angle <= 0) { ball[i].angle = 360; } //im Bogen ball[i].vx = cos(radians(ball[i].angle))*ball[i].g1/6; ball[i].vy = sin(radians(ball[i].angle))*ball[i].g2/6; ball[i].x = ball[i].x + ball[i].vx; ball[i].y = ball[i].y + ball[i].vy; //Ballgröße zurücksetzen if (ball[i].g1 != 90) { ball[i].g1 = 90; } //Rand oben if (ball[i].x <= a+c+b+c+ball[i].g1/2) { ball[i].angle = 60; ball[i].g1 = ball[i].g1-20; } //Rand unten if (ball[i].x >= width-ball[i].g1/2) { ball[i].angle = 180; ball[i].g1 = ball[i].g1-20; } //links raus if (ball[i].y <= 0-ball[i].g2) { ball[i].y = height+ball[i].g2/2; } //rechts raus if (ball[i].y >= height+ball[i].g2) { ball[i].y = 0-ball[i].g2/2; } //Bälle stoßen aneinander for (int j=i+1; j < 15; j++) { if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[3] >= ball[j].position[2]) && (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[3] <= ball[j].position[3])) { ball[i].angle = 135; ball[j].angle = 45; } if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[3] >= ball[j].position[2]) && (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[3] <= ball[j].position[3])) { ball[i].angle = 45; ball[j].angle = 135; } if ((ball[i].position[1] >= ball[j].position[0]) && (ball[i].position[2] <= ball[j].position[3]) && (ball[i].position[1] <= ball[j].position[1]) && (ball[i].position[2] >= ball[j].position[2])) { ball[i].angle = 135; ball[j].angle = 45; } if ((ball[i].position[0] <= ball[j].position[1]) && (ball[i].position[2] <= ball[j].position[3]) && (ball[i].position[0] >= ball[j].position[0]) && (ball[i].position[2] >= ball[j].position[2])) { ball[i].angle = 45; ball[j].angle = 135; } } ball[i].maleBall(); } for (int i=0; i < 15; i++) { if ((ball[i].position[1] >= mausBall.position[0]) && (ball[i].position[3] >= mausBall.position[2]) && (ball[i].position[1] <= mausBall.position[1]) && (ball[i].position[3] <= mausBall.position[3])) { ball[i].angle = 225; } if ((ball[i].position[0] <= mausBall.position[1]) && (ball[i].position[3] >= mausBall.position[2]) && (ball[i].position[0] >= mausBall.position[0]) && (ball[i].position[3] <= mausBall.position[3])) { ball[i].angle = 315; } if ((ball[i].position[1] >= mausBall.position[0]) && (ball[i].position[2] <= mausBall.position[3]) && (ball[i].position[1] <= mausBall.position[1]) && (ball[i].position[2] >= mausBall.position[2])) { ball[i].angle = 135; } if ((ball[i].position[0] <= mausBall.position[1]) && (ball[i].position[2] <= mausBall.position[3]) && (ball[i].position[0] >= mausBall.position[0]) && (ball[i].position[2] >= mausBall.position[2])) { ball[i].angle = 45; } } fill(255); rect(a,0,c,height); rect(a+c+b,0,c,height);
}
void mousePressed() {
mausBall.h = (int)random(360);
}
Objekt Ball
class Ball {
int g1,g2; //Größe float x,y; //Position int h,s,b,a; //Farbe float vx,vy; //Geschwindigkeit float angle; //Gradzahl float[] position = new float[4]; // die 4 Ecken des Balls; Ball() { g1 = 90; g2 = g1; h = (int)random(360); s = 100; b = 100-g1; a = 100; angle = 90; } void maleBall() { for (int i=0; i<g1; i+=5) { //Abrundungen bzw. Schatten fill(h,s,b+i,a); ellipse(x,y,g1-i,g2-i); } }
}