private IGameObject Move(Task <IGameObject> antecedent)
        {
            Bug bug = antecedent.Result as Bug;

            if (bug == null)
            {
                return(null);
            }

            lock (globalLock)
            {
                if (bug.IsAtWar || bug.IsPairing || bug.IsEating)
                {
                    return(bug);
                }

                int desiredX = bug.PosX;
                int desiredY = bug.PosY;

                if (bug.Direction == Bug.DirectionEnum.Up)
                {
                    --desiredY;
                }
                else if (bug.Direction == Bug.DirectionEnum.Down)
                {
                    ++desiredY;
                }
                else if (bug.Direction == Bug.DirectionEnum.Lef)
                {
                    --desiredX;
                }
                else if (bug.Direction == Bug.DirectionEnum.Right)
                {
                    ++desiredX;
                }

                if (desiredX >= 0 && desiredX < conf.MapWidth &&
                    desiredY >= 0 && desiredY < conf.MapHeight &&
                    IsCellEmpty(desiredX, desiredY) == true)
                {
                    bug.PosX = desiredX;
                    bug.PosY = desiredY;

                    if (random.Next(0, 100) > 100 - conf.ChangeDirectionChance)
                    {
                        bug.Direction = Bug.GetRandomDirection();
                    }
                }
                else
                {
                    bug.Direction = Bug.GetRandomDirection();
                }

                return(bug);
            }
        }