⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nudemengarden.txt

📁 视频交互游戏实验
💻 TXT
📖 第 1 页 / 共 2 页
字号:

int res = 10;             // collision detection area

int totalPixels;         // total for array setup
int[][] vPixels;         // video pixel array
int startx, starty;      // pixel to be modified

int bb;                  // hue, saturation, brightness
int brightMean;

boolean newFrame;

// Global variables for rain drops

float[] rain_x;
float[] rain_y;
float[] rain_speed;

int[] rainStartF;
int[] rainStopF;
int[] rainCurrF;
int[] rainStage;  //0:falling 1:landing 2:sitting 3:standing-up 4: standing 5:walking left 6: walking right

int rain_total=30;
int dropLimit=90; //smaller the number, lighter the region they land
int[][] rainTF = {{9,8,1,4,1,5,5}};
int rainTypeTotal = rainTF.length;
int[] rainType;

BImage[][] rainImg;

//////////////////////////////////////////////////////////////////////
int flowerMax = 40;//15;
int cactusMax = 40;//4;
int mimosaMax = 40;//6;

Flower[] flowerList = new Flower[flowerMax];
Cactus[] cactusList = new Cactus[cactusMax];
Mimosa[] mimosaList = new Mimosa[mimosaMax];

BImage[] flowerImageList = new BImage[3];
BImage[] leafImageList = new BImage[3];

BImage spike;
BImage cactusTop;
BImage cactus;
BImage cactusBall;
BImage mimosa;
BImage cloud;

/////////////////////////////////////////////////////////////////////

void setup() { 
println("!!!");
  size(320, 240); 
  background(0);
  ellipseMode(CENTER_DIAMETER);
  noStroke();
  
  vPixels   = new int[height][width];
  
  rainStartF = new int[rain_total];
  rainStopF = new int[rain_total];
  rainCurrF = new int[rain_total];
  rainStage = new int[rain_total];
  
  rain_x = new float[rain_total];
  rain_y = new float[rain_total];
  rain_speed= new float[rain_total];  
  rainType = new int[rain_total];



  rainImg = new BImage[rain_total][50];
  
  /// henry var init start////////////////////////////////////////////////////
  
  spike = loadImage("spike.gif");
  cactusTop = loadImage("cactusTop.gif");
  cactus = loadImage("cactus.gif");
  cactusBall = loadImage("cactusBall.gif");
  mimosa = loadImage("mimosa.gif");
  flowerImageList[0] = loadImage("flower1.gif");
  flowerImageList[1] = loadImage("flower2.gif");
  flowerImageList[2] = loadImage("flower3.gif");
  leafImageList[0] = loadImage("leaf1.gif");
  leafImageList[1] = loadImage("leaf2.gif");
  leafImageList[2] = loadImage("leaf3.gif");

  for (int i=0; i<cactusMax; i++){
      cactusList[i] = new Cactus(0,240,300,50,false);
  }
  for (int i=0; i<mimosaMax; i++){
     mimosaList[i] = new Mimosa(0,240,50,90,false);
  }
  for (int i=0; i<flowerMax; i++){  
      flowerList[i] = new Flower(0,240,10,70,false);  
  }

/////henry var init end///////////////////////////////////////////
  beginVideo(width, height,24);
  
  // init raindrops
  for(int i=0; i<rain_total; i++) { 
  
    initVar(i); 
  
  }
 
  
}


void loop() {


  if (newFrame){

    image(video,0,0);
    newFrame = false;
    drawPlant();    
    drawRain();
  }
  
// Saves each frame as line-0000.tif, line-0001, etc. 
   //saveFrame("garden_close-####.tif"); 
}

void mouseReleased(){
  growNew("Mimosa", mouseX);
}

void videoEvent(){
  if (!newFrame){
    newFrame = true;
  }
}

// get raindrop's total frames
int getTotalFrames(int i){
 int sum=0;
 for (int k=0; k<rainTF[i].length; k++)
   sum = sum + rainTF[i][k];
 return(sum);
}

// get raindrop's total frames from stage
int getTotalFramesFrom(int i, int stageNo){
 int sum=0;
 for (int k=0; k<stageNo+1; k++)
   sum = sum + rainTF[i][k];
 return(sum);
}

// init snow properties
void initVar(int i){

    
    rain_x[i]=random(width);
    rain_y[i]=-100-random(100);
    rain_speed[i]=random(5,10);
    
    //rainType[i]= (int) random(rainTypeTotal);
    rainType[i]=0;
    
    rainGotoStage(0, rainType[i], i);
    
    
    
    int temp=getTotalFrames(rainType[i]);
    
    for (int k=0; k<temp; k++)
    {
      rainImg[i][k]= loadImage("rain"+rainType[i]+"f"+k+".gif"); 
      
     } 
    
}

//goto a raindrop's stage
void rainGotoStage(int stageNo, int rType, int i){

    if (stageNo==0) rainStartF[i]=0;
    else
    {
       rainStartF[i]=getTotalFramesFrom(rType,stageNo-1);
    }

    rainStopF[i]=rainStartF[i]+rainTF[rType][stageNo]-1;
    
    rainCurrF[i]=rainStartF[i];
    
    rainStage[i]=stageNo;


}

