2013年10月20日 星期日

WEEK07,期中作業

學號:99163072,99163134
名字:盧彥佑,簡尉倫

第一節

計畫如何完成期中作品以及今日目標,以及組員互相討論。
今日目標:在今天這3小時的任務,任務一:產生球根球之間的碰撞。
                                                           任務二:按球的瞬間,球產生分裂時,讓球不會重疊。
                                                           任務三:球點到一定小的時候,產生新的一顆大球。
                                                           任務四:點球時可以算分數。


第二節
 這節課解決了任務一和任務二

float [] ballX = new float [50];
float [] ballY = new float [50];
float [] ballVX = new float [50];
float [] ballVY = new float [50];
float [] ballR = new float [50];
int h = 800;
int w = 800;
int test = 0;
void setup() {
  size(h, w);
  ballX[0] =  400 ;
  ballY[0] =  150;
  ballVX[0] = 0 ;
  ballVY[0] = 0.5;
  ballR[0] = 300;
}
void draw() {
  background(255);
  noStroke();
  fill(0, 255, 255);
  for (int i = 0;i<50;i++) {  
    ellipse(ballX[i], ballY[i], ballR[i], ballR[i]);
    if (ballX[i] != 0) ballVY[i] +=0.15;
    ballX[i] += ballVX[i];
    ballY[i] += ballVY[i];
  }
  attack();
  balls();
  releaseball();
}
void newball(int i, int k) {
  switch (k) {
  case 0 :
    break;
  default :
    k = 0;
    for (int j = 0 ; j < 50 ; j++) {
      if (dist(ballX[j], ballY[j], ballX[i], ballY[i]) <= (ballR[i]/2 + ballR[j]/2))
        if ( i != j)
        {
          ballY[i] +=1;
          k++;
        }
    }
    if ( k != 0 ) newball(i, k);
    else break;
  }
}

void mousePressed() {
  for (int i = 0;i<50;i++) {
    if (dist (ballX[i], ballY[i], mouseX, mouseY)<=(ballR[i]/2)) {
      if ((mouseX - ballR[i]/10) - ballR[i]*1/3 <= 0) {
        ballY[i] = ballY[i];
        ballVY[i] = -ballVY[i] + random(1);
        ballR[i] = ballR[i]*2/3;
      }
      else {
        ballX[i] = mouseX - ballR[i]/10;
        ballY[i] = ballY[i];
        ballVX[i] = -3*cos(random(PI/2));
        ballVY[i] = -ballVY[i] + random(1);
        ballR[i] = ballR[i]*2/3;
      }
      newball(i, 1);
      for (int j = 0 ; j < 50 ; j ++ ) {
        if (ballX[j] == 0.0 && ballY[j] == 0.0  ) {
          test ++ ;
        }
        if (test != 0) {
          if ((mouseX + ballR[i]) + ballR[i]/2 >= 800) {
            ballX[j] = ballX[i];
            ballY[j] = ballY[i]+ballR[i];
            ballVY[j] = ballVY[i]+random(1);
            ballVX[j] = 3*cos(random(PI/2)) ;
            ballR[j] = ballR[i];
          }
          else {
            ballX[j] = mouseX + ballR[i];
            ballY[j] = ballY[i];
            ballVX[j] = 3*cos(random(PI/2)) ;
            ballVY[j] = ballVY[i]+random(1);
            ballR[j] = ballR[i];
          }
          newball(j, 1);
          test=0;
          break;
        }
      }
    }
  }
}

void attack() {
  for (int i=0 ; i <50 ; i++ ) {
    if ( ballX[i] - ballR[i]/2 <= 0 || ballX[i] + ballR[i]/2 >= 800) {
      ballVX[i] = -ballVX[i];
    }
  }
}
void balls() {
  for (int i = 0 ; i <50 ;i ++) {
    for (int j = i ; j <50 ; j ++) {
      if (dist(ballX[j], ballY[j], ballX[i], ballY[i]) <= (ballR[i]/2 + ballR[j]/2)  ) {
        if (i!=j) {
          if (ballX[j] >= ballX[i]) ballVX[i] = -abs(ballVX[i]);
          else ballVX[j] = abs(ballVX[j]);
          if (ballY[j] >= ballY[i]) ballVY[i] = -abs(ballVY[i]);
          else ballVY[j] = abs(ballVY[j]);
        }
      }
    }
  }
}

