名字:盧彥佑,簡尉倫
第一節
計畫如何完成期中作品以及今日目標,以及組員互相討論。
今日目標:在今天這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;
}
沒有留言:
張貼留言