2024年12月9日 星期一

Week14 快要放假了

 1.第一節上課

//week14_1_draw_lines_void_mouseDragged_mouseButton_LEFT_RIGHT

void setup(){

  size(500,500);

}

int x = -1,y =  -1;

void draw(){

  if(x!=-1 ){

    ellipse(x,y,1,1);

    y++;//往下滴(x,y)座標中,y慢慢變大,就是往下滴的感覺

  }

}

void mouseDragged(){//要用右鍵拖曳,才會滴下噁心的水滴

  if(mouseButton == LEFT)line(mouseX,mouseY,pmouseX,pmouseY);

  if(mouseButton == RIGHT){

    x = mouseX;

    y = mouseY;

  }

}


左鍵畫線右鍵滴水


//week14_2_draw_lines_loadPixels_pixels_updatePixels
void setup(){
  size(500,500);
  background(255);//背景設成白色
}
void draw(){
  //pixels
}
void mouseDragged(){
  if(mouseButton==LEFT){//在左鍵dragged拖曳時
     line(mouseX,mouseY,pmouseX,pmouseY);//本來的線,是灰黑色的,不是白色
     loadPixels();//取出畫面的像素
     //println(pixels[0]);//白色是-1 其實是color(255,255,255,255)
     for(int i=0;i < width*height;i++){//全部的點,都去巡一下色彩
       if(pixels[i] != -1)pixels[i] = color(random(255),random(255),random(255));
     }//如果不是白色就是有畫圖碰到的pixels,都變成亂數的彩色
     updatePixels();//若有修改,要再放回去
  }
}

//week14_3_draw_lines_rain_PImage_createImage_img_loadPixels_pixels_updatePixels
PImage img;
void setup(){
  size(500,500);
  img = createImage(500,500,RGB);
  img.loadPixels();
  for(int i=0;i<500*500;i++)img.pixels[i] = color(#FFFFF2);//-14
  img.updatePixels();
}
int x= 250,y=0;
void draw(){
  background(img);
  ellipse(x,y,20,20);
  if(y<498 && img.pixels[x+y*500]==-14)y++;
}
void mouseDragged(){
  background(img);
  line(mouseX,mouseY,pmouseX,pmouseY);
  loadPixels();
  img.loadPixels();
  for(int i =0;i<500*500;i++)img.pixels[i] = pixels[i];
  img.updatePixels();
  updatePixels();
}

2.第二節上課
//week14_04_draw_lines_rain_ArrayList_PVector_p_pp
PImage img;
void setup(){
  size(500,500);
  img = createImage(500,500,RGB);
}//換黑背景
ArrayList<PVector> p = new ArrayList<PVector>();
void draw(){
  background(img);
  //if(y<498 && img.pixels[x+y*500]==0)y++;
  for(PVector pp :p){
    ellipse(pp.x,pp.y,20,20);
    if(pp.y<498 && img.pixels[int(pp.x)+int(pp.y)*500]==-16777216)pp.y++;
    }
}
void mouseDragged(){
  background(img);
  stroke(random(255),random(255),random(255));
  line(mouseX,mouseY,pmouseX,pmouseY);
  loadPixels();
  img.loadPixels();
  for(int i =0;i<500*500;i++)img.pixels[i] = pixels[i];
  img.updatePixels();
  updatePixels();
  for(PVector pp: p){
    ellipse(pp.x,pp.y,20,20);
  }
}
void mousePressed(){
  if(mouseButton==RIGHT){
    p.add(new PVector(mouseX,mouseY));
  }
}


3.第三節上課
//week14_5_draw_lines_myFloodFill_x_y_c1_c2_pixels_isOK
void setup(){
  size(500,500);
  background(#FFFFF2);//先畫淡黃色背景
}
void draw(){
  if(mousePressed && mouseButton==LEFT)line(mouseX,mouseY,pmouseX,pmouseY);
  if(mousePressed && mouseButton==RIGHT){
    loadPixels();
    color c1 = pixels[mouseX+mouseY*500];
    color c2 = color(random(255),random(255),random(255));
    myFloodFill(mouseX,mouseY,c1,c2);
    updatePixels();
  }
}
boolean isOK(int x,int y,color c){
  if(x<0 || y<0|| x>=500||y>=500)return false;
  if(pixels[x+y*500]!=c)return false;
  return true;
}
void myFloodFill(int x,int y, color c1,color c2){
  pixels[x+y*500] = c2;
  if(isOK(x+1,y,c1))myFloodFill(x+1,y,c1,c2);
  if(isOK(x-1,y,c1))myFloodFill(x-1,y,c1,c2);
  if(isOK(x,y+1,c1))myFloodFill(x,y+1,c1,c2);
  if(isOK(x,y-1,c1))myFloodFill(x,y-1,c1,c2);
}

//week14_6_cute_cursor
void setup(){
  size(500,500);
  PImage img = loadImage("i");
  cursor(img);
  //先畫淡黃色背景
}
void draw(){
  background(#FFFFF2);
}


4.上傳github


沒有留言:

張貼留言