Tron [] t; //boolean square representing pixels[] boolean [][] pix; boolean trails = true; int xm = 50; int ym = 50; int xCenter,yCenter; void setup(){ size(120,120); pix = new boolean [xm][ym]; for (int ix = 0; ix < xm; ix++){ for (int iy = 0; iy < ym; iy++){ pix [ix][iy] = false; } } t = new Tron[10]; for (int i = 0; i < t.length; i++){ t[i] = new Tron(random(xm-2)+1,random(ym-2)+1,random(3)); } xCenter = width>>1; yCenter = height>>1; noFill(); } void draw(){ background(255); stroke(100,100,255); rect(xCenter-50,yCenter-50,100,100); stroke(200,200,255); rect(xCenter-60,yCenter-60,120,120); for (int i = 0; i < 10; i++){ t[i].trace(); if (trails){ t[i].draw(); } } if (!trails){ drawCube(); } } void keyPressed(){ trails = !trails; } //debugging cube void drawCube(){ stroke(0); for (int ix = 1; ix < xm-1; ix++){ for (int iy = 1; iy < ym-1; iy++){ if(pix[ix][iy]) point(xCenter+((ix-(xm>>1))<<1),yCenter+((iy-(ym>>1))<<1)); } } } class Tron{ //light cycle particles int [] x; int [] y; int d,len,le; Tron(int x, int y,int d){ len = 50; le = len-1; this.x = new int [len]; this.y = new int [len]; this.d = d; for (int i = 0; i < len; i++){ this.x[i] = x; this.y[i] = y; } } void trace(){ int xp = x[le]; int yp = y[le]; boolean c = pix[xp][yp]; pix[xp][yp] = true; switch(d){ case 0: if (!pix[xp+1][yp]){ x[le]++; } else{ d = (d+1)%4; } break; case 1: if (!pix[xp][yp+1]){ y[le]++; } else{ d = (d+1)%4; } break; case 2: if (!pix[xp-1][yp]){ x[le]--; } else{ d = (d+1)%4; } break; case 3: if (!pix[xp][yp-1]){ y[le]--; } else{ d = (d+1)%4; } break; } xp = x[le]; yp = y[le]; if (x[le] > xm - 2){ x[le] = 2; } if (x[le] < 2){ x[le] = xm - 2; } if (y[le] > ym - 2){ y[le] = 2; } if (y[le] < 2){ y[le] = ym - 2; } xp = x[le]; yp = y[le]; for (int i = 1; i < len; i++){ x[i-1] = x[i]; y[i-1] = y[i]; } if(x[0] == x[1] && y[0] == y[1]){ pix[x[0]][y[0]]= true; } else{ pix[x[0]][y[0]] = false; } } void draw (){ for (int i = 1; i < len; i++){ if (abs(x[i-1]-x[i])<2 && abs(y[i-1]-y[i])<2){ stroke(230-((((210)/le)*i)+10),230-((((210)/le)*i)+10),255); line(xCenter+((x[i-1]-(xm>>1))<<1),yCenter+((y[i-1]-(ym>>1))<<1),xCenter+((x[i]-(xm>>1))<<1),yCenter+((y[i]-(ym>>1))<<1)); } } } }