2013年10月14日 星期一

WEEK06,期中作業

第一節
和組員一起做期中作品,討論期中作品如何做
遊戲名稱:點球球遊戲
遊戲說明:當隨機一顆球出現時,請點選他,他會開始往下掉,如果掉到底部就輸了,點選他之後會分裂變小,最終遊戲沒有球在螢幕上,就輸了,點選到球就有分數,點到越小顆的球分數越高。
遊戲目的:訓練眼睛和手的反應速度。
組員:簡尉倫99163134

第2節
開始寫程式碼

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.2;
    ballX[i] += ballVX[i];
    ballY[i] += ballVY[i];
  }
}
void newball(int i) {
}

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

一開始出現的球

                                                             點選球後開始分裂
第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.2;
    ballX[i] += ballVX[i];
    ballY[i] += ballVY[i];
  }
  attack();
  balls();
}
void newball(int i) {
}

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]*2/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;
      }
      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] >= 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];
          }
          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 = 0 ; j <50 ; j ++) {
      if (dist(ballX[j], ballY[j], ballX[i], ballX[i]) <= (ballR[i]/2 + ballR[j]/2)  ) {
        ;
      }
    }
  }
}
球碰到牆壁會反彈

沒有留言:

張貼留言