20200508 泡泡排序法&小精靈
一開始我們先複習了之前的泡泡排序法
先把各種不同的數字組合代入
再來讓程式自己隨機產生不同的數字組合
--------------------------------------------------------------------------------------------------------------------------
再來是把之前沒做完的小精靈完成!
一開始先複習一下上次的進度
{
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
}
--------------------------------------------------------------------------------------------------------------------------
再來要讓小精靈可以移動
{
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
{
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;
}
}
--------------------------------------------------------------------------------------------------------------------------
然後前面的小精靈只會改變移動方向 卻不會轉動(嘴巴都朝同一邊)
所以要讓嘴巴的方向跟著移動的方向一起改變
{
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;
}
}
--------------------------------------------------------------------------------------------------------------------------
最後我們要放豆子讓小精靈吃
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;
}
}
--------------------------------------------------------------------------------------------------------------------------
心得
這次先複習了之前的泡泡排序法,老師弄了一個程式讓我們看泡泡排序法交換數字的詳細步驟,之前本來覺得有點抽象,現在直接圖像化後感覺更清楚了!而且這次終於把之前的小精靈遊戲做完了!可以用自己學過的東西做出一個小時候玩過的遊戲感覺真的很神奇!而且了解運作的原理後發現其實沒有很複雜,希望之後可以再做出更多的遊戲!













沒有留言:
張貼留言