2023年10月26日 星期四

小凱 Week07

第一節課

萬聖節快到了,老師邵一個google萬聖節遊戲,透過滑鼠畫符號來打敗敵人,今天要試著做出來看看。

week07-1
第一步用滑鼠按鍵來畫線,要讓它可以重複劃,設一個白色背景去清畫面。
void setup(){
 size(400,400); 
 background(255);
}
void draw(){
 if(mousePressed) line(mouseX,mouseY,pmouseX,pmouseY); 
}
void mousePressed(){
 background(255);
}

week07-2
加上鬼,讓它可以往中間玩家移動。
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 mousePressed(){
 background(255);
}

week07-3
加入上禮拜交的ArrayList的資料結構。
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 mousePressed(){
 background(255);
}

week07-4
在上個程式加上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()-1;i++){
  PVector p=pt.get(i),p2=pt.get(i+1);
  line(p.x,p.y,p2.x,p2.y);//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); 
 }
}

第二節課

week07-5
要把線變色,判定當橫向變化量>100且垂直變化量<40,橫線變成紅色。
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);
 //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(p.x,p.y,3,3);
 }
 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); 
 }
}

week07-6
判定當橫向變化量<40且垂直變化量>100,直線變成藍色,另外再加把兩個圓圈改成不變色。
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 if(dpx>80&&dpy>80) stroke(0,255,0);
 else stroke(0);
 //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(p.x,p.y,3,3);
 }
 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); 
 }
}

week07-7
接著要改變打勾的顏色,先從往下的部分。

week07-8
加上一些修改。

第三節課

week07-9

week07-a
改變打勾顏色跟判斷,把正勾改成綠色。

week07-b
把倒勾改成黃色。
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);
  //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;
  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(dpx>100&&dpy>100) stroke(0,255,0);
 else if(green_ok) stroke(0,255,0);
 //else if(green_part1) stroke(0,128,0);
 else if(yellow_ok) stroke(255,255,0);
 else stroke(0);
 //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(p.x,p.y,3,3);
 }
 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); 
 }
}



沒有留言:

張貼留言