void drawRain(){

  
  
  for(int i=0; i<rain_total; i++)
  {
    rain_y[i]+=rain_speed[i];
    if (rain_y[i]>height || rain_x[i]<-100 || rain_x[i]>width+100) {
         
     
     
     // planting
     if (rain_y[i]>height && rain_x[i]>0 && rain_x[i]<width) {
        
        
         if ( int(random(100))>50) growNew("Flower", rain_x[i]);
         else if (int(random(100))>10) growNew("Mimosa", rain_x[i]);
         else growNew("Cactus", rain_x[i]);
      } 
      
      // rebuild
     initVar(i);
    }
    
  if (rain_y[i]>0 && rain_y[i]<height)checkCam(i);
    
  // render rain     
   
     image(rainImg[i][rainCurrF[i]],rain_x[i]-rainImg[i][rainCurrF[i]].width/2, rain_y[i]);
     
     if (rainCurrF[i]>=rainStopF[i]) 
     {
       if (rainStage[i]==0) //falling down
       {
         
       }
       else rainCurrF[i]=rainStartF[i]; //looping
     }
     else rainCurrF[i]++;
   
  }
  


      
}

void checkCam(int ri)
{
  // check video area of the ball 

    startx=(int)(rain_x[ri])-(int)(res/2);
    starty=(int)(rain_y[ri]+rainImg[ri][0].height)-(int)(res/2);
    
    if (startx<0) startx=0;
    if (starty<0) starty=0;
    if (startx>width-res) startx=width-res;
    if (starty>height-res) starty=height-res;

    brightMean=0;
            
    for(int j=starty; j<starty+res; j++){
    for(int i=startx; i<startx+res; i++){
    
      
      vPixels[j][i] = video.pixels[(j * video.width) + i];
      bb = (int)(brightness(vPixels[j][i]));
      
      brightMean += bb;

     }
     }
     
     brightMean = (int) ( brightMean/res/res);
     
     if (brightMean < dropLimit ) 
     {
       
       rain_y[ri]-=rain_speed[ri];
      
       //landing.. (1)
       if (rainStage[ri]==0) rainGotoStage(1, rainType[ri], ri);
       
       
       //sitting (2)
       if (rainStage[ri]==1 && rainCurrF[ri]==rainStopF[ri]) rainGotoStage(2, rainType[ri], ri);
       
       // standing up (3)
       if (rainStage[ri]==2 && rainCurrF[ri]==rainStopF[ri] && random(100)>95) rainGotoStage(3, rainType[ri], ri);
       
       // standing(4)
       if (rainStage[ri]==3 && rainCurrF[ri]==rainStopF[ri]) rainGotoStage(4, rainType[ri], ri);
       
       // walking LEFT(5) Right (6)
       if (rainStage[ri]==4 && rainCurrF[ri]==rainStopF[ri] && random(100)>90) 
       {
          if (random(100)>50) rainGotoStage(5, rainType[ri], ri);
          else rainGotoStage(6, rainType[ri], ri);
       }
       
       // walking 
       float step=random(2,5);
       if (rainStage[ri]==5) rain_x[ri]-=step;
       else if (rainStage[ri]==6) rain_x[ri]+=step;
       
       
     }
     else
     {
       //falling...
       
       if (rainStage[ri]!=0) 
       {
          // if they walking...
          if (rainStage[ri]==5) rain_x[ri]-=20;
          else if (rainStage[ri]==6) rain_x[ri]+=20;
          
          //change to falling stage
          rainGotoStage(0, rainType[ri], ri);
       }
     }
     
     //println("bright:"+brightMean);
    
}

///////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////// Classes written by Henry
///////////////////////////////////////////////////////////////////////////

void drawPlant(){
   for (int i=0; i<cactusMax; i++){
     if(cactusList[i].life>0 && cactusList[i].readyGrow){
       cactusList[i].grow();
     }
   }

   for (int i=0; i<mimosaMax; i++){
     if(mimosaList[i].life>0 && mimosaList[i].readyGrow){
       mimosaList[i].grow();
     }
   }

   for (int i=0; i<flowerMax; i++){
     if(flowerList[i].life>0 && flowerList[i].readyGrow){
       flowerList[i].grow();
     }
   }
}

 void growNew(String type,float x){
   if(type=="Flower"){
     boolean growFinish = false;
     for (int i=0; i<flowerMax && !growFinish; i++){
       if(!flowerList[i].readyGrow){
         flowerList[i] = new Flower(x,240,random(10,20),int(random(15,35)),true);
         growFinish = true;
       }
     }
   }
   if(type=="Cactus"){
     boolean growFinish = false;
     for (int i=0; i<cactusMax && !growFinish; i++){
       if(!cactusList[i].readyGrow){
         cactusList[i] = new Cactus(x,240,random(300,400),int(random(35,70)),true);
         growFinish = true;
       }
     }
   }
   if(type=="Mimosa"){
     boolean growFinish = false;
     for (int i=0; i<mimosaMax && !growFinish; i++){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -