https://www.youtube.com/watch?v=RbMsCHvwbFs
附上程式碼
PImage Lgg,Rgg,bg,kfc;
int score=0;
boolean pass = false,dead = false;
PImage []imgCar=new PImage[8];
float [] carX = new float[10];
float [] carY = new float[10];
int [] r = new int[10];
int [] speed = new int[10];
int chkID=0,notID=0;
float []chkX=new float[10];
float []chkY=new float[10];
float []chkVX=new float[10];
float []chkVY=new float[10];
boolean[]run=new boolean[10];
int Mx=mouseX,My=mouseY;
void setup()
{
size(800,600);
Lgg=loadImage("ChickL.png");
Rgg=loadImage("ChickR.png");
bg=loadImage("bg2.png");
kfc=loadImage("LFC.png");
imgCar[0]=loadImage("car1.png");
imgCar[1]=loadImage("car2.png");
imgCar[2]=loadImage("car3.png");
for(int i=0;i<10;i++){
chkX[i]=random(10,200);
chkY[i]=random(10,600);
chkVX[i]=random(-2,2);
chkVY[i]=random(-2,2);
}
for(int i=0;i<10;i++)
{
carX[i] = random(325,570);
carY[i] = random(50,100)*i;
}
for(int i=0;i<10;i++)
{
r[i] = int(random(3));
}
for(int i=0;i<10;i++)
{
speed[i] = int(random(6,10));
}
}
void draw()
{
image(bg,0,0,800,600);
image(kfc,590,160,200,250);
Mx=mouseX;
text(Mx,2,30);
My=mouseY;
text(My,50,30);
textSize(20);
text("Fried Chicken:"+score,610,50);//分數
for(int i=0;i<8;i++)
{
if(dist(chkX[chkID],chkY[chkID],carX[i],carY[i])<=30)
{
dead = true;
}
if(dead == true)
{
chkX[chkID]=1000;
chkY[chkID]=1000;
image(kfc,590,160,200,250);
dead=false;
}
}//車禍
for(int i=0;i<10;i++){
if(chkID==i){
strokeWeight(3);
}
else {
strokeWeight(1);
}
fill(255);
ellipse(chkX[i],chkY[i],5,5);
chkX[i]+=chkVX[i];
chkY[i]+=chkVY[i];
if(chkY[i]<0)chkVY[i]= abs(chkVY[i]);
if(chkY[i]>560)chkVY[i]= -abs(chkVY[i]);
if(chkX[i]<0)chkVX[i]= abs(chkVX[i]);
if(run[i]==false && chkX[i]>180)chkVX[i]= -abs(chkVX[i] );
if(chkVX[i]>=0)image(Rgg,chkX[i]-12,chkY[i]-12);
else if(chkVX[i]<=0)image(Lgg,chkX[i]-12,chkY[i]-12);
}
for(int i=0;i<7;i++)
{
int now=r[i];
int s=speed[i];
image(imgCar[now], carX[i], carY[i]);
carY[i]+=s;
if (carY[i]>600)
{
carY[i]=-100;
carX[i]=random(325, 570);
}
}
if(chkX[chkID]>640 && chkX[chkID]<740 && chkY[chkID]>210 && chkY[chkID]<340){
pass = true;
}
if(pass == true)
{
score++;
chkX[chkID]=1000;
chkY[chkID]=1000;
image(kfc,590,160,200,250);
pass=false;
}
}
void keyPressed()
{
if(keyCode == RIGHT)
{
chkVX[chkID]=3;
chkVY[chkID]=0;
}
if(keyCode == LEFT)
{
chkVX[chkID]=-3;
chkVY[chkID]=0;
}
if(keyCode == UP)
{
chkVY[chkID]=-3;
chkVX[chkID]=0;
}
if(keyCode == DOWN)
{
chkVY[chkID]=3;
chkVX[chkID]=0;
}
}
void mousePressed()
{
for(int i=0;i<10;i++){
if(dist(mouseX,mouseY,chkX[i],chkY[i])<10){
chkID=i;
run[chkID]=true;
}
}
}
遊戲介紹
想必大家小時候都有玩過小雞過馬路吧,我們也很喜歡所以就試著用PROCESSING去寫寫看
第1行~第18行整個都是在對遊戲裡的物件做宣告,像是遊戲裡的柵欄、小雞、滑鼠和上下左右去進行操控
為了還原小雞過馬路當下的緊張感,我們也在第103~第109行做了車子隨機亂數產生,
第68行~第82行就是當小雞撞到汽車的判定是否合理,以及做扣分、加分的分數計算
整體的遊玩方式就是,先從畫面左方用滑鼠左鍵點選一隻小雞,那麼這隻小雞就是你當下可以操控的,想辦法讓牠安全的過馬路到對面
那麼剩下的雞我們也有給參數,就是不會讓牠們衝出我們設計的柵欄區。
就這樣循環以上步驟,一一將小雞送回右側的炸雞店就算挑戰成功
心得
能利用老師所教的程式,寫出一項完整的遊戲真的很感動,有種多了個技能的感覺,相信自己也有很多的可能性去完成更多小遊戲的挑戰
也謝謝小葉老師,在做這項期末報告之前,有給予我們一點點的提示,去幫助我們做完,相信未來我會加以運用寫程式的技巧,去完成更多難關
沒有留言:
張貼留言