2022年1月17日 星期一

期末最終成果

 我們的期末作業終於完成了,以下為程式碼

PImage img1,img2,img3,img4,img5,img6,img7,img8,img9,img10,img11,img12,img13,img14,img15,img16,img17,img18,img19,img20,img21,img22,img23,img24,img25,img26,img27,img28,img29,img30;

int remainT=0,state=0,score=0, i=0,now=0;

int []vegaAge={-1,-1,-1,-1};

void setup()

{

  size(500,700);

  img1=loadImage("background1.PNG");

  img2=loadImage("background2.PNG");

  img3=loadImage("background3.PNG");

  img4=loadImage("background4.PNG");

  img5=loadImage("background5.PNG");

  img6=loadImage("squirrel1.PNG");

  img7=loadImage("squirrel2.PNG");

  img8=loadImage("squirrel3.PNG");

  img9=loadImage("squirrel4.PNG");

  img10=loadImage("squirrel5.PNG");

  img11=loadImage("squirrel6.PNG");

  img12=loadImage("squirrel7.PNG");

  img13=loadImage("veg.PNG");

  img14=loadImage("letter.png");

  img15=loadImage("trip.png");

  img16=loadImage("white.png");

  img17=loadImage("back.png");

  img18=loadImage("vege1.png");

  img19=loadImage("vege2.png");

  img20=loadImage("vege3.png");

  img21=loadImage("vege4.png");

  img22=loadImage("vege5.png");

  img23=loadImage("garden.png");

  img24=loadImage("backk.png");

  img25=loadImage("travel.png");

  img26=loadImage("minus.png");

  img27=loadImage("plus.png");

  img28=loadImage("yes.png");

  img29=loadImage("home.png");

  img30=loadImage("222.png");

}


void draw()

{

  if(state==0)//首頁

  {

    if(remainT>=0)//用來做動畫

   {

      remainT++;

      if(remainT<10){image(img1,0,0,500,700);image(img6,100,450,500,350);}

      else if(remainT>10&&remainT<20){image(img2,0,0,500,700);image(img6,100,450,500,350);}

      else if(remainT>20&&remainT<30){image(img3,0,0,500,700);image(img7,100,450,500,350);}

      else if(remainT>30&&remainT<40){image(img4,0,0,500,700);image(img8,100,450,500,350);}

      else if(remainT>40&&remainT<50){image(img5,0,0,500,700);image(img9,100,450,500,350);}

      else if(remainT>50&&remainT<60){image(img1,0,0,500,700);image(img10,100,450,500,350);}

      else if(remainT>60&&remainT<70){image(img1,0,0,500,700);image(img11,100,450,500,350);}

      else if(remainT>70&&remainT<80){image(img1,0,0,500,700);image(img12,100,450,500,350);}

      else if(remainT>80)

      {

        remainT=0;

      }

    }

    image(img13,0,0,120,120);

    image(img15,120,0,120,120);

   }

   else if(state==1)//菜園

   {

      image(img23,0,0,500,700);

      image(img24,0,0,120,120);

      fill(0); textSize(80); image(img19,250,80,100,100);text(":"+score , 350, 150);  

      for(int i=0; i<4; i++){    

        if(vegaAge[i]<0){ image(img20,100+i*100, 500, 10,10);}//empty

        else if(vegaAge[i]<10){ image(img18, 50+i*100, 410, 150,150);}

        else if(vegaAge[i]<20){ image(img19, 50+i*100, 410, 150,150);}

        else  { image(img22, 50+i*100, 410, 150,150);}

        if(frameCount%6==0 && vegaAge[i]>=0) vegaAge[i]++; // 0,1,2.... 60=1秒

       }

   }

   else if(state==2)

   {

     image(img16,0,0,500,700);

     

   }

   else if(state==3)

   {

     image(img25,0,0,500,700);

     image(img24,0,0,120,120);

     image(img26,40,300,150,100);

     image(img27,300,300,150,100);

     image(img28,180,400,150,100);

     fill(0); textSize(100);text(i , 220, 390);

     image(img19,300,20,100,100);

      fill(0); textSize(100);text(":"+now , 400, 100);

   }

   else if(state==4)

   {

     image(img1,0,0,500,700);

     if(remainT>=0)

   {

      remainT++;

      if(remainT<10){image(img1,0,0,500,700);}

      else if(remainT>10&&remainT<20){image(img2,0,0,500,700);}

      else if(remainT>20&&remainT<30){image(img3,0,0,500,700);}

      else if(remainT>30&&remainT<40){image(img4,0,0,500,700);}

      else if(remainT>40&&remainT<50){image(img5,0,0,500,700);}

      else if(remainT>50&&remainT<60){image(img1,0,0,500,700);}

      else if(remainT>60&&remainT<70){image(img1,0,0,500,700);}

      else if(remainT>70&&remainT<80){image(img1,0,0,500,700);}

      else if(remainT>80)

      {

        remainT=0;

      }

    }

    image(img13,0,0,120,120);

    image(img29,120,0,120,120);

   }

   else if(state==5)

   {

     image(img23,0,0,500,700);

      image(img24,0,0,120,120);

      fill(0); textSize(80); image(img19,250,80,100,100);text(":"+score , 350, 150);  

      for(int i=0; i<4; i++){    

        if(vegaAge[i]<0){ image(img20,100+i*100, 500, 10,10);}//empty

        else if(vegaAge[i]<10){ image(img18, 50+i*100, 410, 150,150);}

        else if(vegaAge[i]<20){ image(img19, 50+i*100, 410, 150,150);}

        else  { image(img22, 50+i*100, 410, 150,150);}

        if(frameCount%6==0 && vegaAge[i]>=0) vegaAge[i]++; // 0,1,2.... 60=1秒

       }

   }

   else if(state==6)

   {

     image(img30,0,0,500,700);

     image(img28,180,400,150,100);

     image(img24,0,0,120,120);

   }

}

