2024年9月16日 星期一

SY-BlingBangBang Week02 互動的小遊戲

  [TODO]

上課內容:

小精靈(手動嘴巴開合)

複製上週 week01_9_for_x_for_y_arc 的程式碼

// File_Preferences, 字型放大
// week02_1_pacman_radians_mouseX
void setup(){
  size(400,400);
}
void draw(){
  background(255);
  fill(#74AFFF); //填充藍色
  float a = radians(mouseX); //radians 角度單位
  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(#7D67AD); //填充紫色
  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 想要照著時間,自動張嘴
void setup(){
  size(400,400);
}
void draw(){
  background(255);
  fill(#7D67AD); //填充紫色
  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(#7D67AD); //填充紫色
  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,寬,高,開始,結束,蘋果派的畫法
    }
  }
}


按鍵移動球(正常速度)
// week02_5_pacman_if_keyPressed_keyCode
void setup(){
  size(400,400);
}
int x=200, y=200; //pacman座標
void draw(){
  background(255);
  fill(#7D67AD);
  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);
}

按鍵移動球(加快速度frameRate)
// week02_5_pacman_if_keyPressed_keyCode
void setup(){
  size(400,400);
  frameRate(200); //加快速度
}
int x=200, y=200; //pacman座標
void draw(){
  background(255);
  fill(#7D67AD);
  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_pacman_b_direction_from_week02_3
void setup(){
  size(400,400);
}
void draw(){
  background(255);
  fill(#7D67AD); //填充紫色
  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_pacman_d_direction_void_keyPressed_keyCode
void setup(){
  size(400,400);
}
float x=200, y=200, d=PI/2*0;
void draw(){
  background(255);
  fill(#7D67AD); //填充紫色
  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_pacman_dx_dy_d_void_keyPressed
void setup(){
  size(400,400);
}
int x=200, y=200, d=0;
void draw(){
  background(255);
  fill(#7D67AD); //填充紫色
  float a=0.5;
  int []dx = {1, 0, -1, 0}; //x++, x, x--, x
  int []dy = {0, 1, 0, -1}; //y++, y, y--, y
  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_pacman_radians_abs_frameCount_if_keyPressed
void setup(){
  size(400,400);
}
int x=200, y=200, d=0;
void draw(){
  background(255);
  fill(#7D67AD); //填充紫色
  float a=radians(abs(frameCount%90-45));
  int []dx = {1, 0, -1, 0}; //x++, x, x--, x
  int []dy = {0, 1, 0, -1}; //y++, y, y--, y
  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;
}



沒有留言:

張貼留言