2015年6月27日 星期六

01160873_林瑋真

import ddf.minim.*; Minim minim; AudioPlayer cha,crow,scr,pl; PImage imgman; PImage imgbird; PImage imgbg; PImage imgred; PImage imgdead; float angle=0, manX=131, manY=464, vel=1, dX=0, dY=0; float bird1X[] = new float [1000]; float bird1Y[] = new float [1000]; float bird2X[] = new float [1000]; float bird2Y[] = new float [1000]; int barrier[] = new int [1000]; int manH=226, manW=143; int touch=10; float a=manW/2; void setup() { size(262, 464, P3D); imgbg=loadImage("BG.png"); imgman=loadImage("man.png"); imgbird=loadImage("bird.png"); imgred=loadImage("red.png"); imgdead=loadImage("dead.png"); minim = new Minim(this); cha = minim.loadFile("ChaCha.mp3"); crow = minim.loadFile("crow.mp3"); scr = minim.loadFile("scr.mp3"); pl = minim.loadFile("pl.mp3"); for (int i=0; i<100; i++) { barrier[i] = int (random(0, 4)); } for (int i=1; i<100; i++) { bird1X[i] = int (random(30, 50)); bird1Y[i] = -10 * int (random(1, 1000)); bird2X[i] = int (random(212, 232)); bird2Y[i] = -10 * int (random(1, 1000)); } cha.rewind(); cha.play(); imageMode(CENTER); } int toSmaller=0; int toBigger=0; void draw() { background(imgbg); imageMode(CENTER); pushMatrix(); translate(manX, manY); rotateZ(angle); image(imgman, 0, -30, manH, manW); popMatrix(); dX-=vel*cos(angle); dY-=vel*sin(angle); for (int i=0; i<100; i++) { if (barrier[i]==1) { image(imgbird, bird1X[i], bird1Y[i]+=1, 40, 40); if(angle<1/1.8 && angle>1/2 ) { a/=16; } if(angle<1/1.5 && angle>1/1.8 ) { a/=2; } if(bird1X[i]+30>=manX-a && bird1Y[i]+20>=manY-60 && bird1Y[i]+20<=manY-58) { print("birdtouch1"); crow.rewind(); crow.play(); touch-=1; bird1X[i]=-100; bird1Y[i]=-100; } } if (barrier[i]==2) { image(imgbird, bird2X[i], bird2Y[i]+=1, 40, 40); if(angle<-1/1.8 && angle>-1/2 ) { a/=10; } if(angle<-1/1.5 && angle>-1/1.8 ) { a/=2; } if(bird2X[i]-20<=manX+a && bird2Y[i]+20>=manY-60 && bird2Y[i]+20<=manY-58) { print("birdtouch2"); crow.rewind(); crow.play(); touch-=1; bird2X[i]=10000; bird2Y[i]=10000; } } a=manW/2; textSize(20); fill(0, 0, 160); text("LIFE="+touch,160,25); if(manY<=50) { cha.close(); background(0, 0, 0); textSize(40); fill(250, 150, 0); text("YOU WIN",40,200); pl.rewind(); pl.play(); noLoop(); } if(touch<=0) { dead(); } } if (toSmaller>0) { toSmaller--; manH-=1; manW-=1; } if(toSmaller==1) { for(int i=1;i<80;i++) { manH+=1; manW+=1; } } } void keyPressed() { switch(keyCode) { case RIGHT : angle+=1/100.0; break; case LEFT : angle-=1/100.0; break; case DOWN : toSmaller=80; break; } if (angle>=1/1.5||angle<=-1/1.5) { print("DEAD"); dead(); } if (angle>=1/25||angle<=-1/25) manY-=0.5; } void dead() { cha.close(); background(0, 0, 0); textSize(40); fill(250, 150, 0); text("GAME OVER",15,160); image(imgdead, 150, 320); scr.rewind(); scr.play(); noLoop(); }

進度

1. 碰到左邊的鳥與右邊的鳥,鳥會消失並且LEFRT-1

touch-=1;

遇到問題:如果人旋轉角度或變小,還是碰的到鳥。我們覺

得應該是因為本身的圖片雖縮

但它本身的範圍並未改變。

     解決方法:
         以 float a=manW/2;當基準,只要縮小就讓寬度減 a ex: manX-a

          如果人旋轉,一人旋轉角度來判斷減 a/=10; 或減 a/=2;

if(angle<-1/1.8 && angle>-1/2 ) { a/=10; } if(angle<-1/1.5 && angle>-1/1.8 ) { a/=2; }

2.加入遊戲音樂、win的音樂、game over的音樂、碰的 

音效

import ddf.minim.*; Minim minim; AudioPlayer cha,crow,scr,pl;

minim = new Minim(this); cha = minim.loadFile("ChaCha.mp3"); crow = minim.loadFile("crow.mp3"); scr = minim.loadFile("scr.mp3"); pl = minim.loadFile("pl.mp3");

crow.rewind(); crow.play();

3. win 的場景、game over 的場景

人圖片的範圍碰到遊戲畫面 Y<=50 時就贏了~

if(manY<=50) { cha.close(); background(0, 0, 0); textSize(40); fill(250, 150, 0); text("YOU WIN",40,200); pl.rewind(); pl.play(); noLoop(); }

我們是用函式,只要符合書的條件就呼叫函式

void dead() { cha.close(); background(0, 0, 0); textSize(40); fill(250, 150, 0); text("GAME OVER",15,160); image(imgdead, 150, 320); scr.rewind(); scr.play(); noLoop(); }







FINISH =)



沒有留言:

張貼留言