torch [] t; boolean [][][] pix; boolean trails = false; boolean crash = false; BFont metaBold; int xm = 50; int ym = 50; int zm = 50; int score = 0; int lastscore = score; boolean view = true; void setup(){ metaBold = loadFont("Meta-Bold.vlw.gz"); pix = new boolean [xm][ym][zm]; for (int ix = 0; ix < xm; ix++){ for (int iy = 0; iy < ym; iy++){ for (int iz = 0; iz < zm; iz++){ pix [ix][iy][iz] = false; } } } //strokeWeight(3); size (400,400); t = new torch[1]; for (int i = 0; i < t.length; i++){ //t[i]=new torch(25,25,25,0); t[i] = new torch(int(random(xm-2))+1,int(random(ym-2))+1,int(random(zm-2))+1,int(random(4))); } framerate(12); textFont(metaBold, 44); } void loop(){ background(255); push(); translate(200,200,260); if (!view){ rotateY((TWO_PI/width)*mouseX); rotateX((TWO_PI/width)*mouseY); } if (crash){ t[0] = new torch(int(random(xm-2))+1,int(random(ym-2))+1,int(random(zm-2))+1,int(random(4))); crash = false; for (int ix = 0; ix < xm; ix++){ for (int iy = 0; iy < ym; iy++){ for (int iz = 0; iz < zm; iz++){ pix [ix][iy][iz] = false; } } } println(score); if(score>lastscore){ lastscore = score; } score = 0; } for (int i = 0; i < t.length; i++){ t[i].trace(); if (trails){ t[i].draw(); } } if (!trails){ drawCube(); } cubeBrown(); pop(); fill(0); text("!"+lastscore, 10, 50); score++; } void mousePressed(){ view = alt(view); } void keyPressed(){ if (key == RIGHT && t[0].d != 3){ t[0].d = 0; } if (key == DOWN && t[0].d != 4){ t[0].d = 1; } if (key == '1' && t[0].d != 5){ t[0].d = 2; } if (key == LEFT && t[0].d != 0){ t[0].d = 3; } if (key == UP && t[0].d != 1){ t[0].d = 4; } if (key == '0' && t[0].d != 2){ t[0].d = 5; } } //debugging cube void drawCube(){ strokeWeight(5); stroke(0); for (int ix = 1; ix < xm-1; ix++){ for (int iy = 1; iy < ym-1; iy++){ for (int iz = 1; iz < zm-1; iz++){ if(pix[ix][iy][iz]) point(ix-(xm/2),iy-(ym/2),iz-(zm/2)); } } } }//draw; void cubeBrown(){ strokeWeight(1); stroke(15,15,15,100); line(-(xm/2),-(ym/2),-(zm/2),(xm/2),-(ym/2),-(zm/2)); line(-(xm/2),-(ym/2),-(zm/2),-(xm/2),(ym/2),-(zm/2)); line(-(xm/2),-(ym/2),-(zm/2),-(xm/2),-(ym/2),(zm/2)); line((xm/2),-(ym/2),-(zm/2),(xm/2),(ym/2),-(zm/2)); line((xm/2),-(ym/2),-(zm/2),(xm/2),-(ym/2),(zm/2)); line(-(xm/2),(ym/2),-(zm/2),(xm/2),(ym/2),-(zm/2)); line(-(xm/2),-(ym/2),(zm/2),(xm/2),-(ym/2),(zm/2)); line(-(xm/2),-(ym/2),(zm/2),-(xm/2),(ym/2),(zm/2)); line(-(xm/2),(ym/2),(zm/2),(xm/2),(ym/2),(zm/2)); line(-(xm/2),(ym/2),(zm/2),-(xm/2),(ym/2),-(zm/2)); line((xm/2),(ym/2),(zm/2),(xm/2),(ym/2),-(zm/2)); line((xm/2),(ym/2),(zm/2),(xm/2),-(ym/2),(zm/2)); } class torch{ int [] x; int [] y; int [] z; int d,len,le; torch(int x, int y, int z,int d){ len = 2; le = len-1; this.x = new int [len]; this.y = new int [len]; this.z = new int [len]; this.d = d; for (int i = 0; i < len; i++){ this.x[i] = x; this.y[i] = y; this.z[i] = z; } } void trace(){ int xp = x[le]; int yp = y[le]; int zp = z[le]; //println(xp+" "+yp+" "+zp); boolean c = pix[xp][yp][zp]; pix[xp][yp][zp] = true; if (d == 0 && !pix[xp+1][yp][zp]){x[le]++; }else if(d == 0 && pix[xp+1][yp][zp]){crash=true; println("crash");} if (d == 1 && !pix[xp][yp+1][zp]){y[le]++; }else if(d == 1 && pix[xp][yp+1][zp]){crash=true;println("crash");} if (d == 2 && !pix[xp][yp][zp+1]){z[le]++; }else if(d == 2 && pix[xp][yp][zp+1]){crash=true;println("crash");} if (d == 3 && !pix[xp-1][yp][zp]){x[le]--; }else if(d == 3 && pix[xp-1][yp][zp]){crash=true;println("crash");} if (d == 4 && !pix[xp][yp-1][zp]){y[le]--; }else if(d == 4 && pix[xp][yp-1][zp]){crash=true;println("crash");} if (d == 5 && !pix[xp][yp][zp-1]){z[le]--; }else if(d == 5 && pix[xp][yp][zp-1]){crash=true;println("crash");} xp = x[le]; yp = y[le]; zp = z[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;} if (z[le] > zm - 2){z[le] = 2;} if (z[le] < 2){z[le] = zm - 2;} xp = x[le]; yp = y[le]; zp = z[le]; //pix[xp][yp][zp] = c; for (int i = 1; i < len; i++){ x[i-1] = x[i]; y[i-1] = y[i]; z[i-1] = z[i]; } if(x[0] == x[1] && y[0] == y[1] && z[0] == z[1]){ pix[x[0]][y[0]][z[0]] = true; }else{ pix[x[0]][y[0]][z[0]] = true; } } void draw (){ for (int i = 1; i < len; i++){ if (abs(x[i-1]-x[i])<2 && abs(y[i-1]-y[i])<2 && abs(z[i-1]-z[i])<2){ //stroke(((255.0)/le)*i,((255.0)/le)*i,((255.0)/le)*i,((255.0)/le)*i); stroke(255-((((155.0)/le)*i)+100),255-((((155.0)/le)*i)+100),55,((255.0)/le)*i); //stroke(255); line(x[i-1]-(xm/2),y[i-1]-(ym/2),z[i-1]-(zm/2),x[i]-(xm/2),y[i]-(ym/2),z[i]-(zm/2)); } } } } boolean alt(boolean xt){ if (xt){ xt = false; }else{ xt = true; } return xt; }