class Ant { double HARDNESS=0.8; // [0..1.0] double CURVEDNESS=0.5; // [0..0.5] double SPEED=1.0; double AGE=0; // [0..100] double AGESPEED=0.01; Vec pos=new Vec(); Vec mov=new Vec(SPEED,0,0); color col; int minX=0, maxX=10, minY=0, maxY=10; Ant(float x, float y, int mxX, int mxY, color[][] imgCol) { pos=new Vec((int)x,(int)y,0); maxX=mxX; maxY=mxY; mov.rotZ(2*Math.PI*Math.random()); col=imgCol[(int)random(maxX)][(int)random(maxY)]; } void setHardness(double h) { HARDNESS=h; } void setCurvedness(double c) { CURVEDNESS=c; } void setSpeed(double s) { SPEED=s; } void setAge(double a) { AGE=a; } void setAgeSpeed(double as) { AGESPEED=as; } void setColor(color c) { col=c; } void update(color[][] img, Vector allAnts, int id) { if (AGE<100.0) { // GET NEW DIRECTION: int r=1; Vec colMov=new Vec(); float leastDiff=1.0; for (int xo=-r;xo<=r;xo++) { for (int yo=-r;yo<=r;yo++) { int nx=(int)pos.x+xo; int ny=(int)pos.y+yo; boolean overEdge=(nx=maxX||ny=maxY); if (!overEdge) { float cd=colorDifference(col,img[nx][ny]); if (cd