FHRL

LangtonAntModification0.0.3

Jun 25th, 2022 (edited)
944
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*Created by Processing APDE.
  2.  *project: "LangtonAnt"
  3.  *User:fhrl007@gmail.com
  4.  *Date:25-06-2022
  5.  *Time: 21:38
  6.  *Verton:0.0.3
  7.  *Based on Langton Ant, And Prosessing code.
  8.  */
  9. INT direccion,paso,tamanio=INT(LOG(displayWidth*displayHeight)),posicion;
  10. boolean resultado;
  11. boolean memoria[];
  12. langtonAnt a;//,b;
  13. void setup(){
  14.   SIZE(displayWidth, displayHeight);
  15.   colorMode(RGB, 255,255,255,127);
  16.   COLOR gray=#7f7f7f;
  17.   BACKGROUND(gray);
  18.   tamanio=INT(LOG(displayWidth*displayHeight));
  19.   posicion=0;
  20.   paso=3;
  21.   resultado=TRUE;
  22.   memoria= NEW boolean [tamanio];
  23.   strokeWeight(paso);
  24.   mouseX=displayWidth/2;
  25.   mouseY=displayHeight/2;
  26.   direccion=0;
  27.   //b= NEW langtonAnt(gray,0,3,0,0);
  28.   a= NEW langtonAnt(gray,0,3,displayWidth/2,displayWidth/2);
  29. }
  30. void draw(){
  31.   FOR (INT i=0;i<48;i++){
  32.     IF(posicion<tamanio-1){
  33.       posicion++;
  34.     }ELSE{
  35.       posicion=0;
  36.     }
  37.     memoria[posicion]=GET(mouseX%(displayWidth-1),mouseY%(displayHeight-1))<=#7f7f7f;
  38.     resultado= TRUE;
  39.     FOR (INT j=0;j<tamanio;j++){
  40.       resultado=resultado&memoria[j];
  41.     }
  42.     direccion=ant(resultado,direccion);
  43.     a.update(0,0);
  44.     //b.update(7,7);
  45.    
  46.   }
  47. }
  48. INT ant(boolean pixelEsClaro,INT direccionActual){
  49.   IF(pixelEsClaro){//izquierda
  50.     stroke(255);
  51.     point((mouseX+1)%(displayWidth-1),(mouseY+1)%(displayHeight-1));
  52.     switch(direccionActual%4){
  53.       CASE -4:CASE 0:mouseX=(mouseX+paso)%(displayWidth-1);BREAK;
  54.       CASE -3:CASE 1:mouseY=(mouseY-paso)+(displayHeight-1)%(displayHeight-1);BREAK;
  55.       CASE -2:CASE 2:mouseX=(mouseX-paso)+(displayWidth-1)%(displayWidth-1);BREAK;
  56.       CASE -1:CASE 3:mouseY=(mouseY+paso)%(displayHeight-1);BREAK;
  57.      
  58.     }
  59.     RETURN(direccionActual+1)%4;
  60.   }ELSE{//derecha
  61.     stroke(0);
  62.     point(mouseX%(displayWidth-1),mouseY%(displayHeight-1));
  63.     switch(direccionActual%4){
  64.       CASE -4:CASE 0:mouseX=((mouseX-paso)+(displayWidth-1))%(displayWidth-1);BREAK;
  65.       CASE -3:CASE 1:mouseY=(mouseY+paso)%(displayHeight-1);BREAK;
  66.       CASE -2:CASE 2:mouseX=(mouseX+paso)%(displayWidth-1);BREAK;
  67.       CASE -1:CASE 3:mouseY=((mouseY-paso)+(displayHeight-1))%(displayHeight-1);BREAK;
  68.     }
  69.     RETURN(direccionActual-1)%4;
  70.   }
  71. }
  72. CLASS langtonAnt{
  73.   INT direccion2,paso2,posicion2,cordenadaX,cordenadaY,
  74.       tamanio2=INT(LOG(displayWidth*displayHeight));
  75.   COLOR base;
  76.   boolean resultado2,memoria2[];
  77.   boolean pixelEsClaro2;
  78.   langtonAnt(COLOR c,INT orientacion,INT pasos,INT X,INT Y){
  79.     base=c;
  80.     tamanio2=INT(LOG(displayWidth*displayHeight));
  81.     posicion2=orientacion;
  82.     paso2=pasos;
  83.     resultado2=TRUE;
  84.     memoria2=NEW boolean[tamanio2];
  85.     cordenadaX=X;
  86.     cordenadaY=Y;
  87.     direccion2=0;
  88.   }
  89.   INT UPDATE(INT X,INT Y){
  90.     strokeWeight(paso2);
  91.     IF(posicion2<tamanio2-1){
  92.       posicion2++;
  93.     }ELSE{
  94.       posicion2=0;
  95.     }
  96.     memoria2[posicion2]=GET(cordenadaX%(displayWidth-1),cordenadaY%(displayHeight-1))<=#7f7f7f;
  97.     resultado2= TRUE;
  98.     FOR(INT j=0;j<tamanio2;j++){
  99.       resultado2=resultado2&memoria2[j];
  100.     }
  101.    
  102.     pixelEsClaro2=memoria2[posicion2];
  103.     IF(pixelEsClaro2){//izquierda
  104.     stroke(255);
  105.     point((cordenadaX+1)%(displayWidth-1),(cordenadaY+1)%(displayHeight-1));
  106.     switch(direccion2%4){
  107.       CASE -4:CASE 0:cordenadaX=(cordenadaX+paso)%(displayWidth-1);BREAK;
  108.       CASE -3:CASE 1:cordenadaY=(cordenadaY-paso)+(displayHeight-1)%(displayHeight-1);BREAK;
  109.       CASE -2:CASE 2:cordenadaX=(cordenadaX-paso)+(displayWidth-1)%(displayWidth-1);BREAK;
  110.       CASE -1:CASE 3:cordenadaY=(cordenadaY+paso)%(displayHeight-1);BREAK;
  111.      
  112.     }
  113.     RETURN direccion2=(direccion2+1)%4;
  114.   }ELSE{//derecha
  115.     stroke(0);
  116.     point(cordenadaX%(displayWidth-1),cordenadaY%(displayHeight-1));
  117.     switch(direccion2%4){
  118.       CASE -4:CASE 0:cordenadaX=((cordenadaX-paso)+(displayWidth-1))%(displayWidth-1);BREAK;
  119.       CASE -3:CASE 1:cordenadaY=(cordenadaY+paso)%(displayHeight-1);BREAK;
  120.       CASE -2:CASE 2:cordenadaX=(cordenadaX+paso)%(displayWidth-1);BREAK;
  121.       CASE -1:CASE 3:cordenadaY=((cordenadaY-paso)+(displayHeight-1))%(displayHeight-1);BREAK;
  122.     }
  123.     RETURN direccion2=(direccion2-1)%4;
  124.   }
  125.   }
  126. }
RAW Paste Data Copied