void mousePressed()

{

  if(state==0)

  {

    if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=1;

    }

    else if (mouseButton == LEFT&&dist(120,0, mouseX, mouseY)<=120)

    {

      state=3;

      i=0;

      now=score;

    }

  }

  else if(state==1)

  {

    if(mouseButton==LEFT){

    for(int i=0; i<4; i++){//空地才能種

      if( vegaAge[i]==-1 && dist(mouseX,mouseY, 100+i*100, 500) < 30 ) vegaAge[i]=0; 

    }

  }else if(mouseButton==RIGHT){//右鍵採收

    for(int i=0; i<4; i++){

      if(dist(mouseX,mouseY, 100+i*100, 500) < 50 ){ 

        if(vegaAge[i]<0) score+=0;//空地不能收

        else if(vegaAge[i]<10) score+=0;//baby

        else if(vegaAge[i]<20) score+=1;//child

        else score+=0;//bad!! too old

        vegaAge[i]=-1; 

        now=score;

      }

    }

  }

    if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=0;

    }

  }

  else if(state==3)

  {

    if (mouseButton == LEFT&&dist(115,350,mouseX, mouseY)<=25)

    {

      i--;

      now++;

      if(i<0)i=0;

      if(now>score)now=score;

    }

    else if (mouseButton == LEFT&&dist(375,350, mouseX, mouseY)<=25)

    {

      i++;

      now--;

      if(now<0)now=0;

      if(i>score)i=score;

    }

    else if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=0;

    }

    else if (mouseButton == LEFT&&dist(300,400, mouseX, mouseY)<=120)

    {

      if(i==0)state=3;

      else {

        score=now;

        state=4;

      }

    }

  }

  else if(state==4)

  {

    if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=5;

    }

    else if (mouseButton == LEFT&&dist(120,0, mouseX, mouseY)<=120)

    {

      state=6;

    }

  }

  else if(state==5)

  {

    if(mouseButton==LEFT){

    for(int i=0; i<4; i++){//空地才能種

      if( vegaAge[i]==-1 && dist(mouseX,mouseY, 100+i*100, 500) < 30 ) vegaAge[i]=0; 

    }

  }else if(mouseButton==RIGHT){//右鍵採收

    for(int i=0; i<4; i++){

      if(dist(mouseX,mouseY, 100+i*100, 500) < 50 ){ 

        if(vegaAge[i]<0) score+=0;//空地不能收

        else if(vegaAge[i]<10) score+=0;//baby

        else if(vegaAge[i]<20) score+=1;//child

        else score+=0;//bad!! too old

        vegaAge[i]=-1; 

        now=score;

      }

    }

  }

    if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=4;

    }

  }

  else if(state==6)

  {

    if (mouseButton == LEFT&&dist(300,400, mouseX, mouseY)<=120)

    {

      state=0;

    }

    else if (mouseButton == LEFT&&dist(0,0, mouseX, mouseY)<=120)

    {

      state=4;

    }

  }

}





















