2024年12月2日 星期一

week13

 week13_01_animated_background





1.一張一張放,做出動圖背景


程式碼


//week13_01_animated_background

PImage [] img = new PImage[3];

void setup(){

  size(550,370);

  img[0] = loadImage("101.png");

  img[1] = loadImage("102.png");

  img[2] = loadImage("103.png");

}

int I = 0;

void draw(){

  background(img[I]);

  if(frameCount%60==0) I = (I+1)%3;

}


week13_02_animated_background_frameCount_x


1.程式碼for迴圈動圖


程式碼


//week13_02_animated_background_frameCount_x

void setup(){

  size(500,300);//寬度500,2被視1000

}


void draw(){

  background(#FFFFF2);

  float x = (frameCount*5%1000);

  if(x>500) x = 1000-x;//超過500就來回折返

  for(int y=30;y<300;y+=50) {

    ellipse(x,y,30,30);

  }

}


week13_03_animated_background_turkey_pushMatrix_translate_rotate



1.可以用去被網站
2.跟著mouse動

程式碼


//week13_03_animated_background_turkey_pushMatrix_translate_rotate

PImage img;

void setup(){

  size(500,300);

  img = loadImage("turkey.png");

  imageMode(CENTER);

}

void turkey(int x,int y) {

  pushMatrix();

    translate(x,y);

    rotate(radians(frameCount));

    image(img,0,0);

  popMatrix();

}

void draw(){

  background(255);

  turkey(mouseX,mouseY);

  turkey(100,100);

  turkey(400,100);

  turkey(100,200);

  turkey(400,200);

}



week13_04_PShape_gundam_loadShape_obj_mtl_jpg



1.放入3D模型,obj_mtl_jpg


程式碼


///week13_04_PShape_gundam_loadShape_obj_mtl_jpg

PShape gundam;


void setup(){

  size(500, 500, P3D); // 設定視窗大小與 P3D 渲染模式

  gundam = loadShape("Gundam.obj");

}


void draw(){

  shape(gundam, 0, 0, 250, 500);

}


week13_05_PShape_gundam_loadShape_shape_pushMatrix_scale_translate_rotate_popMatrix



1.模型需要上學期教過的,擺好位置


程式碼


///week13_05_PShape_gundam_loadShape_shape_pushMatrix_scale_translate_rotate_popMatrix

PShape gundam;


void setup(){

  size(500, 500, P3D); // 設定視窗大小與 P3D 渲染模式

  gundam = loadShape("Gundam.obj");

}


void draw(){

  background(#BBFF81);

  pushMatrix();

    translate(mouseX,mouseY);

    rotateY(radians(frameCount));

    rotate(radians(180));

    scale(5,5,5);

    shape(gundam, 0, 0); //原本shape(gundam, 0, 0, 250/2, 500/2);

  popMatrix();

}



week13_06_PShape_gundam_loadShape_for_loop



1.用迴圈增加數量

2.很多細節


程式碼


///week13_06_PShape_gundam_loadShape_for_loop

PShape gundam;


void setup(){

  size(500, 500, P3D); // 設定視窗大小與 P3D 渲染模式

  gundam = loadShape("Gundam.obj");

}

void draw(){

  background(#BBFF81);

  drawGundam(mouseX,mouseY);

  for(int x=0;x<=500;x+=500/4) { //寬切成四等分

    drawGundam(x,300);

  }

}

void drawGundam(int x,int y){

  pushMatrix();

    translate(x,y);

    rotateY(radians(frameCount));

    rotate(radians(180));

    scale(5,5,5);

    shape(gundam, 0, 0); //原本shape(gundam, 0, 0, 250/2, 500/2);

  popMatrix();

}


week13_7_tetris_falling



1.簡單掉下來


程式碼


// week13_7_tetris_falling

// 這個程式模擬了一個 Tetris 方塊隨時間下降的動作,並可透過左右方向鍵移動方塊。


void setup(){

  size(300, 600); // 設定畫布大小為 300x600 像素

}


float x = 50, y = 50; // 初始方塊的位置 (x, y)


void draw(){

  background(0); // 將背景設為黑色

  

  fill(153, 0, 204); // 設定方塊的顏色 (紫色)

  

  // 繪製一個由四個小方塊組成的 Tetris 方塊

  rect(x, y-25, 25, 25);   // 上方的方塊

  rect(x+25, y, 25, 25); // 上方右邊的方塊

  rect(x, y, 25, 25);      // 左下角的方塊

  rect(x, y+25, 25, 25);   // 右下角的方塊

  

  // 每 50 幀讓方塊下降 25 像素

  if(frameCount % 50 == 0) {

    y += 25; // 每次下降 25 像素

  }

}


void keyPressed(){

  // 檢測按鍵輸入,左右移動方塊

  if(keyCode == RIGHT) x += 25; // 按右方向鍵,向右移動 25 像素

  if(keyCode == LEFT) x -= 25;  // 按左方向鍵,向左移動 25 像素

}


week13_08_tetris_grid_2d_array_fill_rect



1.用陣列做出背景


程式碼


//week13_08_tetris_grid_2d_array_fill_rext
void setup(){
  size(240,440);
}
void draw(){
  for(int i=0;i<22;i++) {
    for(int j=0;j<12;j++) {
      if(grid[i][j]==1) fill(119,119,119);
      if(grid[i][j]==0) fill(0);
      if(grid[i][j]==2) fill(153,0,204);
      rect(j*20,i*20,20,20);
    }
  }
}

int [][] grid = {
  {1,1,1,1,1,1,1,1,1,1,1,1},
  {1,0,0,0,0,2,0,0,0,0,0,1},
  {1,0,0,0,0,2,2,0,0,0,0,1},
  {1,0,0,0,0,2,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1}
};


week13_9_tetris_color_array_c_now


1.定義顏色、填充顏色


程式碼


// week13_9_tetris_color_array_c_now

color[] c = {#000000, #777777, #9900CC, #CCCC00, #00B500, #CC0000}; // 定義顏色


void setup() {

  size(240, 440); // 畫布大小

}


void draw() {

  for (int i = 0; i < 22; i++) { // 行

    for (int j = 0; j < 12; j++) { // 列

      int now = grid[i][j]; // 當前格子數字

      fill(c[now]); // 填充顏色

      rect(j * 20, i * 20, 20, 20); // 畫格子

    }

  }

}




int [][] grid = {

  {1,1,1,1,1,1,1,1,1,1,1,1},

  {1,0,0,0,0,2,0,0,0,0,0,1},

  {1,0,0,0,0,2,2,0,0,0,0,1},

  {1,0,0,0,0,2,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1}

};


week13_10_tetris_falling_if_frameCount_for_for_if



1.碰到底部要停下來


程式碼


// week13_10_tetris_falling_if_frameCount_for_for_if

color[] c = {#000000, #777777, #9900CC, #CCCC00, #00B500, #CC0000}; // 顏色陣列



void setup() {

  size(240, 440); // 畫布大小

}


void draw() {

  // 繪製棋盤

  for (int i = 0; i < 22; i++) {

    for (int j = 0; j < 12; j++) {

      int now = grid[i][j]; // 當前格子數字

      fill(c[now]);         // 填充顏色

      rect(j * 20, i * 20, 20, 20); // 畫格子

    }

  }


  if (frameCount % 50 == 0) { // 每 50 幀執行下落

    int bad = 0; // 開始沒有撞擊

    // 從下到上檢查每一格

    for (int i = 20; i >= 1; i--) {

      for (int j = 1; j < 12-1; j++) {

        if (grid[i][j] == 2) { // 找到移動中的方塊

          if (grid[i + 1][j] != 2 && grid[i + 1][j] != 0) { // 如果到達底部或撞擊靜止方塊

            bad = 1; // 標記無法下移

          }

        }

      }

    }


    if (bad == 0) { // 如果可以下移

      for (int i = 20; i >= 1; i--) {

        for (int j = 1; j < 12-1; j++) {

          if (grid[i][j] == 2) {

            grid[i + 1][j] = 2; // 方塊下移

            grid[i][j] = 0; // 清除原位置

          }

        }

      }

    } else { // 如果無法下移

      for (int i = 20; i >= 0; i--) {

        for (int j = 0; j < 12; j++) {

          if (grid[i][j] == 2) {

            grid[i][j] = 1; // 方塊變為靜止狀態

          }

        }

      }

    }

  }

}




int [][] grid = {

  {1,1,1,1,1,1,1,1,1,1,1,1},

  {1,0,0,0,0,2,0,0,0,0,0,1},

  {1,0,0,0,0,2,2,0,0,0,0,1},

  {1,0,0,0,0,2,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1}

};


week13_11_live_can_move



1.白色活著會動


程式碼



// week13_11_live_can_move

color[] c = {#000000, #777777, #9900CC, #CCCC00, #00B500, #CC0000, #0000CC, #CC9900, #0000CC, #FFFFFF}; // 顏色陣列

int T = 2;


void setup() {

  size(240, 440); // 畫布大小

}


void draw() {

  // 繪製棋盤

  for (int i = 0; i < 22; i++) {

    for (int j = 0; j < 12; j++) {

      int now = grid[i][j]; // 當前格子數字

      fill(c[now]);         // 填充顏色

      rect(j * 20, i * 20, 20, 20); // 畫格子

    }

  }


  if (frameCount % 50 == 0) { // 每 50 幀執行下落

    int bad = 0; // 開始沒有撞擊

    // 從下到上檢查每一格

    for (int i = 20; i >= 1; i--) {

      for (int j = 1; j < 12-1; j++) {

        if (grid[i][j] == 9) { // 找到移動中的方塊

          if (grid[i + 1][j] != 0 && grid[i + 1][j] != 9) { // 如果到達底部或撞擊靜止方塊

            bad = 1; // 標記無法下移

          }

        }

      }

    }


    if (bad == 0) { // 如果可以下移

      for (int i = 20; i >= 1; i--) {

        for (int j = 1; j < 12-1; j++) {

          if (grid[i][j] == 9) {

            grid[i + 1][j] = 9; // 方塊下移

            grid[i][j] = 0; // 清除原位置

          }

        }

      }

    } else { // 如果無法下移

      for (int i = 20; i >= 1; i--) {

        for (int j = 1; j < 12-1; j++) {

          if (grid[i][j] == 9) {

            grid[i][j] = T; // 9代表活著可以動,T方塊變為靜止狀態

          }

        }

      }

    }

  }

}




int [][] grid = {

  {1,1,1,1,1,1,1,1,1,1,1,1},

  {1,0,0,0,0,9,0,0,0,0,0,1},

  {1,0,0,0,0,9,9,0,0,0,0,1},

  {1,0,0,0,0,9,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1}

};


沒有留言:

張貼留言