2020年5月8日 星期五

week11

今天老師用P語言示範了泡泡排序法,用圖像的方式來讓我們理解泡泡排序法的過程

因為程式碼太長,所以就不寫上來了

接續上次小精靈的進度,首先先把小精靈的本體畫出來吧

程式碼:
void setup(){
  size(400,400); 
}
int X=100,Y=100,angle=45,diff=1;
void draw(){
  background(0);
  arc(X,Y,80,80,radians(angle),radians(360-angle),PIE);
  angle+=diff;
  if(angle>60)diff=-1;
  if(angle<0)diff=+1;
}

做好小精靈的本體之後,再來就是要讓它動起來。小精靈的移動方式很簡單,就是上下左右。所以我們只需要讓他能夠依據方向鍵的方向移動就好了。所以我們要設定鍵盤的程式碼

程式碼:
void setup(){
  size(400,400); 
}
int X=100,Y=100,dx=1,dy=0,angle=45,diff=2;
void draw(){
  background(0);
  arc(X,Y,80,80,radians(angle),radians(360-angle),PIE);
  angle+=diff;
  if(angle>60)diff=-2;
  if(angle<0)diff=+2;
  X+=dx;Y+=dy;
}
void keyPressed(){
  if(keyCode==RIGHT){ dx=+1;dy=0;} 
  if(keyCode==LEFT){ dx=-1;dy=0;} 
  if(keyCode==UP){ dx=0;dy=-1;} 
  if(keyCode==DOWN){ dx=0;dy=+1;} 
}

現在小精靈可以動了,但是他不會換方向,整隻平移的,這樣不是小精靈。所以要讓他能夠換方向。讓她換方向的方式就是在角度上動手腳

程式碼:
void setup(){
  size(400,400); 
}
int X=100,Y=100,dx=1,dy=0,angle=45,diff=2,dir=0;
void draw(){
  background(0);
  arc(X,Y,80,80,radians(dir+angle),radians(dir+360-angle),PIE);
  angle+=diff;
  if(angle>60)diff=-2;
  if(angle<0)diff=+2;
  X+=dx;Y+=dy;
}
void keyPressed(){
  if(keyCode==RIGHT){ dx=+1;dy=0;dir=0;} 
  if(keyCode==LEFT){ dx=-1;dy=0;dir=180;} 
  if(keyCode==UP){ dx=0;dy=-1;dir=270;} 
  if(keyCode==DOWN){ dx=0;dy=+1;dir=90;} 
}

小精靈的核心就是吃豆子,利用陣列的方式克以上豆子整齊的排在那裏。用陣列畫出一個個的白色小圓。順便幫小精靈弄成黃色。最後讓小精靈經過的時候把豆子刪掉就好了。
程式碼:
int [][]bean={
  {1,1,1,1,1, 1,1,1,1,1},
  {1,1,1,1,1, 1,1,1,1,1},
  {1,1,1,1,1, 1,1,1,1,1},
  {1,1,1,1,1, 1,1,1,1,1},
  {1,1,1,1,1, 1,1,1,1,1},
  
  {1,1,1,1,1, 1,1,1,1,1},
  {1,1,1,1,1, 1,1,1,1,1},
  {1,1,1,1,1, 1,1,1,1,1},
  {1,1,1,1,1, 1,1,1,1,1},
  {1,1,1,1,1, 1,1,1,1,1}};
void setup(){
  size(400,400); 
}
int X=100,Y=100,dx=1,dy=0,angle=45,diff=2,dir=0;
void draw(){
  background(0);
  fill(255);
  for(int y=0;y<10;y++){
    for(int x=0;x<10;x++){
       if(bean[y][x]==0)continue;
       ellipse(20+x*40,20+y*40,10,10);
       if(dist(X,Y,20+x*40,20+y*40)<20)bean[y][x]=0;
    }
  }
  fill(#FFCF0D);arc(X,Y,40,40,radians(dir+angle),radians(dir+360-angle),PIE);
  angle+=diff;
  if(angle>60)diff=-2;
  if(angle<0)diff=+2;
  X+=dx;Y+=dy;
}
void keyPressed(){
  if(keyCode==RIGHT){ dx=+1;dy=0;dir=0;} 
  if(keyCode==LEFT){ dx=-1;dy=0;dir=180;} 
  if(keyCode==UP){ dx=0;dy=-1;dir=270;} 
  if(keyCode==DOWN){ dx=0;dy=+1;dir=90;} 
}

沒有留言:

張貼留言