作業心得:這學期我們學了很多有關Processing程式的寫法,我們的期末作業花了大約10小時來做,如果包含畫圖時間的話可能會更多,最後做出來的成果我覺得雖然還有待加強,但也是很有成就感。

Jain's 互動技術概論筆記#Week15

小朋友下樓梯~終於結束了


import processing.sound.*;

SoundFile soundfile;

SoundFile scare;

PImage imgB;

PImage imgB2;

PImage imgt;

PImage imgp;

PImage imgpl;

PImage imgpr;

float []boardX=new float[9];

float []boardY=new float[9];

float []wallX1=new float[15];

float []wallY1=new float[15];

float []wallX2=new float[15];

float []wallY2=new float[15];

float px;

float py,vx=0, vy=0.2;

float pyn;

int score;

boolean left=false;//左

boolean right=false;//右

int landing=0;

int condition=0;

float rolling=0;

void setup(){

    size(720,540);

    fill(0,0,0);

    textSize(40);

    imgB=loadImage("b1.jpg");

    imgB2=loadImage("b2.png");

    imgt=loadImage("t.png");

    imgp=loadImage("p.png");

    px=random(30,400-40);

    py=random(55,100);

    soundfile=new SoundFile(this,"BGM.mp3");

    scare=new SoundFile(this,"小朋友下樓梯音效.mp3");

    score=0;

    for(int i=0;i<9;i++)

    {

      boardX[i]=random(30,450-14-200);

      boardY[i]=i*45+80;

    }

    for(int i=0;i<15;i++)

    {

      wallX1[i]=0;

      wallY1[i]=i*30+50;

    }

    for(int i=0;i<15;i++)

    {

      wallX2[i]=410;

      wallY2[i]=i*30+50;

    }

  soundfile.play();

  soundfile.loop();

}

void mousePressed() {

  

    if (mouseButton == LEFT&&mouseX>=500&&mouseX<=650&&mouseY>=250&&mouseY<=390){

      condition=1;

        score=0;

    }

   if(condition==1){

    if (mouseButton == LEFT&&mouseX>=500&&mouseX<=650&&mouseY>=400&&mouseY<=490){

      condition=0;

      }

    

  }

}

void keyPressed()

{

  if(keyCode==LEFT)

  { 

    px += -20;

  }

  if(keyCode==RIGHT)

  {

    px += 20; 

  }

}


void draw(){

  if(condition==0){

  background(225);

  rect(10,45,400,450);

  text("PLAY", 500,300);

  text("STOP", 500,400);


  

  }

  else if(condition==1){

    background(225);

    rect(10,45,400,450);

    text("PLAY", 500,300);

    text("STOP", 500,400);

    image(imgp,px-vx,py-vy);

    if(py-vy<495&&py-vy>30) { 

      score+=1;

      text("Score:"+score/60, 450,100);

    }

    else {

      scare.play();

      text("Score:"+score/60+"\n"+"GameOver", 450,100);

      condition=2;

      py=random(55,100);

      }

    for(int i=0;i<15;i++){

      image(imgB,wallX1[i],wallY1[i]-rolling);

      image(imgB,wallX2[i],wallY2[i]-rolling);

      if(wallY1[i]-rolling<45)

      {

        wallY1[i]+=450;

        wallY2[i]+=450;

      }

    }

    for(int i=0;i<9;i++){

      image(imgB2,boardX[i],boardY[i]+80-rolling);

      if(boardY[i]-rolling<0){

        boardX[i]=random(15,400-15-95);

        boardY[i]=boardY[i]+400;

        }  

      py += vy; 

      for(int k=0; k<9; k++)

      {

        if(boardX[k] < px && px < boardX[k]+95)

        {

          if(py<boardY[k]+80-rolling && py>boardY[k]+80-rolling-16)

          {

            landing=k;

            py=boardY[k]-26+80-rolling;

          }

        }

      }

      

    } 

  image(imgt,10,45);

  rolling+=1.1; 

  }

  else if(condition==2){

    background(225);

    rect(10,45,400,450);

    text("PLAY", 500,300);

    text("STOP", 500,400);

    text("Score:"+score/60+"\n"+"GameOver", 450,100);

  }

}

