public Pigeon(List <Place> places, int currentPosition)
        {
            index         = Randomize.GetValue(1, 9);
            maxTimeWiting = Randomize.GetValue(Config.pigeonMinTimesWaiting, Config.pigeonMaxTimesWaiting);

            ChoseDirection();

            pigeonAction = PigeonAction.Waiting;

            actuator = new PigeonActuator();
            sensor   = new PigeonSensor(this);

            this.places          = places;
            this.currentPosition = currentPosition;

            thread = new Thread(new ThreadStart(Loop));
            thread.Start();
        }
        /// <summary>
        /// This method is triggered when the cat appears.
        /// The pigeon must wake up or disperse to a random position.
        /// </summary>
        internal void WakeUpOrChangePosition()
        {
            if (pigeonAction == PigeonAction.Sleeping)
            {
                SetWakeUp();
                return;
            }

            int newPosition = Randomize.GetValue(0, Config.environmentSize - 1);

            if (!places[newPosition].isClean())
            {
                return;
            }

            SetDirection(newPosition);

            ExecuteWalk(newPosition);
        }