2024年9月16日 星期一

week02

程式碼01

 



1.用滑鼠控制角度

///week02-1_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,寬,高,開始,結束

    }

  }

}


程式碼02



1.滑鼠左右控制弧度

///week02-2_pacman_test

void setup(){

  size(400,400);

}

void draw(){

  background(255);

  fill(#FFDC0F);

  float a = radians(mouseX);

  if(a>PI/4) a = a - PI/4;

  arc(200,200,300,300,0+a,PI*2-a,PIE);

}


程式碼03



1.自動開合,並限制弧度


///week02-3_pacman_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);

}


程式碼04




1.和程式碼03一樣,但用雙重FOR迴圈+01和03程式碼完成


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) {

      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+50, y+50, 100, 100, 0+a, PI*2-a, PIE);//改畫弧度

      //X座標,Y,寬,高,開始,結束

    }

  }

}


程式碼05





1.練習用程式碼鍵盤控制上下左右

2.可以在setup函式加frameRate(N); 可以增加速度


void setup(){

  size(400,400);

}

int x = 200,y = 200;

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);

}


程式碼06




1.練習加入b,float b = radians(mouseX); 角度和弧度

2. b加入開始和結束的位置


//week02_06_pacman_b_direction

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);

}


程式碼07









1.維持自動開合,鍵盤上下左右控制方向(要按住)

2. 


//week02_07_pacman_d_direction_void_keyPressed

void setup(){

  size(400,400);

}

float x = 200,y = 200,d=PI/2*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) {

    x--;

    d = PI/2*1;

  }else if(keyCode==LEFT) {

    y++;

    d = PI/2*2;

  }else if(keyCode==UP) {

    y--;

    d = PI/2*3;

  }

}


程式碼08





1. 縮短程式碼

2. 維持自動開合,鍵盤上下左右控制方向,按一下就可以

3. 下個程式碼要解決的問題,固定嘴巴要讓它動起來,按住才動,不要飄 


//week02_08_pacman_dx_dy_d_void_keyPressed

void setup(){

  size(400,400);

}

int x = 200,y = 200,d=0;

void draw(){

  background(#050505);

  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;

}


程式碼09





1. 解決的問題,固定嘴巴要讓它動起來,按住才動,不會飄了 

2. 搞懂藍色新增的程式碼


//week02_09_pacman_rafians_abs_frameCount_if_keyPressed

void setup(){

  size(400,400);

}

int x = 200,y = 200,d=0;

void draw(){

  background(#050505);

  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;

}





沒有留言:

張貼留言