期末

float [] fishX=new float[30];//座標x
float [] fishY=new float[30];//座標y
float [] fishSize=new float[30];//大小
boolean[] fishAlive = new boolean[30];//是不是活的 true,false

void setup(){
  size(500,500);
  reset();
}//吃東西,越吃越大,不夠大不能吃,時間內吃完
void gameRun()
{
  background(255);
  pushMatrix();
  translate(-x, -y);
    for(int i=0; i<30; i++){
      if(fishAlive[i]==true){
        fill(255); ellipse(fishX[i], fishY[i], fishSize[i], fishSize[i] );
        if( dist(250+x,250+y, fishX[i],fishY[i])< (big+fishSize[i])/2 ){//相遇
          if(big>fishSize[i]){
            big = sqrt(big*big+fishSize[i]*fishSize[i]);//面積相加,對應的半徑
            fishAlive[i]=false;//魚死掉了
          }
          else
         {         
          gameOverMsg();
        }         
        }
      }      
    }
  fill(255,0,0); ellipse(250+x,250+y, big,big);
  popMatrix();
     
}
int time=180;
int blood=1;
void gameOverMsg()
{
 
  if(time>0){
  background(255,0,0);
  stroke(153);
  textSize(44);
  textAlign(CENTER, CENTER);
  line(0, 200, width, 200);
  text("Game Over",width/2+x,height/2+y);
  time--;
  if(time==0)
  {
    reset();
    }
  }
}
void reset()
{
  time=180;
  blood=1;
  x=0;
  y=0;
  big=15;
  for(int i=0; i<30; i++){
    fishX[i]=random(-500,500);
    fishY[i]=random(-500,500);
    fishSize[i]=random(10,50);
    fishAlive[i]=true;   
  }
}
float x=0, y=0, big=15;
void draw(){ 
  gameRun();      
}

//腳色移動
void keyPressed(){
  if(keyCode==LEFT) x-=3;
  if(keyCode==RIGHT) x+=3;
  if(keyCode==UP) y-=3;
  if(keyCode==DOWN) y+=3;
  }

 -------------

原先在gameOverMsg要設計延遲3秒,但因為不熟悉Processing特性,

所以誤用sleep() delay() 函式

作業完成

 最後完成了作業

import processing.sound.*;

SoundFile soundfile1;

SoundFile soundfile2;

float [] bulletX=new float[99];

float [] bulletY=new float[99];

float [] bulletVX=new float[99];

float [] bulletVY=new float[99];

boolean die =false;

float x1=150,y1=400;

PImage imgBrick;

PImage imgBrick2;

PImage imgBullet;

PImage imgPlayer;

PImage imgBackground;

PImage imgC;

PImage imgGameover;


void setup(){

  size(300,500);

  soundfile1 = new SoundFile(this,"AnyConv.com__Pokemon.aiff");

  soundfile2 = new SoundFile(this,"wind03.aiff");

  soundfile1.play();

  soundfile1.loop();

  soundfile2.stop();

  imgBrick=loadImage("brick.jpg");

  imgBrick2=loadImage("2.jpg");

  imgBullet=loadImage("bullet.png");

  imgPlayer=loadImage("player.png");

  imgBackground=loadImage("111.png");

  imgC=loadImage("blo.jpg");

  imgGameover=loadImage("gameover.png");

  

  for(int i=0; i<99; i++){

    bulletX[i]=random(300); bulletY[i]=0; 

    //bulletX[i] = random(300);

    //bulletY[i] = random(300);

    float angle = random(60,120);//360度

    bulletVX[i] = cos( radians(angle) ); //random(-3,3);//子彈的速度差太多了, 不好

    bulletVY[i] = sin( radians(angle) );//random(-3,3);

  }

}

