float SCREENSIZE; guy player; ArrayList bugs = new ArrayList(); ArrayList grasses = new ArrayList(); int mode; int PRE = 1;; int DURING = 2 ; int AFTER = 3; float grassangle = PI/2; float grassspeed; void setup(){ size(500,500); frameRate(45); smooth(); SCREENSIZE = width; player = new guy(20,color(0,255,0,128)); //textFont(loadFont("ARCENA-48.vlw")); mode = PRE; for(int i = 0; i < 15;i++){ grasses.add(new grass()); } grassangle = PI/2; } void addbug(){ float x = random(SCREENSIZE); float y = -10; bugs.add(new guy(40,color(random(255),random(255),random(255),200),x,y)); } int score; int time = 100; int clicks; void mousePressed(){ if(mode == PRE || mode == AFTER){ score = 0; time = 60; mode = DURING; clicks = 0; bugs = new ArrayList(); } } class grass{ float x; float len; grass(){ this.x = random(SCREENSIZE); len = SCREENSIZE/2 + random(SCREENSIZE/2); } void draw(){ noFill(); stroke(0,128,0); strokeWeight(2); line(x,SCREENSIZE,x-(len*cos(grassangle)), SCREENSIZE-((len*sin(grassangle)/2))); //angle+=.1; } } void draw(){ background(200,200,255); /* grassspeed += random(-.01,.01); grassspeed = constrain(grassspeed,-1.0,1.0); grassangle += grassspeed; grassangle = constrain(grassangle,PI/4.0,PI*(3.0/4.0)); */ for(grass g : grasses){ g.draw(); } player.move(); player.draw(); if(mode == PRE){ fill(255,200); text("greenbug",SCREENSIZE/5,SCREENSIZE/4); text("a and d to flap",SCREENSIZE/5,SCREENSIZE*4/8); text("and catch smaller bugs",SCREENSIZE/5,SCREENSIZE*5/8); text("click to start",SCREENSIZE/5,SCREENSIZE*7/8); return; } if(mode == DURING || mode == AFTER){ fill(255,200); text("score:"+score, SCREENSIZE/5,SCREENSIZE/8); text("time:"+time, SCREENSIZE/2,SCREENSIZE/8); } if(mode == AFTER){ text("greenbug",SCREENSIZE/5,SCREENSIZE/4); text("click to restart",SCREENSIZE/5,SCREENSIZE*7/8); return; } clicks++; if(clicks % 45 == 0){ time--; } if(time == 0){ mode = AFTER; } while(bugs.size() < 3){ addbug(); } ArrayList bugsToRemove = new ArrayList(); for(guy b : bugs){ if(random(1) < .03){ b.flapleft(); } if(random(1) < .03){ b.flapright(); } b.move(); if(b.hit(player)){ score++; bugsToRemove.add(b); } b.draw(); } bugs.removeAll(bugsToRemove); } void keyPressed(){ if(key == 'a' || key == 'A'){ player.flapleft(); } if(key == 'd'|| key == 'D'){ player.flapright(); } } void keyReleased(){ if(key == 'a'|| key == 'A'){ player.releaseleft(); } if(key == 'd'|| key == 'D'){ player.releaseright(); } } class guy { float diameter; float angle = 0.3; float x = 200; float y = 200; float angleleft = 0; float angleright = 0; float anglespeed = 0; float radius; float scale; int c ; float xspeed , yspeed; float PUSH = 5; guy(float scale, int c){ this(scale,c,SCREENSIZE /2,SCREENSIZE /2); } guy(float scale, int c, float x, float y){ this.c = c; diameter = SCREENSIZE / scale; radius = diameter/2; PUSH = scale/4; this.x = x; this.y = y; } void push(){ yspeed += sin(angle-(PI/2)) * PUSH ; xspeed += cos(angle-(PI/2)) * PUSH ; } boolean hit(guy other){ float dist = sqrt(pow(x-other.x,2) + pow(y-other.y,2)); if(dist < radius + other.radius){ return true; } return false; } void flapleft(){ if(angleleft < .1) { push(); anglespeed = .3; angleleft = -.6; } } void releaseleft(){ angleleft = 0; } void flapright(){ if(angleright < .1) { push(); anglespeed = -.3; angleright = .6; } } void releaseright(){ angleright = 0; } void move(){ anglespeed *= .5; xspeed *= .99; yspeed *= .99; angle += anglespeed; yspeed += .15; x += xspeed; y += yspeed; if(x < radius){ x = radius; xspeed = abs(xspeed); } if(y < radius){ y = radius; yspeed = abs(yspeed); } if(x > SCREENSIZE-radius){ x = SCREENSIZE-radius; xspeed = -abs(xspeed); } if(y > SCREENSIZE-radius){ y = SCREENSIZE-radius; yspeed = -abs(yspeed); } // grav } void draw(){ pushMatrix(); fill(c); strokeWeight(2); stroke(0,0,128); translate(x,y); ellipse(0,0,diameter,diameter); rotate(angle); //translate(-diameter/.5,0); fill(255,128); pushMatrix(); rotate(angleleft); triangle(-diameter,0,-diameter*.5,-diameter*.5,0,0); popMatrix(); pushMatrix(); rotate(angleright); triangle(diameter,0,diameter*.5, -diameter* .5,0,0); popMatrix(); popMatrix(); } }