2023年11月17日 星期五

Week07賴奕廷

*step01

 畫一個背景,滑鼠畫黑線放開消失:

void setup(){   size(400,400); } void draw(){   if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY); } void mouseReleased(){   background(255); }
畫鬼走向人物:
void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void draw(){   ellipse(200,200,15,15);   if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);   ellipse(ghostX,ghostY,15,15);   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   background(255); } 畫點有殘影,沒有:
ArrayList<PVector> pt=new ArrayList<PVector>(); void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void mouseDragged(){   pt.add(new PVector(mouseX,mouseY)); } void draw(){   background(255);   ellipse(200,200,15,15);   //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);   for(int i=0;i<pt.size();i++){     PVector p = pt.get(i);     ellipse(p.x,p.y,3,3);   }   ellipse(ghostX,ghostY,15,15);   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   background(255); }
*step02
資料結構,滑鼠放開用remove:
ArrayList<PVector> pt=new ArrayList<PVector>(); void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void mouseDragged(){   pt.add(new PVector(mouseX,mouseY)); } void draw(){   background(255);   ellipse(200,200,15,15);   //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);   for(int i=0;i<pt.size();i++){     PVector p = pt.get(i);     ellipse(p.x,p.y,3,3);   }   ellipse(ghostX,ghostY,15,15);   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   for(int i=pt.size()-1;i>=0;i--){     pt.remove(i);   } } 變成畫線,到過來迴圈,+1-1對消:
ArrayList<PVector> pt=new ArrayList<PVector>(); void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void mouseDragged(){   pt.add(new PVector(mouseX,mouseY)); } void draw(){   background(255);   ellipse(200,200,15,15);   //if(mousePressed)line(mouseX,mouseY,pmouseX,pmouseY);   for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     line(p.x,p.y,p2.x,p2.y);   }   ellipse(ghostX,ghostY,15,15);   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   for(int i=pt.size()-1;i>=0;i--){     pt.remove(i);   } } 累積x的移動量、y的移動量變顏色,加粗,如果橫線就變紅色,其餘黑線:
ArrayList<PVector> pt=new ArrayList<PVector>(); void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void mouseDragged(){   pt.add(new PVector(mouseX,mouseY)); } void draw(){   background(255);   ellipse(200,200,15,15);    ellipse(ghostX,ghostY,15,15);   strokeWeight(4);   float dpx=0,dpy=0;   for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     dpx+=abs(p2.x-p.x);     dpy+=abs(p2.y-p.y);   }     if(dpx>100&&dpy<40) stroke(255,0,0);     else stroke(0);     for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     line(p.x,p.y,p2.x,p2.y);   }   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   for(int i=pt.size()-1;i>=0;i--){     pt.remove(i);   } }
*step03
多一條藍色線,使人物跟鬼變細和不要變色:
ArrayList<PVector> pt=new ArrayList<PVector>(); void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void mouseDragged(){   pt.add(new PVector(mouseX,mouseY)); } void draw(){   background(255);   strokeWeight(1);   stroke(0);ellipse(200,200,15,15);   stroke(0);ellipse(ghostX,ghostY,15,15);   strokeWeight(4);   float dpx=0,dpy=0;   for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     dpx+=abs(p2.x-p.x);     dpy+=abs(p2.y-p.y);   }     if(dpx>100&&dpy<40) stroke(255,0,0);     else if(dpx<40&&dpy>100) stroke(0,0,255);     else stroke(0);     for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     line(p.x,p.y,p2.x,p2.y);   }   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   for(int i=pt.size()-1;i>=0;i--){     pt.remove(i);   } } 增加右下變綠線,但是太快會跑不出來:
ArrayList<PVector> pt=new ArrayList<PVector>(); void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void mouseDragged(){   pt.add(new PVector(mouseX,mouseY)); } void draw(){   background(255);   strokeWeight(1);   stroke(0);ellipse(200,200,15,15);   stroke(0);ellipse(ghostX,ghostY,15,15);   strokeWeight(4);   float dpx=0,dpy=0;   int rightdown=0;   for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     dpx+=abs(p2.x-p.x);     dpy+=abs(p2.y-p.y);     if(p2.x-p.x>0&&p2.y-p.y>0) rightdown++;   }     if(dpx>100&&dpy<40) stroke(255,0,0);     else if(dpx<40&&dpy>100) stroke(0,0,255);     else if(rightdown>30) stroke(0,255,0);     else stroke(0);     for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     line(p.x,p.y,p2.x,p2.y);   }   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   for(int i=pt.size()-1;i>=0;i--){     pt.remove(i);   } } 小修改綠線變色:
ArrayList<PVector> pt=new ArrayList<PVector>(); void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void mouseDragged(){   pt.add(new PVector(mouseX,mouseY)); } void draw(){   background(255);   strokeWeight(1);   stroke(0);ellipse(200,200,15,15);   stroke(0);ellipse(ghostX,ghostY,15,15);   strokeWeight(4);   float dpx=0,dpy=0;   float rightdown=0;   for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     dpx+=abs(p2.x-p.x);     dpy+=abs(p2.y-p.y);     if(p2.x-p.x>0&&p2.y-p.y>0) rightdown+=sqrt(dpx*dpx+dpy*dpy);   }     if(dpx>100&&dpy<40) stroke(255,0,0);     else if(dpx<40&&dpy>100) stroke(0,0,255);     else if(rightdown>150) stroke(0,255,0);     else stroke(0);     for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     line(p.x,p.y,p2.x,p2.y);   }   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   for(int i=pt.size()-1;i>=0;i--){     pt.remove(i);   } } 修改成勾勾才會變綠色:
ArrayList<PVector> pt=new ArrayList<PVector>(); void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void mouseDragged(){   pt.add(new PVector(mouseX,mouseY)); } void draw(){   background(255);   strokeWeight(1);   stroke(0);ellipse(200,200,15,15);   stroke(0);ellipse(ghostX,ghostY,15,15);   strokeWeight(4);   float dpx=0,dpy=0;   float rightdown=0,rightup=0;   boolean green_part1=false,green_ok=false;   for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     dpx+=abs(p2.x-p.x);     dpy+=abs(p2.y-p.y);     if(p2.x-p.x>0&&p2.y-p.y>0) rightdown +=sqrt(dpx*dpx+dpy*dpy);     if(p2.x-p.x>0&&p2.y-p.y<0) rightup +=sqrt(dpx*dpx+dpy*dpy);     ellipse(p.x,p.y,10,10);     if(green_part1==false&&rightdown>150) green_part1=true;     else if(green_part1==true&&rightup>150) green_ok=true;   }     println(rightdown);     if(dpx>100&&dpy<40) stroke(255,0,0);     else if(dpx<40&&dpy>100) stroke(0,0,255);     else if(green_ok) stroke(0,255,0);     else stroke(0);     for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     line(p.x,p.y,p2.x,p2.y);   }   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   for(int i=pt.size()-1;i>=0;i--){     pt.remove(i);   } } 修改成限定往右下角的勾勾,其他勾勾還不能辨識不會變色:
ArrayList<PVector> pt=new ArrayList<PVector>(); void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void mouseDragged(){   pt.add(new PVector(mouseX,mouseY)); } void draw(){   background(255);   strokeWeight(1);   stroke(0);ellipse(200,200,15,15);   stroke(0);ellipse(ghostX,ghostY,15,15);   strokeWeight(4);   float dpx=0,dpy=0;   float rightdown=0,green_rightup=0;   boolean green_part1=false,green_ok=false;   for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     dpx+=abs(p2.x-p.x);     dpy+=abs(p2.y-p.y);     if(p2.x-p.x>0&&p2.y-p.y>0) rightdown +=sqrt(dpx*dpx+dpy*dpy);     if(green_part1&&p2.x-p.x>0&&p2.y-p.y<0) green_rightup +=sqrt(dpx*dpx+dpy*dpy);     ellipse(p.x,p.y,10,10);     if(green_part1==false&&rightdown>150) green_part1=true;     else if(green_part1==true&&green_rightup>150) green_ok=true;   }     println(rightdown);     if(dpx>100&&dpy<40) stroke(255,0,0);     else if(dpx<40&&dpy>100) stroke(0,0,255);     else if(green_ok) stroke(0,255,0);     else if(green_part1) stroke(0,128,0);     else stroke(0);     for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     line(p.x,p.y,p2.x,p2.y);   }   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   for(int i=pt.size()-1;i>=0;i--){     pt.remove(i);   } } 增加另外一種勾勾變黃線:
ArrayList<PVector> pt=new ArrayList<PVector>(); void setup(){   size(400,400);   background(255); } float ghostX=400,ghostY=20; void mouseDragged(){   pt.add(new PVector(mouseX,mouseY)); } void draw(){   background(255);   strokeWeight(1);   stroke(0);ellipse(200,200,15,15);   stroke(0);ellipse(ghostX,ghostY,15,15);   strokeWeight(4);   float dpx=0,dpy=0;   float rightdown=0,green_rightup=0;   float rightup=0,yellow_rightdown=0;   boolean green_part1=false,green_ok=false;   boolean yellow_part1=false,yellow_ok=false;   for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     dpx+=abs(p2.x-p.x);     dpy+=abs(p2.y-p.y);     if(p2.x-p.x>0&&p2.y-p.y>0) rightdown +=sqrt(dpx*dpx+dpy*dpy);     if(green_part1&&p2.x-p.x>0&&p2.y-p.y<0) green_rightup +=sqrt(dpx*dpx+dpy*dpy);     if(p2.x-p.x>0&&p2.y-p.y<0) rightup +=sqrt(dpx*dpx+dpy*dpy);     if(yellow_part1&&p2.x-p.x>0&&p2.y-p.y>0) yellow_rightdown +=sqrt(dpx*dpx+dpy*dpy);     if(green_part1==false&&rightdown>150) green_part1=true;     else if(green_part1==true&&green_rightup>150) green_ok=true;     if(yellow_part1==false&&rightup>150) yellow_part1=true;     else if(yellow_part1==true&&yellow_rightdown>150) yellow_ok=true;   }     println(rightdown);     if(dpx>100&&dpy<40) stroke(255,0,0);     else if(dpx<40&&dpy>100) stroke(0,0,255);     else if(green_ok) stroke(0,255,0);     else if(yellow_ok) stroke(255,255,0);     else stroke(0);     for(int i=0;i<pt.size()-1;i++){     PVector p = pt.get(i),p2=pt.get(i+1);     line(p.x,p.y,p2.x,p2.y);   }   float dx=200-ghostX,dy=200-ghostY,len=sqrt(dx*dx+dy*dy);   ghostX+=dx/len/3;   ghostY+=dy/len/3; } void mouseReleased(){   for(int i=pt.size()-1;i>=0;i--){     pt.remove(i);   } }

沒有留言:

張貼留言