2024年9月16日 星期一

Week02-唐門外系弟子-林活修行互動技術秘笈

 week02-1_pacman_radians_mouseX

用滑鼠控制pacman的開口角度

void setup(){
  size(400,400);
}

void draw() {
  background(255);
  fill(#FFDC0F);//填充黃色
  float a = radians(mouseX);
  for(int x=0; x<400; x+=100){
    for(int y=0;y<400; y+=100){
      arc(x+50, y+50,100,100, 0+a,  PI*2-a, PIE);//改畫弧度
      //X座標, Y, 寬, 高, 開始, 結束,蘋果派的方法畫
     }
  }
}



week02-2-pacman_radians_frameCount

自動開嘴,但會消失

void setup(){
  size(400,400);
}

void draw(){
  background(255);
  fill(#FFDC0F);
  float a = radians(frameCount);
  if(a>PI/4) a = a - PI/4;
  arc(200, 200,  300, 300, 0+a, PI*2-a, PIE);
}

week02-3-pacman_open_close_open_close

自動開嘴成功,0..45..90..180

void setup(){
  size(400,400);
}

void draw(){
  background(255);
  fill(#FFDC0F);
  float a = frameCount % 180;
  if(a<45) a = radians(a);
  else if(a<90) a = radians(90-a);
  else if(a<135) a = radians(a-90);
  else if(a<180) a = radians(180-a);
  arc(200, 200,  300, 300, 0+a, PI*2-a, PIE);
}


week02-4_pacman_for_for_open_close_open_close
自動開嘴之多重影分身之術
void setup(){
  size(400,400);
}

void draw(){
  background(255);
  fill(#FFDC0F);
  float a = frameCount % 180;
  if(a<45) a = radians(a);
  else if(a<90) a = radians(90-a);
  else if(a<135) a = radians(a-90);
  else if(a<180) a = radians(180-a);
  arc(200, 200,  300, 300, 0+a, PI*2-a, PIE);
}

week02-5_pacmen_if_keyPressed_keyCode
來控制pacmen移動,利用上下左右鍵(*用frameRate()加速移動)

void setup(){
  size(400, 400);
  frameRate(120);
}
int x = 200, y= 200; //pacmen座標
void draw(){
  background(255);
  fill(#FFDC0F);
  if(keyPressed && keyCode==RIGHT) x++;
  if(keyPressed && keyCode==LEFT) x--;
  if(keyPressed && keyCode==UP) y--;
  if(keyPressed && keyCode==DOWN) y++;
  
  ellipse(x, y, 100, 100);
  
}
week02-6_pacmen_b_direction from week_02_3
滑鼠控制pacmen的開嘴方向(未完成)
void setup() {
  size(400, 400);
}
void draw() {
  background(255);
  fill(#FFDC0F);
  float a = frameCount % 180;
  float b = radians(mouseX);
  if (a<45) a = radians(a);
  else if (a<90) a = radians(90-a);
  else if (a<135) a = radians(a-90);
  else if (a<180) a = radians(180-a);
  arc(200, 200, 300, 300, b+0+a, b+PI*2-a, PIE);
}

week02-7_pacmen_d_direction_void_keyPressed_keyCode
用方向鍵控制pecmen,開嘴的方向也是正確的
void setup() {
  size(400, 400);
}
float x = 200, y = 200, d=0;
void draw() {
  background(255);
  fill(#FFDC0F);
  float a = frameCount % 180;
  if (a<45) a = radians(a);
  else if (a<90) a = radians(90-a);
  else if (a<135) a = radians(a-90);
  else if (a<180) a = radians(180-a);
  arc(x, y, 100, 100, d+0+a, d+PI*2-a, PIE);
}
void keyPressed(){
  if(keyCode==RIGHT){
    x++;
    d = PI/2*0;
  }else if(keyCode==DOWN){
    y++;
    d = PI/2*1;
  }else if(keyCode==LEFT){
    x--;
    d = PI/2*2;
  }else if(keyCode==UP){
    y--;
    d = PI/2*3;
  }
}
week02-8_pacmen_dx_dy_d_void_keyPressed
死魚移動,但不會張嘴,程式進化縮減中
void setup() {
  size(400, 400);
}
int x = 200, y = 200, d = 0;
void draw() {
  background(255);
  fill(#FFDC0F);
  float a = 0.5;
  int [] dx = {1, 0, -1, 0};
  int [] dy = {0, 1, 0, -1};
  x += dx[d];
  y += dy[d];
  arc(x, y, 100, 100, PI/2*d+a, PI/2*d + PI*2 -a, PIE);
}
void keyPressed() {
  if (keyCode==RIGHT) d = 0;
  if (keyCode==DOWN) d = 1;
  if (keyCode==LEFT) d = 2;
  if (keyCode==UP) d = 3;
}
week02-9_pacmen_radians_abs_frameCount_if_keyPressed
完成pacmen,關鍵是radians角度單位,if()函式keyPressed
void setup() {
  size(400, 400);
}
int x = 200, y = 200, d = 0;
void draw() {
  background(255);
  fill(#FFDC0F);
  float a =radians(abs(frameCount%90-45));
  int [] dx = {1, 0, -1, 0};
  int [] dy = {0, 1, 0, -1};
  if(keyPressed) x += dx[d];
  if(keyPressed) y += dy[d];
  arc(x, y, 100, 100, PI/2*d+a, PI/2*d + PI*2 -a, PIE);
}
void keyPressed() {
  if (keyCode==RIGHT) d = 0;
  if (keyCode==DOWN) d = 1;
  if (keyCode==LEFT) d = 2;
  if (keyCode==UP) d = 3;
}




















沒有留言:

張貼留言