2022年1月16日 星期日

week 19 期末作品的介紹和心得

 


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行就是當小雞撞到汽車的判定是否合理,以及做扣分、加分的分數計算


整體的遊玩方式就是,先從畫面左方用滑鼠左鍵點選一隻小雞,那麼這隻小雞就是你當下可以操控的,想辦法讓牠安全的過馬路到對面

那麼剩下的雞我們也有給參數,就是不會讓牠們衝出我們設計的柵欄區。

就這樣循環以上步驟,一一將小雞送回右側的炸雞店就算挑戰成功


心得

能利用老師所教的程式,寫出一項完整的遊戲真的很感動,有種多了個技能的感覺,相信自己也有很多的可能性去完成更多小遊戲的挑戰

也謝謝小葉老師,在做這項期末報告之前,有給予我們一點點的提示,去幫助我們做完,相信未來我會加以運用寫程式的技巧,去完成更多難關


沒有留言:

張貼留言