/** 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; } }