2024年9月16日 星期一

第二章:

1. week02_1_pacman_radians_mouseX

1-1. 去Github內複製上禮拜 week01_9 的程式碼

1-2. 程式碼

```
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_1_pacman
2-1. 複製week02_1的程式碼
2-2. 新增 frameCount 讓嘴巴的部分動起來
```
void draw() {
    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 draw() {
  float a = frameCount % 180; //超過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_open_close

合併 week02_1 及 week02_3 的程式碼
```
void draw() {
    background(255);
    fill(#861B42);
    for (int x = 0; x < 400; x += 100) {
        for (int y = 0; y < 400; y += 100) {
            float a = frameCount % 180; //超過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);
        }
    }
}
```

week02_5_pacman_if_keyPressed_keyCode
```
void draw(){
  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);
}
```
按「」時,球向上移動

按「」時,球向下移動

按「」時,球向右移動

按「」時,球向左移動

物體的角度變化速度
```
void setup(){
    frameRate(200); //增加速度,每秒跑200影格
}
```

week02_6_pacman_b_direction_from_week02_3

複製 week02_3 的程式碼
新增程式碼
```
void draw(){
    float b = radians(mouseX);
}
```

修改程式碼
```
void draw(){
    arc(x + 50, y + 50, 100, 100, b + 0 + a, b + PI * 2 - a, PIE);
}
```
滑鼠在「左下」的時

滑鼠在「右上」的時



week02_7_pacman_d_direction_void_keyPressed_keyCode
合併 week02_5 及 week02_6 的程式碼
```
float x = 200, y = 200, d = PI; //d是方向
void draw() {
    float a = frameCount % 180; //超過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
複製並簡化 week02_7 的程式碼

```
int x = 200, y = 200, d = 0; //d是方向
void draw() {
  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_pacman_radians_abs_frameCount_if_keyPressed
複製並修改 week02_8 的程式碼

```
void draw(){
    float a = radians(abs(frameCount % 90 -45));
    if(keyPressed) x += dx[d];
    if(keyPressed) y += dy[d];
```
按「」時,球向

按「」時,球向上

按「」時,球向左

按「」時,球向右

沒有留言:

張貼留言