// Hexatron // by Rogelio Tomas Rotators[] rot; int radius = 200, imini=0; float r2 = radius/2.; int[] lab = new int[24]; int[] lin = new int[4]; PFont f; float cp3=cos(PI/3), sp3=sin(PI/3); void setup() { size(radius*2, radius*2); for (int i=0; i <24;i++){ lab[i]=i;} rot = new Rotators[7]; rot[0]= new Rotators (radius-r2*cp3,radius-r2*sp3, 0,1,2,6,7,8); rot[1]= new Rotators (radius+r2*cp3,radius-r2*sp3, 2,3,4,8,9,10); rot[2]= new Rotators (radius-r2 ,radius , 5,6,7,12,13,14); rot[3]= new Rotators (radius+r2 ,radius , 9,10,11,16,17,18); rot[4]= new Rotators (radius-r2*cp3,radius+r2*sp3, 13,14,15,19,20,21); rot[5]= new Rotators (radius+r2*cp3,radius+r2*sp3, 15,16,17,21,22,23); rot[6]= new Rotators (radius ,radius , 7,8,9,14,15,16); f = loadFont("Univers45.vlw.gz"); textFont(f, radius/7); textAlign(CENTER); } void hexagon( float rad, float hexx, float hexy){ beginShape(LINE_STRIP); for(int i=0; i<=6; i++) { vertex(rad*cos(i*PI/3)+hexx,rad*sin(i*PI/3)+hexy); } endShape(); } void draw() { background(0); fill(0); stroke(100); hexagon(r2,radius,radius); for (int i=1; i<=6; i++){ hexagon(r2, r2*cos(i*PI/3)+radius,r2*sin(i*PI/3)+radius); line(r2*cos(i*PI/3)+radius,r2*sin(i*PI/3)+radius,radius*cos(i*PI/3)+radius,radius*sin(i*PI/3)+radius); } stroke(255); hexagon(radius,radius,radius); int mini=10000000; for (int i=0;i<=6;i++){ if (dist(mouseX,mouseY,rot[i].hx,rot[i].hy)1) shift=-shift+1; text(lab[ind]+1, linx[j]+i*r2/2., radius+r2*sp3*(j-1.5)+shift*r2*0.2); ind++; } } } void mouseReleased() { rot[imini].rotatenow(); } class Rotators { int hx, hy, ha, hb, hc, hd, he, hf; Rotators(float x, float y,int a, int b, int c, int d, int e, int f){ hx=(int) x; hy=(int) y; ha=a; hb=b; hc=c; hd=d; he=e; hf=f; } void rotatenow(){ int templaba=lab[ha]; lab[ha]=lab[hb]; lab[hb]=lab[hc]; lab[hc]=lab[hf]; lab[hf]=lab[he]; lab[he]=lab[hd]; lab[hd]=templaba; } }