2020年5月17日 星期日

黃姓小女紙寫程式~~Week11

Week 11

1.泡泡排序法 (從小到大的排序方法!!!)

上學期有教過,但一定忘得差不多了,現在就再來重新回味一下吧!

程式碼:
              int [ ]a={9,8,7,6,5,4,3,2,1,0}; 
              void setup(){
                  size(500,800);
                  textSize(36);
                  textAlign(LEFT,TOP);
                  showArray(y);
              }
              int y=0;
              void showArray(int y){
                  for(int i=0;i<10;i++){
                     fill(255);  rect(i*50, y, 50,50);
                     fill(0);         text(a[i], i*50, y);
                  }
              }
              void draw(){

              }

              void mousePressed(){
                 for(int i=0; i<10-1;i++){
                    if(a[i] > a[i+1]){
                       int temp=a[i];
                      a[i]=a[i+1];
                      a[i+1]=temp;
                      fill(255,0,0,128); rect(i*50, y, 100,50);
                    }
                 }
                 y+=50;
                showArray(y);
             }

2.1小精靈
進到今天的主角,先來畫個小精靈,再做出它吃豆子的樣子!
如果有不懂的,請看上禮拜的喔
程式碼:    
              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); ///上禮拜有教,回去複習!
                   angle+=diff;
                   if(angle>60)diff=-1;
                   if(angle<0) diff=+1;
               }
2.2動動小精靈(不完整版)
程式碼: 
             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; 
                  if(keyCode==LEFT)dx=-1;
                  if(keyCode==UP)dy=-1;
                  if(keyCode==DOWN)dy=+1;
             }
2.3動動小精靈(正常版)
程式碼: 
             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;
               }
            }
程式講解:
         2.3因為在換方向的過程中,小精靈臉的角度沒有變,所以加上了dir來轉變角度。

5.小精靈遊戲
有點難喔,認真看!!

程式碼:
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}, ///豆子的座標 左邊為y,右邊為x, };
int X=100,Y=100,dx=1,dy=0,angle=45,diff=2,dir=0;
void setup() { size(800,800); }
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(40+x*80,40+y*80,10,10); ///半徑+一個框框的長度(800/10)*原本的位置 if(dist(X,Y,40+x*80,40+y*80)<40) bean[y][x]=0; ///豆子距離和小精靈小於半徑就消失 } } ///這是畫豆子的
fill(#6FFFD5); arc(X,Y,80,80,radians(dir+angle),radians(dir+360-angle),PIE); angle+=diff; if(angle>60)diff=-1; if(angle<=0)diff=+1; X+=dx; Y+=dy; }
void keyPressed()
{ background(0); if(keyPressed && keyCode==UP){dy=-1;dx=0;dir=270;} if(keyPressed && keyCode==RIGHT){dx=+1;dy=0;dir=0;} if(keyPressed && keyCode==DOWN){dy=+1;dx=0;dir=90;} if(keyPressed && keyCode==LEFT){dx=-1;dy=0;dir=180;} }


沒有留言:

張貼留言