void draw(){

  image(imgBackground,20,30);

  image(imgC,0,0,300,35);//上面的白條

  for(int i=0;i<30;i++){//兩邊的槓槓

    image(imgBrick,0,0+i*15);

    image(imgBrick2,280,0+i*15);

  }

  for(int i=0; i<30; i++){

    image(imgBullet,bulletX[i], bulletY[i], 8, 8);

    bulletX[i] += bulletVX[i];

    bulletY[i] += bulletVY[i];

    if(bulletX[i]<25 || bulletY[i]<0 || bulletX[i]>275 || bulletY[i]>500){

      //bulletX[i] = random(300);//重新出現的子彈,不應該突然出現

      //bulletY[i] = random(300);//應該是從邊邊冒出來

        bulletX[i]=random(300); bulletY[i]=40; 

      float angle = random(60,120);//360度

      bulletVX[i] = cos( radians(angle) ); //random(-3,3);//子彈的速度差太多了, 不好

      bulletVY[i] = sin( radians(angle) );//random(-3,3);  

    }

    if(dist (x1,y1,bulletX[i],bulletY[i])<6){

        die=true;

    }

   if(die){

     image(imgGameover,0,0,300,500);

     soundfile1.stop();

     }

   else{

     image(imgPlayer,x1,y1,20,30);

     x1=mouseX-10;

     y1=mouseY-15;

   }

  }

}


整個程式花最多時間的地方應該是碰撞的部分

因為一開始講解碰撞的程式在自己嘗試的時候一職失敗

最後問老師的時候才知道了另外一種做法

  if(dist (x1,y1,bulletX[i],bulletY[i])<6)

學到了dist的用法

week19

 最終成果



import ddf.minim.*;

Minim minim;

AudioPlayer player,player2;




float big=0,x1,y1,vx1,vy1,x2,y2,vx2,vy2;


boolean Catflying=false,Dogflying=false;


int round=0,blood=0,blood1=0,condition;

PImage img,img2,img3,img4,img5,img6;


void setup(){


  size(500,300);

  img = loadImage("1.png");

  imageMode(CENTER);

  img2 = loadImage("2.png");

  imageMode(CENTER);

  img3 = loadImage("3.jpg");

  img4=loadImage("c.png");

  img5=loadImage("b.png");

  imageMode(CENTER);

  img6=loadImage("a.png");

  imageMode(CENTER);

  minim = new Minim(this); //設定好

  player = minim.loadFile("abc.mp3");//音效

  

  

  player.play();

}

boolean testywall1(float a,float b,float c){

  if(b<y1&&y1<c){

    if(x1<a&&a<x1+vx1) return true;

    if(x1+vx1< a&&a<x1) return true;

  }

  return false;  

}


boolean testywall2(float a,float b,float c){

  if(b<y2&&y2<c){

    if(x2<a&&a<x2+vx2) return true;

    if(x2+vx2< a&&a<x2) return true;

  }

  return false;  

}


boolean testxwall1(float a,float b,float c){

  if(b<x1&&x1<c){

    if(y1<a&&a<y1+vy1) return true;

    if(y1+vy1< a&&a<y1) return true;

  }

  return false;  

}

boolean testxwall2(float a,float b,float c){

  if(b<x2&&x2<c){

    if(y2<a&&a<y2+vy2) return true;

    if(y2+vy2< a&&a<y2) return true;

  }

  return false;  

}

