0

Hi could anybody help me understand this particular piece of code from this Langton's Ant sketch.

antLoc = new int[]{rows/2,columns/2};

I don't exactly understand what is actually happening here, here is the rest of the code for context. (originally from here http://www.openprocessing.org/visuals/?visualID=13653)

boolean[][] state;
int[] antLoc;
int antDirection;

int squareSize = 5;
int columns, rows;

color bgCol = color(0,128,128);
color antCol = color (255,0,0);
color sqCol = color(128,128,128);

void setup(){
  size(800,600);
  background(bgCol);
  columns = width/squareSize;
  rows = height/squareSize;

  state = new boolean[rows][columns];
  for(int j = 0; j < rows; j++){
    for(int i = 0; i < columns; i++){
      state[j][i] = false;
    }
  }
  antLoc = new int[]{rows/2,columns/2};
  antDirection = 1;
}

void drawScene(){
  fill(sqCol);
  for(int j = 0; j < rows; j++){
    for(int i = 0; i < columns; i++){
      if(state[j][i]){
        rect(i*squareSize,j*squareSize,squareSize,squareSize);
      }
    }
  }
  fill(antCol);
  rect(antLoc[1]*squareSize,antLoc[0]*squareSize,squareSize,squareSize);
}

void turnLeft(){
  if (antDirection > 1){
    antDirection--;
  } else{
    antDirection = 4;
  }
}

void turnRight(){
  if (antDirection < 4){
    antDirection++;
  } else {
    antDirection = 1;
  }
}

void moveForward(){
  if (antDirection == 1){
    antLoc[0]--;
  }
  if (antDirection == 2){
    antLoc[1]++;
  }
  if (antDirection == 3){
    antLoc[0]++;
  }
  if (antDirection == 4){
    antLoc[1]--;
  }
}

void updateScene(){
  moveForward();
  if (state[antLoc[0]][antLoc[1]] == false){
    state[antLoc[0]][antLoc[1]] = true;
    turnRight();
  } else {
    state[antLoc[0]][antLoc[1]] = false;
    turnLeft();
  }
}

void draw(){
  background(bgCol);
  drawScene();
  for(int i = 0; i < 10; i++){
      updateScene();
  }

}

2 Answers 2

1

The line you mention:

antLoc = new int[]{rows/2,columns/2};

is broadly similar to:

antLoc = new int[2];
antLoc[0] = rows / 2;
antLoc[1] = columns / 2;

It's just syntactic shorthand, for convenience.

Sign up to request clarification or add additional context in comments.

1 Comment

Wow thank you so much! That makes a lot more sense, my next question was going to be how this works: if (state[antLoc[0]][antLoc[1]] == false) but I think I get it now, thanks a lot!
1

Your code creates a new array of int with length 2, and initialises the elements with the given expressions. It is equivalent to:

antLoc = new int[2];
antLoc[0] = rows/2;
antLoc[1] = columns/2;

1 Comment

Thank you for the prompt reply!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.