void releaseball() {
  for (int i = 0 ; i <50 ;i ++) {
    if (ballY[i] - ballR[i] / 2 >= h ) {
      ballX[i] = 0;
      ballY[i] = 0;
      ballVX[i] = 0;
      ballVY[i] = 0;
      ballR[i] = 0;
    }
  }
}

第三節
解決了任務三和任務四
float [] ballX = new float [50]; float [] ballY = new float [50]; float [] ballVX = new float [50]; float [] ballVY = new float [50]; float [] ballR = new float [50]; int h = 800; int w = 800; int test = 0; int aa = 0; void setup() { size(h, w); ballX[0] = 400 ; ballY[0] = 150; ballVX[0] = 0 ; ballVY[0] = 0.5; ballR[0] = 300; } void draw() { background(255); noStroke(); fill(0, 255, 255); for (int i = 0;i<50;i++) { ellipse(ballX[i], ballY[i], ballR[i], ballR[i]); if (ballX[i] != 0) ballVY[i] +=0.15; ballX[i] += ballVX[i]; ballY[i] += ballVY[i]; } attack(); balls(); releaseball(); fill(255, 0, 0); textSize(20); text("grade:" + aa, 20, 20, 100, 50); } void newball(int i, int k) { switch (k) { case 0 : break; default : k = 0; for (int j = 0 ; j < 50 ; j++) { if (dist(ballX[j], ballY[j], ballX[i], ballY[i]) <= (ballR[i]/2 + ballR[j]/2)) if ( i != j) { ballY[i] +=1; k++; } } if ( k != 0 ) newball(i, k); else break; } }
void mousePressed() { for (int i = 0;i<50;i++) { if (dist (ballX[i], ballY[i], mouseX, mouseY)<=(ballR[i]/2)) { if (ballR[i]/2 <= 15 && ballR[i]/2 != 0) { aa += int (900 / ballR[i]); bigball(i); } else { aa += int (900 / ballR[i]); if ((mouseX - ballR[i]/10) - ballR[i]*1/3 <= 0) { ballY[i] = ballY[i]; ballVY[i] = -ballVY[i] + random(1); ballR[i] = ballR[i]*2/3; } else { ballX[i] = mouseX - ballR[i]/10; ballY[i] = ballY[i]; ballVX[i] = -3*cos(random(PI/2)); ballVY[i] = -ballVY[i] + random(1); ballR[i] = ballR[i]*2/3; } newball(i, 1); for (int j = 0 ; j < 50 ; j ++ ) { if (ballX[j] == 0.0 && ballY[j] == 0.0 ) { test ++ ; } if (test != 0) { if ((mouseX + ballR[i]) + ballR[i]/2 >= 800) { ballX[j] = ballX[i]; ballY[j] = ballY[i]+ballR[i]; ballVY[j] = ballVY[i]+random(1); ballVX[j] = 3*cos(random(PI/2)) ; ballR[j] = ballR[i]; } else { ballX[j] = mouseX + ballR[i]; ballY[j] = ballY[i]; ballVX[j] = 3*cos(random(PI/2)) ; ballVY[j] = ballVY[i]+random(1); ballR[j] = ballR[i]; } newball(j, 1); test=0; break; } } } } } }
void attack() { for (int i=0 ; i <50 ; i++ ) { if ( ballX[i] - ballR[i]/2 <= 0 || ballX[i] + ballR[i]/2 >= 800) { ballVX[i] = -ballVX[i]; } } } void balls() { for (int i = 0 ; i <50 ;i ++) { for (int j = i ; j <50 ; j ++) { if (dist(ballX[j], ballY[j], ballX[i], ballY[i]) <= (ballR[i]/2 + ballR[j]/2) ) { if (i!=j) { if (ballX[j] >= ballX[i]) ballVX[i] = -abs(ballVX[i]); else ballVX[j] = abs(ballVX[j]); if (ballY[j] >= ballY[i]) ballVY[i] = -abs(ballVY[i]); else ballVY[j] = abs(ballVY[j]); } } } } }
void releaseball() { for (int i = 0 ; i <50 ;i ++) { if (ballY[i] - ballR[i] / 2 >= h ) { ballX[i] = 0; ballY[i] = 0; ballVX[i] = 0; ballVY[i] = 0; ballR[i] = 0; } } }
void bigball(int i) { ballX[i] = int(random(300)+150); ballY[i] = 150; ballVX[i] = 3*cos(random(PI*2)); ballVY[i] = 0; ballR[i] = 300; }


沒有留言:

張貼留言