2021年12月20日 星期一

week 09 期末作業:打蟑螂(補交筆記)


蟑螂還在孵蛋,請稍後。


圖(1)黑點是主角蟑螂,透明圈圈是我們要攻擊蟑螂的藍白拖。


圖(2)增加Time 和 Score機制,讓遊戲看起更豐富。


圖(3)是遊戲結束的介面。


圖(1)

程式碼如下:

float x,y,vx,vy;
void setup(){
  size(300,300);
  generateCockroach();
}


void draw(){
  background(128);
  fill(0);//蟑螂顏色
  ellipse(x,y,10,10);
  x+=vx;  y+=vy;//若超過左邊界、右邊界,則會隨機產生蟑螂。
  if(x<0 || y<0||x>300||y>300)generateCockroach();//不管邊界x,y<0或x,y>300,都會產生新的蟑螂。
  noFill(); ellipse(mouseX,mouseY,80,80);//產生藍白拖。
  if(mousePressed && dist(mouseX,mouseY,x,y)<40)//如果藍白拖拍打蟑螂時,蟑螂的x,y座標小於40,則死掉。
  generateCockroach();//死後產生新的蟑螂。
  if(frameCount%10==0){//每一秒,改一次角度
    float angle = atan2(vy,vx);
    //float angle2=(angle+radians(90));//時間到就轉90度。
    float angle2=(angle+radians(random(-30,30)));//時間到就轉30度。
    vx =cos(angle2);
    vy =sin(angle2);
    }
  }



void generateCockroach(){
  int edge=int (random(4));//4個邊
  if(edge==0){
  x=300;y=random(300);vx=-random(1,3);vy=random(-3,+3);
  }else if(edge==1){
    x=random(300);y=300;vx=-random(-3,3);vy=random(1,3);
  }else if(edge==2){
    x=0;y=random(300);vx=random(1,3);vy=random(-3,+3);
  }else if(edge==3){
    x=random(300);y=0;vx=random(-3,3);vy=random(1,3);
  }
}


圖(2)


 
圖(3)
程式碼如下:

float x,y,vx,vy,x2,y2,vx2,vy2; int count=600;///計時器的總共時間 int c=100; int score=0; PFont myFont;///讀入字體 void setup(){ size(500,500); generateCockroach();//一般的蟑螂 generateCockroach2();//特別的蟑螂 fill(255,0,0); textSize(80); myFont = createFont("微軟正黑體",30);///中文輸入法程式碼 } void draw(){ background(128); fill(0);//蟑螂顏色 ellipse(x,y,10,10);//蟑螂的大小 x+=vx; y+=vy;//若超過左邊界、右邊界,則會隨機產生一般蟑螂。 x2+=vx2; y2+=vy2;//若超過左邊界、右邊界,則會隨機產生特別蟑螂。 if(x<0 || y<0||x>500||y>500)generateCockroach();//不管邊界x,y<0或x,y>500,都會產生新的蟑螂。 noFill(); ellipse(mouseX,mouseY,50,50);//產生藍白拖。 if(mousePressed && dist(mouseX,mouseY,x,y)<40){ generateCockroach();//死後產生新的蟑螂。 score+=10;///分數加10分 } fill(0);rect(x2,y2,20,20);//特別的蟑螂 if(x2<0 || y2<0||x2>500||y2>500)generateCockroach2();//不管邊界x,y<0或x,y>500,都會產生新的蟑螂。 noFill(); ellipse(mouseX,mouseY,50,50);//產生藍白拖。 if(mousePressed && dist(mouseX,mouseY,x2,y2)<40){ generateCockroach2();//死後產生新的特別蟑螂。 score+=100;///分數加100分 } if(frameCount%10==0){//每一秒,改一次角度 float angle = atan2(vy,vx); //float angle2=(angle+radians(90));//時間到就轉90度。 float angle2=(angle+radians(random(-30,30)));//時間到就轉30度。 vx =cos(angle2);//一般蟑螂 vy =sin(angle2);//一般蟑螂 vx2=sin(angle2);//特別蟑螂 vy2=cos(angle2);//特別蟑螂 } if(count<=0)background(100,50,255); //如果秒數<=0,背景色彩改變。 textFont(myFont); text("分數:"+score,350,45); ///計時器。 if(count<=0){ textFont(myFont,80); text("遊戲結束",80,200); } else { count--; } fill(0); textSize(36); text("Time:" +int(count/60),50,45); ///計時器。 } void generateCockroach(){//一般的蟑螂 int edge=int (random(4));//4個邊 if(edge==0){ x=300;y=random(300);vx=-random(1,3);vy=random(-3,+3); }else if(edge==1){ x=random(300);y=300;vx=-random(-3,3);vy=random(1,3); }else if(edge==2){ x=0;y=random(300);vx=random(1,3);vy=random(-3,+3); }else if(edge==3){ x=random(300);y=0;vx=random(-3,3);vy=random(1,3); } } void generateCockroach2(){///特別的蟑螂 int edge2=int (random(4));//4個邊 if(edge2==0){ x2=300;y2=random(300);vx=-random(1,3);vy=random(-3,+3); }else if(edge2==1){ x2=random(300);y2=300;vx=-random(-3,3);vy=random(1,3); }else if(edge2==2){ x2=0;y2=random(300);vx=random(1,3);vy=random(-3,+3); }else if(edge2==3){ x2=random(300);y2=0;vx=random(-3,3);vy=random(1,3); } }

沒有留言:

張貼留言