void draw(){

  background(img3);

  image(  img,450,250,125,125);


  

  image(  img2,50,250,100,100);

  if(blood1==0){

    fill(255,0,0);rect(0,55,20,30);

    fill(255,0,0);rect(25,55,20,30);

    fill(255,0,0);rect(50,55,20,30);

  }

  if(blood1==1){

    fill(255,0,0);rect(0,55,20,30);

    fill(255,0,0);rect(25,55,20,30);

    fill(199,199,199);rect(50,55,20,30);

  }

  if(blood1==2){

    fill(255,0,0);rect(0,55,20,30);

    fill(199,199,199);rect(25,55,20,30);

    fill(199,199,199);rect(50,55,20,30);

  }

  if(blood1==3){

    fill(199,199,199);rect(0,55,20,30);

    fill(199,199,199);rect(25,55,20,30);

    fill(199,199,199);rect(50,55,20,30);

    condition=1;

  }

  if(blood==0){

    fill(255,0,0);rect(425,55,20,30);

    fill(255,0,0);rect(450,55,20,30);

    fill(255,0,0);rect(475,55,20,30);

  }

  if(blood==1){

    fill(199,199,199);rect(425,55,20,30);

    fill(255,0,0);rect(450,55,20,30);

    fill(255,0,0);rect(475,55,20,30);

  }

  if(blood==2){

    fill(199,199,199);rect(425,55,20,30);

    fill(199,199,199);rect(450,55,20,30);

    fill(255,0,0);rect(475,55,20,30);

  }

  if(blood==3){

    fill(199,199,199);rect(425,55,20,30);

    fill(199,199,199);rect(450,55,20,30);

    fill(199,199,199);rect(475,55,20,30);

    condition=2;

  }

  

  

  

  

  fill(0,255,0);rect(0,0,big,50);


  fill(128,128,128);rect(240,150,20,150);

  if(Catflying){

    if(testywall1(240,150,150+150)==true)Catflying=false;

    else if(testywall1(240+20,150,150+150)==true)Catflying=false;

    else if(testxwall1(150,240,240+20)==true)Catflying=false;

    else if(testxwall1(150+150,240,240+20)==true)Catflying=false;

  }

  if(Dogflying){

    if(testywall2(240,150,150+150)==true)Dogflying=false;

    else if(testywall2(240+20,150,150+150)==true)Dogflying=false;

    else if(testxwall2(150,240,240+20)==true)Dogflying=false;

    else if(testxwall2(150+150,240,240+20)==true)Dogflying=false;

    

  }

  if(condition==1){

    background(img4);

    image(img6,250,150,250,250);

  }

  if(condition==2){

    background(img4);

    image(img5,250,150,250,250);

  }

  fill(255,128,64);

  if(Catflying){

    if(testywall1(375,200,200+125)==true){

      Catflying=false;

      blood++;

    }

    else if(testywall1(375+125,200,200+125)==true){

      Catflying=false;

      blood++;

    }

    else if(testxwall1(200,375,375+125)==true){

      Catflying=false;

      blood++;

    }

    else if(testxwall1(200+125,375,375+125)==true){

      Catflying=false;

      blood++;

    }

  }

  if(Dogflying){

    if(testywall2(25,200,200+100)==true){

      Dogflying=false;

      blood1++;

    }

    else if(testywall2(25+100,200,200+100)==true){

      Dogflying=false;

      blood1++;

    }

    else if(testxwall2(200,25,25+100)==true){

      Dogflying=false;

      blood1++;

    }

    else if(testxwall2(200+100,25,25+100)==true){

      Dogflying=false;

      blood1++;

    }

  }

  if(mousePressed){

    big++;

  }

  if(Catflying){


    round=1;

    x1+=vx1;y1+=vy1;vy1+=0.98;

    

    fill(255,255,0);ellipse(x1,y1,30,30);

    

    

  }


  


  if(Dogflying){


     round=0;

     x2+=vx2;y2+=vy2;vy2+=0.98;

     

     fill(255,255,0);ellipse(x2,y2,30,30);

    

    

  }


 


}


void mouseReleased(){




  if(round==0){




     x1=50;y1=250;


     float angle1=atan2(x1-250,y1-50);


     vx1 = cos(angle1)*big/5;vy1=sin(angle1)*big/5;


     Catflying=true;


     Dogflying=false;

     

  }






  if(round==1){


     x2=450;y2=250;


     float angle2=atan2(x2-250,y2-450);


     vx2 = cos(angle2)*big/5;vy2=-sin(angle2)*big/5;


     Dogflying=true;


     Catflying=false;


  }


  big=0;


}

豆腐女孩最終日

 

完成遊戲畫面
程式碼:

