2012年11月13日 星期二

期中小專題--拋雞蛋

1, 遊戲設計:
雞蛋拋拋樂
一開雞蛋在最下面的籃子,
只要按滑鼠右鍵,便能使雞蛋向上拋,
拋到籃子裡則得一分,到外面則直接結束遊戲 : D

一旦雞蛋在中間籃子準備往最上面的籃子拋時,
雞蛋進到最上面的籃子則籃子會自動往下移一格,
然後最上面產生新的籃子;
若是從中間的籃子往上拋到最上面的籃子失敗時,
則遊戲直接結束。

2, 程式碼:
import ddf.minim.*;
AudioPlayer player;
Minim ponyo;

int score1=0, a=0, b=0, c=0, d=0, s=0;
PImage Background;  //背景
PImage life;  //生命值小雞
PImage die;  //死小雞
PImage egg;  //雞蛋
PImage score;  //"分數"字樣
PImage num[] = new PImage[10];  //分數數字0-9
PImage over;

//籃子
PImage basket1;
PImage basket2;
PImage basket3;
float e=random(3)+1, f=random(3)+1, g=random(3)+1; //速度
float b1X=random(420)+90, b2X=random(420)+90, b3X=random(420)+90;  //籃子原X座標
float b1Y=650, b2Y=450, b3Y=250;  //籃子原Y座標
float eX=285, eY=640;  //雞蛋原座標

float w=0;
int sw=0;

void mouseClicked() {
  w=1;
  sw=1;
  if(eY&rt;250)
  eY-=200;
  score1+=1;
}

void setup() {
  ponyo = new Minim(this);
  player = ponyo.loadFile("Ponyo.mp3", 2048);
  player.play();
  
  size(600, 700);
  Background = loadImage("background_sky.png");
  life = loadImage("life.png");
  die = loadImage("die.png");
  score = loadImage("score.png");
  for (int i=0;i<10;i++)
  {
    num[i]=loadImage(i+".png");
  }
  egg = loadImage("egg.png");

  basket1 = loadImage("basket.png");
  basket2 = loadImage("basket.png");
  basket3 = loadImage("basket.png");
  
  over = loadImage("game-over.png");
}

void draw() {
  //背景
  image(Background, 0, 0, 600, 900);
  

  //雞蛋
  image(egg, eX, eY, 40, 50);
  //籃子
  image(basket1, b1X, b1Y, 90, 50);
  b1X+= e;
  if (sw==0) eX=b1X+25;
  if (b1X&rt;510) {b1X=510;e*=-1;}
  if (b1X<0) {b1X=0;e*=-1;}
  image(basket2, b2X, b2Y, 90, 50);
  b2X+= f;
  if (b2X&rt;510) {b2X=510;f*=-1;}
  if (b2X<0) {b2X=0;f*=-1;}
  image(basket3, b3X, b3Y, 90, 50);
  b3X+= g;
  if (b3X&rt;510) {b3X=510;g*=-1;}
  if (b3X<0) {b3X=0;g*=-1;}
//==============================
  if (b1Y==450 && eX<b1X+45 && eX&rt;b1X-45 && eY<475 && eY&rt;425) {
    //雞蛋位置
    eY=b1Y;
    eX=b1X+25;
  }else if (b2Y==450 && eX<b2X+45 && eX&rt;b2X-45 && eY<475 && eY&rt;425) {
    //雞蛋位置
    eY=b2Y;
    eX=b2X+25;
  }else if (b3Y==450 && eX<b3X+45 && eX&rt;b3X-45 && eY<475 && eY&rt;425) {
    //雞蛋位置
    eY=b3Y;
    eX=b3X+25;
  }else if(b1Y== 250 && eX<b1X+45 && eX&rt;b1X-45 && eY<275 && eY&rt;225){
    eY=b1Y;
    eX=b1X+25;
    w=b2Y;
    b2Y=b1Y;
    b1Y=b3Y;
    b3Y=w;
    eY+=200;
  }else if(b2Y== 250 && eX<b2X+45 && eX&rt;b2X-45 && eY<275 && eY&rt;225){
    eY=b2Y;
    eX=b2X+25;
    w=b2Y;
    b2Y=b1Y;
    b1Y=b3Y;
    b3Y=w;
    eY+=200;
  }else if(b3Y== 250 && eX<b3X+45 && eX&rt;b3X-45 && eY<275 && eY&rt;225){
    eY=b3Y;
    eX=b3X+25;
    w=b2Y;
    b2Y=b1Y;
    b1Y=b3Y;
    b3Y=w;
    eY+=200;
  }else if(eY==640){
    eY=640;
  }else if(eY==b1Y && eX<b1X-25 || eX&rt;b1X+25){ 
    for(int i=0;i<500;i++)eY--;
    image(over, 0, 0, 600, 700);
    /*for(int j=0;j<2;j++){
      if(score1&rt;0)score1-=1;
    }*/
  }else if(eY==b2Y && eX<b2X-25 || eX&rt;b2X+25){ 
    for(int i=0;i<500;i++)eY--;
    image(over, 0, 0, 600, 700);
    /*for(int j=0;j<2;j++){
      if(score1&rt;0)score1-=1;
    }*/
  }else if(eY==b3Y && eX<b3X-25 || eX&rt;b3X+25){ 
    for(int i=0;i<500;i++)eY--;
    image(over, 0, 0, 600, 700);
    /*for(int j=0;j<2;j++){
      if(score1&rt;0)score1-=1;
    }*/
  }
  
  //生命值(小雞)
  //image(life, 0, 30, 70, 50);
  //image(life, 80, 30, 70, 50);
  //image(life, 160, 30, 70, 50);
  //分數
  image(score, 350, 30, 100, 50);
  image(num[score1/1000], 455, 30, 30, 50);
  image(num[score1/100%10], 485, 30, 30, 50);
  image(num[score1/10%10], 515, 30, 30, 50);
  image(num[score1%10], 545, 30, 30, 50);
}
3, 圖片展示:



4, 影片展示:

5, 問題檢討和心得感想:
問題 ↓
最一開始碰到的問題是,要怎麼讓雞蛋往上拋,且有正常的動畫效果,後來的問題則是該如何使不同的籃子從不同的起始點開始移動,並且每個籃子都做不同的速度移動,好不容易都解決了,卻發現無法使籃子和雞蛋同時往下移以產生新的籃子,在這部分卡關了好久,最後終於想到解決辦法,但是雞蛋卻無法做動畫,很傷心 :(

改進 ↓
希望可以把雞蛋的動畫做好,然後關於計分的地方可以再作好一點,並且讓"生命值小雞"可以記錄,如此便能使每個玩家有三條命,不會一個不小心遊戲就結束了。
另外希望畫面可以在精緻豐富一些,例如在最一開始設計一個進入和可以選擇的介面,然後遊戲中的背景音樂能隨分數的增加而改變,也希望可以隨分數的增加來提高遊戲的難易度,最後希望結束畫面再漂亮一點~

心得 ↓
這個作業讓大家都好緊張,然後碰到困難就很慌亂,幸好有同學、學長姐和老師的幫助,才讓我們得以繼續下去,真的很感謝。
和小隊員一起完成一件作品的感覺好棒,過程中也好好玩,雖然目前沒有達到剛開始所設立的目標,但是我相信我們可以的 : D
然後發現任何事情真的都是要花時間和心力去完成,不可能有花少少時間就得到成效的事情。下次會再努力,並且提早時間開始準備!

謝謝大家:D

沒有留言:

張貼留言