public boolean run() {
        sendEvent(new GameEvent(this, "RunFrame"));
        for (int snakeArrayPos = activeSnakeList.size() -1;snakeArrayPos >= 0; snakeArrayPos--) {
            Snake snake = activeSnakeList.get(snakeArrayPos);
            snake.sendEvent(new GameEvent(snake, "RunFrame"));
            Vector2d startPos = snake.getHead().getFirst();
            boolean isDead = snake.advance(1);
            Vector2d endPos = snake.getHead().getFirst();
            boolean collision = isDead ||  doCollision(snake, new LineSegment(startPos, endPos));
            if (collision) {
                snake.setIsDead();
                deadSnakeList.add(snake);
                activeSnakeList.remove(snakeArrayPos);
            }

            if (food != null && !food.isConsumed() && food.isColliding(snake.getHeadPos())) {
                snake.eat(food);
                snake.sendEvent(new GameEvent(snake, "EatFood"));
                sendEvent(new GameEvent(this, "EatFood"));
            }
        }

        if (food == null || food.isConsumed()) {
            createFood(10 + ((int) Math.random() * 10));
        }
        return !activeSnakeList.isEmpty();
    }