2020年5月8日 星期五

Hello World_Week11

20200508 泡泡排序法&小精靈


一開始我們先複習了之前的泡泡排序法

先把各種不同的數字組合代入





再來讓程式自己隨機產生不同的數字組合



--------------------------------------------------------------------------------------------------------------------------

再來是把之前沒做完的小精靈完成!

一開始先複習一下上次的進度



void setup()
{
  size(400,400);
}
int X=100,Y=100,angle=45,diff=1;
//angle=角度 diff=嘴巴打開的幅度
void draw()
{
  background(0);
  arc(X,Y,80,80,radians(angle),radians(360-angle),PIE);//arc(x,y,寬,高)
  angle+=diff;
  if(angle>60) diff=-1;//如果角度太大,就改成-1
  if(angle<0) diff=1;//如果角度太小,就改成+1
}

--------------------------------------------------------------------------------------------------------------------------

再來要讓小精靈可以移動



void setup()
{
  size(400,400);
}
int X=100,Y=100,angle=45,diff=1,dx=1,dy=0;
//angle=角度 diff=嘴巴打開的幅度 dx=x坐標移動的距離 dy=y坐標移動的距離
void draw()
{
  background(0);
  arc(X,Y,80,80,radians(angle),radians(360-angle),PIE);//arc(x,y,寬,高)
  angle+=diff;
  if(angle>60) diff=-1;//如果角度太大,就改成-1
  if(angle<0) diff=1;//如果角度太小,就改成+1
  X+=dx;
  Y+=dy;
}
void keyPressed()
{
  if(keyCode==RIGHT) dx=1;
  if(keyCode==LEFT) dx=-1;
  if(keyCode==UP) dy=-1;
  if(keyCode==DOWN) dy=1;
}

--------------------------------------------------------------------------------------------------------------------------

前面的小精靈上下移動的時候會左右飄

所以要把控制左右移動的dx變成0




void setup()
{
  size(400,400);
}
int X=100,Y=100,angle=45,diff=2,dx=1,dy=0;
//angle=角度 diff=嘴巴打開的幅度 dx=x坐標移動的距離 dy=y坐標移動的距離
void draw()
{
  background(0);
  arc(X,Y,80,80,radians(angle),radians(360-angle),PIE);//arc(x,y,寬,高)
  angle+=diff;
  if(angle>60) diff=-1;//如果角度太大,就改成-1
  if(angle<0) diff=1;//如果角度太小,就改成+1
  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,angle=45,diff=2,dx=1,dy=0,dir=0;
//angle=角度 diff=嘴巴打開的幅度 dx=x坐標移動的距離 dy=y坐標移動的距離 dir=轉動的角度(0,90,180,270)
void draw()
{
  background(0);
  arc(X,Y,80,80,radians(dir+angle),radians(dir+360-angle),PIE);//arc(x,y,寬,高)
  angle+=diff;
  if(angle>60) diff=-1;//如果角度太大,就改成-1
  if(angle<0) diff=1;//如果角度太小,就改成+1
  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;
  }
}

--------------------------------------------------------------------------------------------------------------------------

最後我們要放豆子讓小精靈吃





//是[y][x]bean 因為上下是y 左右是x
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}};
//在10*10的陣列放豆子讓小精靈吃
void setup()
{
  size(400,400);
}
int X=100,Y=100,angle=45,diff=2,dx=1,dy=0,dir=0;
//angle=角度 diff=嘴巴打開的幅度 dx=x坐標移動的距離 dy=y坐標移動的距離 dir=轉動的角度(0,90,180,270)
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);//ellipse(x,y,寬,高) 畫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);//arc(x,y,寬,高)
  angle+=diff;
  if(angle>60) diff=-2;//如果角度太大,就改成-2
  if(angle<0) diff=2;//如果角度太小,就改成+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;
  }
}

--------------------------------------------------------------------------------------------------------------------------

心得


這次先複習了之前的泡泡排序法,老師弄了一個程式讓我們看泡泡排序法交換數字的詳細步驟,之前本來覺得有點抽象,現在直接圖像化後感覺更清楚了!而且這次終於把之前的小精靈遊戲做完了!可以用自己學過的東西做出一個小時候玩過的遊戲感覺真的很神奇!而且了解運作的原理後發現其實沒有很複雜,希望之後可以再做出更多的遊戲!

沒有留言:

張貼留言