FHRL

LangtonAntModification0.0.3

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