/** Move the snake forward every update. */
  public void advance() {

    if (currentState == State.IDLE) {
      currentState = State.MOVING;
    }

    SnakePart head = snakeParts.get(0);

    int snakeLength = snakeParts.size() - 1;

    for (int i = snakeLength; i > 0; i--) {
      SnakePart previousPart = snakeParts.get(i - 1);
      SnakePart snakePart = snakeParts.get(i);
      // set the part's new position to the previous parts position.
      snakePart.setX(previousPart.getX());
      snakePart.setY(previousPart.getY());
    }

    switch (movementDirection) {
      case UP:
        head.setY(head.getY() - 1);
        break;
      case DOWN:
        head.setY(head.getY() + 1);
        break;
      case LEFT:
        head.setX(head.getX() - 1);
        break;
      case RIGHT:
        head.setX(head.getX() + 1);
        break;
    }
  }