public void Move()
            {
                IfMustBeMoved(() =>
                {
                    if (!_currentTrainNetwork.Contains(CurrentPosition))
                    {
                        Trail.Enqueue(_currentTrainNetwork.First());
                    }
                    else
                    {
                        var queryNext = CurrentPosition
                                        .GetNorthEastSouthWest()
                                        .OrderBy(x => Random.Next())
                                        .Where(x => x.HasMatch)
                                        .Select(x => x.MatchingObject)
                                        .Where(_currentTrainNetwork.Contains)
                                        .AsQueryable();

                        var next = queryNext
                                   .FirstOrDefault(x => x != PreviousPosition && x != CurrentPosition)
                                   ?? queryNext.FirstOrDefault();

                        Move(next);
                    }
                });
            }
Esempio n. 2
0
 protected BaseVehicle(Func <ISet <IZoneInfo> > getZoneInfosFunc, IZoneInfo currentPosition)
 {
     GetZoneInfosFunc = getZoneInfosFunc;
     Trail.Enqueue(currentPosition);
 }