PImage img1,img2;
PImage[] img3 = new PImage[14];
float x=155,y=300,vx=0,vy=0;//女孩
boolean jumping=false;
boolean alive=true;
float []tofuX=new float[100];
float []tofuVX=new float[100];
int n=1;//豆腐數量
int state=0;
int tofuH=0;
int t=0;
PFont timberman;
void setup(){
  size(400,600);
  
  img1=loadImage("bgg.JPG");
  img2=loadImage("111.png");
  
  img3[0]  = loadImage("1111.gif");
  img3[1]  = loadImage("2222.gif");
  img3[2]  = loadImage("3333.gif");
  img3[3]  = loadImage("4444.gif");
  img3[4]  = loadImage("5555.gif");
  img3[5]  = loadImage("6666.gif");
  img3[6]  = loadImage("7777.gif");
  img3[7]  = loadImage("8888.gif");
  img3[8]  = loadImage("9999.gif");
  img3[9]  = loadImage("1010.gif");
  img3[10]  = loadImage("1011.gif");
  img3[11]  = loadImage("1012.gif");
  img3[12]  = loadImage("1013.gif");
  img3[13]  = loadImage("1014.gif");
  tofuX[0]=140;//豆腐剛開始的位子
  generateTofu();
}
int k=0;
void draw(){
  image(img1,0,0,400,600);
  timberman = createFont("Pixelony.ttf", 40);//遊戲字體
  text("Score:"+(n-1),130,100);
  textFont(timberman);
  for(int i=0;i<n;i++)
  {
    rect(tofuX[i],400-i*65+tofuH,125,65);
  }
  if(state==1){
    if(t>0){
      tofuH++;t--;
    }else{
      state=0;
      
    }
  }
  
  image(img2,x,y+tofuH,100,100);
  if(jumping){
    if(vy>0 && tofuX[n-1]<x+70 && x<tofuX[n-1]+95 && y+100<400-(n-1)*65 && y+100+vy>400-(n-1)*65){
      jumping=false; vy=0; y=400-(n-1)*65-100;
      screenroll();
      generateTofu();
    }else{
      y+=vy;
      vy+=0.98;
    }
  }
  tofuX[n-1]+=tofuVX[n-1];
  
  if(!jumping && tofuVX[n-1]!=0 && tofuX[n-1]<x+75 && x<tofuX[n-1]+100){
    
    alive=false;
  }
  if(y>600)
  {
    alive=false;
  }
  if(alive==false)//死亡
  {
    image(img3[k],0,0,400,600);
    if(frameCount%6==0) k=(k+1)%14;
    timberman = createFont("Pixelony.ttf", 40);//遊戲字體
    text("Your Score:"+(n-1),70,100);
    fill(#EA2F4B);
    textFont(timberman);
  }
}

void mousePressed(){
  if(!jumping){  
    jumping=true;
    vy=-22;
  }
}

void generateTofu(){
  int dir=int(random(2));//0=左邊,1=右邊
  n++;
  if(dir==0){
    tofuX[n-1]=400;
    tofuVX[n-1]=-2;
  }else{
    tofuX[n-1]=-125;
    tofuVX[n-1]=2;
  }
 
}
void screenroll(){
  state= (state+1)%2;
  if(state==0){
   
  }else if(state==1){
    t+=65;
  }
}
結束遊戲畫面的動態圖片








豆腐女孩第二天

 

女孩的圖片
第二天我們加上女孩在上面彈跳

PImage img1;
float x=203,y=370,vx=0,vy=0;//女孩
boolean jumping=false;
float []tofuX=new float[100];
float []tofuVX=new float[100];
int n=1;//豆腐數量
int state=0;//0是不會動,1是豆腐移動,2是豆腐停止且往下降
int tofuH=0;
int t=0;

void setup(){
  size(400,600);
  img1=loadImage("bgg.JPG");
  tofuX[0]=140;//豆腐剛開始的位子
  generateTofu();
}
void draw(){
  image(img1,0,0,400,600);
  for(int i=0;i<n;i++)
  {
    rect(tofuX[i],400-i*65+tofuH,125,65);
  }
  if(state==1){
    if(t>0){
      tofuH++;t--;
    }else{
      state=0;
      
    }
  }
  tofuX[n-1]+=tofuVX[n-1];
  if(!jumping && tofuVX[n-1]!=0 && tofuX[n-1]<x+30 && x-30<tofuX[n-1]+125){
    background(255,0,0);
  }
  ellipse(x,y+tofuH,60,60);
  if(jumping){
    if(vy>0 && tofuX[n-1]<x && x<tofuX[n-1]+125 && y+33<400-(n-1)*65 && y+33+vy>400-(n-1)*65){
      jumping=false; vy=0; y=400-(n-1)*65-30;
      screenroll();
      generateTofu();
    }else{
      y+=vy;
      vy+=0.98;
    }
  }
}
void mousePressed(){
  if(!jumping){  
    jumping=true;
    vy=-24;
  }
}
void keyPressed(){
  generateTofu();
}
void generateTofu(){
  int dir=int(random(2));//0=左邊,1=右邊
  n++;
  if(dir==0){
    tofuX[n-1]=400;
    tofuVX[n-1]=-2;
  }else{
    tofuX[n-1]=-125;
    tofuVX[n-1]=2;
  }
}
void screenroll(){
  state= (state+1)%3;
  if(state==0){
   
  }else if(state==1){
    t=65;
  }
}