Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Created by Processing APDE.
- *project: "LangtonAnt"
- *User:[email protected]
- *Date:25-06-2022
- *Time: 21:38
- *Verton:0.0.3
- *Based on Langton Ant, And Prosessing code.
- */
- INT direccion,paso,tamanio=INT(LOG(displayWidth*displayHeight)),posicion;
- boolean resultado;
- boolean memoria[];
- langtonAnt a;//,b;
- void setup(){
- SIZE(displayWidth, displayHeight);
- colorMode(RGB, 255,255,255,127);
- COLOR gray=#7f7f7f;
- BACKGROUND(gray);
- tamanio=INT(LOG(displayWidth*displayHeight));
- posicion=0;
- paso=3;
- resultado=TRUE;
- memoria= NEW boolean [tamanio];
- strokeWeight(paso);
- mouseX=displayWidth/2;
- mouseY=displayHeight/2;
- direccion=0;
- //b= NEW langtonAnt(gray,0,3,0,0);
- a= NEW langtonAnt(gray,0,3,displayWidth/2,displayWidth/2);
- }
- void draw(){
- FOR (INT i=0;i<48;i++){
- IF(posicion<tamanio-1){
- posicion++;
- }ELSE{
- posicion=0;
- }
- memoria[posicion]=GET(mouseX%(displayWidth-1),mouseY%(displayHeight-1))<=#7f7f7f;
- resultado= TRUE;
- FOR (INT j=0;j<tamanio;j++){
- resultado=resultado&memoria[j];
- }
- direccion=ant(resultado,direccion);
- a.update(0,0);
- //b.update(7,7);
- }
- }
- INT ant(boolean pixelEsClaro,INT direccionActual){
- IF(pixelEsClaro){//izquierda
- stroke(255);
- point((mouseX+1)%(displayWidth-1),(mouseY+1)%(displayHeight-1));
- switch(direccionActual%4){
- CASE -4:CASE 0:mouseX=(mouseX+paso)%(displayWidth-1);BREAK;
- CASE -3:CASE 1:mouseY=(mouseY-paso)+(displayHeight-1)%(displayHeight-1);BREAK;
- CASE -2:CASE 2:mouseX=(mouseX-paso)+(displayWidth-1)%(displayWidth-1);BREAK;
- CASE -1:CASE 3:mouseY=(mouseY+paso)%(displayHeight-1);BREAK;
- }
- RETURN(direccionActual+1)%4;
- }ELSE{//derecha
- stroke(0);
- point(mouseX%(displayWidth-1),mouseY%(displayHeight-1));
- switch(direccionActual%4){
- CASE -4:CASE 0:mouseX=((mouseX-paso)+(displayWidth-1))%(displayWidth-1);BREAK;
- CASE -3:CASE 1:mouseY=(mouseY+paso)%(displayHeight-1);BREAK;
- CASE -2:CASE 2:mouseX=(mouseX+paso)%(displayWidth-1);BREAK;
- CASE -1:CASE 3:mouseY=((mouseY-paso)+(displayHeight-1))%(displayHeight-1);BREAK;
- }
- RETURN(direccionActual-1)%4;
- }
- }
- CLASS langtonAnt{
- INT direccion2,paso2,posicion2,cordenadaX,cordenadaY,
- tamanio2=INT(LOG(displayWidth*displayHeight));
- COLOR base;
- boolean resultado2,memoria2[];
- boolean pixelEsClaro2;
- langtonAnt(COLOR c,INT orientacion,INT pasos,INT X,INT Y){
- base=c;
- tamanio2=INT(LOG(displayWidth*displayHeight));
- posicion2=orientacion;
- paso2=pasos;
- resultado2=TRUE;
- memoria2=NEW boolean[tamanio2];
- cordenadaX=X;
- cordenadaY=Y;
- direccion2=0;
- }
- INT UPDATE(INT X,INT Y){
- strokeWeight(paso2);
- IF(posicion2<tamanio2-1){
- posicion2++;
- }ELSE{
- posicion2=0;
- }
- memoria2[posicion2]=GET(cordenadaX%(displayWidth-1),cordenadaY%(displayHeight-1))<=#7f7f7f;
- resultado2= TRUE;
- FOR(INT j=0;j<tamanio2;j++){
- resultado2=resultado2&memoria2[j];
- }
- pixelEsClaro2=memoria2[posicion2];
- IF(pixelEsClaro2){//izquierda
- stroke(255);
- point((cordenadaX+1)%(displayWidth-1),(cordenadaY+1)%(displayHeight-1));
- switch(direccion2%4){
- CASE -4:CASE 0:cordenadaX=(cordenadaX+paso)%(displayWidth-1);BREAK;
- CASE -3:CASE 1:cordenadaY=(cordenadaY-paso)+(displayHeight-1)%(displayHeight-1);BREAK;
- CASE -2:CASE 2:cordenadaX=(cordenadaX-paso)+(displayWidth-1)%(displayWidth-1);BREAK;
- CASE -1:CASE 3:cordenadaY=(cordenadaY+paso)%(displayHeight-1);BREAK;
- }
- RETURN direccion2=(direccion2+1)%4;
- }ELSE{//derecha
- stroke(0);
- point(cordenadaX%(displayWidth-1),cordenadaY%(displayHeight-1));
- switch(direccion2%4){
- CASE -4:CASE 0:cordenadaX=((cordenadaX-paso)+(displayWidth-1))%(displayWidth-1);BREAK;
- CASE -3:CASE 1:cordenadaY=(cordenadaY+paso)%(displayHeight-1);BREAK;
- CASE -2:CASE 2:cordenadaX=(cordenadaX+paso)%(displayWidth-1);BREAK;
- CASE -1:CASE 3:cordenadaY=((cordenadaY-paso)+(displayHeight-1))%(displayHeight-1);BREAK;
- }
- RETURN direccion2=(direccion2-1)%4;
- }
- }
- }
Add Comment
Please, Sign In to add comment