        /// project 2.0
        
        // Draw a ball, human, airplane, monster
        String title="Escaping from monster";
 //       String last="";
        String author="Victor Pineda, CST112, Project 2";
   //     int score=0;
       
                
        //Locations
        float ballX= 640-20, ballY= 480-20; 
        float humanX= width/2, humanY= height/2;
        float planeX=100, planeY=50, planeDX=3, planeDY=2;
        int r=100, g=200, b=150; //plane color
        
        float monsterX= 100, monsterY=450;
        
        float left=40, right=600, top=80, bottom=400;
        
        Dog es;
        Dog ce;
        
        //Dogs array
        int maxdogs=2;
        Dog[] kennel=  new Dog[maxdogs];
        
        // Plane array
        int number=1;
        Plane[] sky=  new Plane[number];
        
        int speed=0;
        
        
        //location of each one
        void setup() {
          size( 640, 480 );
          reset();
          
        }
        
        void reset() {
           es= new Dog();
           es.name=  "E  S";
           es.r=250;

           ce= new Dog();
           ce.name=  "C  E";
           ce.b=200;
           //
           //// Many dogs in array
             for (int i=0; i<maxdogs; i++) {
               kennel[i]=  new Dog();
               kennel[i].name=  ""+i;
             }
          //// Many plane in array
           for (int i=0; i<number; i++) {
               sky[i]=  new Plane();

             }
        }
        
        void draw() {
          // Next frame.
          scene();
          moveall();
          showall();
          monsterbody();
        }
        
        void moveall() {
        // Make them move
          ball();
          human();
          //
          es.dogDX=  (humanX-es.dogX)/50;
          es.dogDY=  (humanY-es.dogY)/50;
          es.move();

          ce.dogDX=  (es.dogX-ce.dogX)/50;
          ce.dogDY=  (es.dogY-ce.dogY)/50;
          ce.move();
              //// Move all dogs in kennel.
             for (int i=0; i<maxdogs; i++) {
               kennel[i].move();
             } 
    //// Move all planes in sky.
             for (int i=0; i<number; i++) {
               sky[i].move();         
        }
     }
        
        void showall() { // Show fishes
           es.show();
           ce.show();
           /// Dogs in array
             for (int i=0; i<number; i++) {
               sky[i].show();
             } 
             /// planes in array
             for (int i=0; i<maxdogs; i++) {
                kennel[i].show();
             }                   
        }       
           
     void keyPressed() {   //  handler for keyboard
              background(0,0,0);
              if (key=='q') exit();
              background(255,255,255);
              if (key=='q') exit();
              if (key=='r') 
                   reset();
                   monsterX= 50;
                   monsterY= 450;
    }

        
        void ball() {
          //// Draw a ball
          fill( 225, 200, 100 );
          stroke( 0, 0, 150 );
          ellipse( ballX, ballY, 25, 25 );
        }
        
        void human() {
          // A human running to a ball
          humanX= humanX + (ballX-humanX-10)/60;
          humanY= humanY + (ballY-humanY-10)/60;
          
         
        
          // Making a human
          noStroke();
          fill( 255, 255, 0 );
          rectMode( CENTER );
          rect( humanX, humanY, 50, 80 );
          fill( 255, 200, 150 ); // head
          ellipse( humanX, humanY-80/2-30/2, 30, 30 ); 
          eye(humanX-8, humanY-55);  // eyes
          eye(humanX+8, humanY-55);
          hand(humanX-32, humanY-35); /// hands
          hand(humanX+32, humanY-35);
          leg(humanX-10, humanY+50); /// legs
          leg(humanX+10, humanY+50);
 
      } 
            
        void eye(float X, float Y) {  // draw eyes
            fill(255);
            ellipse( X, Y, 10, 10);
            fill(80, 80, 255);
            ellipse( X, Y, 4, 4);           
     }
     
       void hand(float X, float Y) {  // draw hands
            fill( 255, 255, 0 );     
            ellipse( X, Y, 20, 15);
            rect( X, Y+20, 10, 30 );
            ellipse( X, Y+30, 15, 20);
  }
        
        void leg(float X, float Y) {  // draw legs
            fill( 0, 0, 0 );
            rect( X, Y, 10, 20 );        
    }          
        
        
        
        void scene() {
          background(0, 0, 200);
          fill(100, 255, 100);
          rectMode(CENTER);
          rect(300, 300, 800, 430);
          fill(250,250,250);
          text( title, width-380, 30 ); /// text locations
          fill(0,0,0);
          text( author, 25, height-15 );
        }
        
        void mousePressed() {
          ballX=  mouseX;          // Moving a ball 
          ballY=  mouseY;
          background( 200, 200, 5); // lightning
           speed= speed + 5;
        }
     
        
        void monsterbody() {
          monster();
          eyes();
          legs();
        }
        
        void monster() {
          
          // A monster running to human location
          monsterX= monsterX + (humanX-monsterX)/35;
          monsterY= monsterY + (humanY-monsterY)/35;
        
          // Making a monster
          noStroke();
          fill(0);
          ellipse(monsterX+20,monsterY-65,40,40);
          ellipse(monsterX+20,monsterY-19,25,25);
          rect( monsterX+20, monsterY-35, 15, 50 ); 
        }  
          
         void eyes(){
           // monster eyes
            fill(255);
            ellipse(monsterX+5,monsterY-60, 15,10);
            ellipse(monsterX+35,monsterY-60, 15,10);
            stroke(1);
            strokeWeight(4);
            point(monsterX+5,monsterY-60);
            point(monsterX+35,monsterY-60);
         }
         
         
         void legs() {
           // monster legs
              stroke(0);
              strokeWeight(2);
              noFill();
              beginShape();
              vertex(monsterX+10, monsterY-15);
              vertex(monsterX-20, monsterY+10);
              vertex(monsterX-10, monsterY+35);
              vertex(monsterX-15, monsterY+40);
              endShape();
              
              beginShape();
              vertex(monsterX+20, monsterY-15);
              vertex(monsterX+50, monsterY+10);
              vertex(monsterX+30, monsterY+35);
              vertex(monsterX+35, monsterY+40);
              endShape();
              
              beginShape();
              vertex(monsterX+10, monsterY-15);
              vertex(monsterX-10, monsterY+10);
              vertex(monsterX, monsterY+35);
              vertex(monsterX-5, monsterY+40);
              endShape();
              
              beginShape();
              vertex(monsterX+20, monsterY-15);
              vertex(monsterX+40, monsterY+10);
              vertex(monsterX+20, monsterY+35);
              vertex(monsterX+25, monsterY+40);
              endShape();
        }
        
        
      class Dog {
          /// draw, move, show dog
          float dogX=100, dogY=50, dogDX=3, dogDY=2;
          float x=100, y=100, dx=3, dy=2;
          float w=80, h=90;
          float dogW=50, dogH=20;
          int r=100, g=200, b=150; //body color
          String name="";
          
          Dog() {
            // COnstructor;
            dogX=  random( 100,500 );
            dogY=  random( 100,300 );
            r=  (int) random( 100,255 );
            dogDX=  random( 2,5 );
            dogDY=  random( 1,3 );
            g=  (int) random( 50,200 );
            b=  (int) random( 0,100 );
            dogW=  random( 40,65 );
            dogH=  random( 15,30 );
            //
          }
        
      void move(){
            if (dogX<left+50 || dogX>right) dogDX *= -1;
            if (dogY<top+50 || dogY>bottom) dogDY *= -1;
            if (dogX<0) dogDX=  abs(dogDX);
            if (dogY<0) dogDY=  abs(dogDY);
            dogX= dogX + dogDX;
            dogY= dogY + dogDY;
            
        }
        
        void show() {
          // draw on screen
    
          noStroke();
          fill( r, g, b );
          rect( dogX, dogY, dogW, dogH ); 
          // dog head
          rect( dogX+25, dogY-15, 25, 12 ); 
          // Dog tail
          rect( dogX-27, dogY-12, 7, 7 ); 
         // Dog legs 
          rect( dogX-25, dogY+12, 4, 14 );  
          rect( dogX+25, dogY+12, 4, 14 );
          
          fill(0);      
          text( name, dogX, dogY);
   
     }
 }
      
      class Plane {
          /// draw, move, show dog
          float dogX=100, dogY=50, dogDX=3, dogDY=2;
          float x=100, y=100, dx=3, dy=2;
          float w=80, h=90;
          float dogW=50, dogH=20;
          int r=100, g=200, b=150; //body color
          String name="";
          
          Plane() {
            // Constructor;
            planeY=  random( 30,60 );
            r=  (int) random( 100,255 );
            g=  (int) random( 50,200 );
            b=  (int) random( 0,100 );
        
          }
        
      void move(){
            planeX = planeX + 1;  /// velocities for bird
           
            if(planeX > 700 ) {
            planeX = -planeDX;
            planeY=  random( 20,80 );
            r=  (int) random( 100,255 );  
            g=  (int) random( 50,200 );
            b=  (int) random( 0,100 );
           }
      }

      void show() {
          // draw on screen
         noStroke();
          fill(r, g, b);
          triangle( planeX, planeY, planeX-30, planeY-20, planeX-30, planeY+15 );
        
      }   
   
  }
        
          
        
        
        
        
