< GMU:Immersive Strategien | Inhalte | Bälle
No edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
== Code B == | == Code B == | ||
Ball[] ball = new Ball[15]; | <source lang="Java">Ball[] ball = new Ball[15]; | ||
int a,b,c; //Abstände der Ebenen | int a,b,c; //Abstände der Ebenen | ||
Line 226: | Line 226: | ||
} | } | ||
} | } | ||
</source> | |||
== Objekt Ball == | == Objekt Ball == | ||
class Ball { | <source lang="Java">class Ball { | ||
int g1,g2; //Größe | int g1,g2; //Größe | ||
Line 259: | Line 260: | ||
} | } | ||
} | } | ||
</source> |
Revision as of 15:18, 26 March 2011
Der Denkfehler ist behoben. Jetzt ist es fast perfekt. Naja, wenn der Ball gegen die Laufrichtung abprallt, läuft er auf seiner Kreisbahn Richtung Decke weiter. Die physikalischen Gesetze sind aufgehoben...
Code B
Ball[] ball = new Ball[15];
int a,b,c; //Abstände der Ebenen
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);
//Farbe
ball[i].h = (int)random(120);
}
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);
//Farbe
ball[i].h = (int)random(120,240);
}
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);
//Farbe
ball[i].h = (int)random(240,360);
}
}
void draw() {
background(0);
fill(255);
rect(a,0,c,height);
rect(a+c+b,0,c,height);
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 != 80) {
ball[i].g1 = 80;
}
//Rand oben
if (ball[i].x <= 0+ball[i].g1/2) {
ball[i].angle = 0;
}
//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 = 225;
}
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 = 315;
}
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;
}
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[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 != 80) {
ball[i].g1 = 80;
}
//Rand oben
if (ball[i].x <= a+c+ball[i].g1/2) {
ball[i].angle = 0;
}
//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 = 225;
}
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 = 315;
}
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;
}
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[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 != 80) {
ball[i].g1 = 80;
}
//Rand oben
if (ball[i].x <= a+c+b+c+ball[i].g1/2) {
ball[i].angle = 0;
}
//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 = 225;
}
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 = 315;
}
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;
}
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[i].maleBall();
}
}
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 = 80;
g2 = g1;
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);
}
}
}