• fullscreen
  • tendrils.pde
  • int score = 0; int timeLeft = 30; int highScore = -1;
    boolean gameOn = false;
    boolean isGood;
    boolean virgin = true;
    ArrayList<Thing> enemies = new ArrayList<Thing>();
    Thing p = new Thing(true);
    void setup(){
      
      
      
    //  textFont(createFont("",10));
      frameRate(30);
         size(500,600);   
         for(int x = 0; x < 15;x++){
            enemies.add(new Thing(false));
        }
         background(200);
        smooth();
    }
    
    void reset(){
     gameOn = true; 
     score = 0;
     timeLeft = 30;
    }
    
    void mousePressed(){
       if(!gameOn){
          reset();
          background(200);
          p = new Thing(true);
       } 
    }
    
    void draw(){
       
      if(frameCount % 30 == 0){
        if(gameOn) timeLeft--;
        if(timeLeft <= 0){
          virgin= false;
           gameOn=false; 
           if(score > highScore){
            highScore = score; 
           }
        }
      }
      
       p.mouseMove();
       p.draw();
       p.grow();
        for(Thing e : enemies){
            e.move();
            e.draw();    
        }      
        
        for(int a = 0; a < enemies.size(); a++){
            Thing at = enemies.get(a);
        if(at.hit(p)) at.bounce(p,true);
          for(int b = a+1; b < enemies.size(); b++){
            Thing bt = enemies.get(b);
            if(at.hit(bt)){
              
              at.bounce(bt,false);
               //stroke(255,0,0);
               //line(at.x,at.y,bt.x,bt.y); 
            }
          }    
        }
        
        printScore();
    }
    
    class Player{
      float x, y; float sz = 20;
      float xs,ys;
    
     
     void draw(){
      fill(255);
      ellipse(x,y,sz,sz);
     } 
    }
    float MM = .2;
    
    color GREEN = color(100,200,100);
    float MAX = 1;
    class Thing {
        float x,y,sz;
        float xs,ys;
        color c;
        
        boolean hit(Thing t){
           if(dist(x,y,t.x,t.y) < (sz+t.sz)/2) return true;
           return false;
        }
        void grow(){
          if(sz < 50){
          sz+=.2;
          
            isGood = false;
          } else {
              if(gameOn)score++;
             isGood = true;
          }
          
        }
        
        void bounce(Thing t, boolean shrink){
           float totalsz = sz + t.sz;
           float totalxs = xs + t.xs;
            float totalys = ys + t.ys;
           xs = totalxs * (sz/totalsz);
           ys = totalys * (sz/totalsz);
           t.xs = totalxs * (t.sz/totalsz);
           t.ys = totalys * (t.sz/totalsz);
           
           if(shrink){
               t.sz -= 2;
               }
       /* 
          xs *= -1;
          ys *= -1;
          t.xs *= -1;
          t.ys *= -1;
         */   
        }
        Thing(boolean player){
    
        if(! player){
            x = random(width);
            y = random(width);    
            sz = random(5,20);
            c = color(random(50,200),random(50,200),random(50,200));
        } else {
            x = 250;
            y = 250;    
            sz = 50;
            c = color(255);
        
        }  
      }
      
      void mouseMove(){
     //   xs += (mouseX -x) / 500;
     //   ys += (mouseY -y )/ 500;
       if(mouseX < x) xs -= MM;
       if(mouseX > x) xs += MM;
       if(mouseY < y) ys -= MM;
       if(mouseY > y) ys += MM;
       
       
        x += xs;
        y += ys;
        
            if(x < 0) { x = 0; xs *= -.5;}
            if(x > 500) { x = 500; xs *= -.5;}
            if(y < 0) { y = 0; ys *= -.5;}
            if(y > 500) { y = 500; ys *= -.5;}
      
        
        
      }
      
        void draw(){
            fill(c);
            stroke(0);
            //noStroke();
            ellipse(x,y,sz,sz);
            fill(0);
            //ellipse(
        }
        void move(){
            xs += random(-MAX,MAX);
    
            ys += random(-MAX,MAX);
            x+= xs;
            y += ys;
            
            if(x < 0) { x = 0; xs *= -.5;}
            if(x > 500) { x = 500; xs *= -.5;}
            if(y < 0) { y = 0; ys *= -.5;}
            if(y > 500) { y = 500; ys *= -.5;}
            
            
            
        }
        
    }
    
    
    
    void printScore(){
       noStroke();
      fill(200);
     rect(0,550,500,60);
     fill(0);stroke(0);
     textAlign(CENTER);
     int per = Math.round(100 * (p.sz / 50));
     if(!gameOn){
       String txt = "TENDRILS -- try to stay full size by avoiding being hit - click to start";
       if(! virgin){
        txt+="\nlast score: "+score +"\nrecent high score:"+highScore; 
       }
        text(txt,0,550,500,50);
        
     } else{
       text("size:"+per+"%   time left:"+timeLeft+"   score:"+score,0,550,500,50);
     }
    }
    

    code

    tweaks (0)

    about this sketch

    This sketch is running as Java applet, exported from Processing.

    license

    advertisement

    Report Sketch

    Report for inappropriate content

    Please provide details if possible:

    Your have successfully reported the sketch. Thank you very much for helping to keep OpenProcessing clean and tidy :)

    Make a Copyright Infringement claim

    kirk "kirkjerk" israel

    tendrils

    Add to Faves Me Likey@!
    You must login/register to add this sketch to your favorites.

    A 2 hour pretty game jam game I made for Glorious Trainwrecks

    You need to login/register to comment.