1,000 Snakes Randomly Navigating a Maze

Another fun project using Processing.
1000snakesRandomlynavigating maze2
The behavior is slightly different from my previous Processing submission. However, this time the snakes are afraid of black walls, and if they head in the direction of a wall, they turn around in the opposite direction.

public int snakes = 1000;
public int[] numholdx = new int[snakes];
public int[] numholdy = new int[snakes];
public color[] colorhold = new color[snakes];
void setup()
{
  for (int k = 0 ; k < snakes; k++)
  {
    numholdx[k] = 100;
    numholdy[k] = 100;
  }
  int swap = 0;
  for (int k = 0 ; k < snakes; k++)
  {
    switch(swap) 
    {
      case 0: 
        colorhold[k] = #800026;
        break;
      case 1: 
        colorhold[k] = #bd0026;
        break;
      case 2: 
        colorhold[k] = #e31a1c;
        break;
      case 3: 
        colorhold[k] = #fc4e2a;
        break;
      case 4: 
        colorhold[k] = #ec7014;
        break;
      case 5: 
        colorhold[k] = #cc4c02;
        break;
      case 6: 
        colorhold[k] = #993404;
        break;
      case 7: 
        colorhold[k] = #662506;
        break;
    }
    swap +=1;
    if ( swap == 8 )
      swap = 0;
  }
  size(1280, 720);
  background(#ffffff);
}
 
void draw()
{
  stroke(000);
  fill(000);
 
  //maze walls
  rect(0, 0, 70, 720);
  rect(1210, 0, 70, 720);
  rect(0, 0, 1280, 70);
  rect(0, 650, 1280, 70);
  rect(200, 0, 70, 550);
  rect(400, 160, 70, 550);
  rect(600, 0, 70, 550);
  rect(800, 160, 70, 550);
  rect(1000, 0, 70, 550);
 
  for ( int line = 0; line < snakes; line ++)
  {
    fill(colorhold[line]);
      stroke(colorhold[line]);
    int r = int(random(0,4)); 
    //random direction.
    int len_max = int(random(0,5)); 
 
    //direction.
    int keep_dir = r;
    //box size.
    int size = 5;
 
    if ( keep_dir == 1 && get(numholdx[line], numholdy[line]- size) == -16777216)
      keep_dir = 3;
    else if ( keep_dir == 3 && get(numholdx[line], numholdy[line] + size + size) == -16777216)
       keep_dir = 1;
    else if ( keep_dir == 0 && get(numholdx[line] + size + size, numholdy[line]) == -16777216)
       keep_dir = 2;
    else if ( keep_dir == 2 && get(numholdx[line] - size, numholdy[line]) == -16777216)
       keep_dir = 0;
 
    if ( keep_dir == 0)
    {
       rect( numholdx[line] + size, numholdy[line], size, size, 2);
        numholdx[line] += size;
    }
    else if ( keep_dir == 3)
    {
        rect( numholdx[line], numholdy[line] + size,size, size, 2);
        numholdy[line] += size;
    }
    else if ( keep_dir == 2)
    {
        rect( numholdx[line] - size, numholdy[line], size, size, 2);
        numholdx[line] -= size;
    }
    else if ( keep_dir == 1)
    {
        rect( numholdx[line], numholdy[line]- size,size, size, 2);
        numholdy[line] -= size;
    }
  }
}

Leave a Reply

Your email address will not be published.