Exemple #1
0
 public Ghost(GeoCoordinate position)
 {
     Position = position;
     StartPosition.Location = position;
     _heading = CoarseHeading.InvalidHeading;
     _random = new Random();
     DistanceToPlayer = Double.PositiveInfinity;
 }
Exemple #2
0
 void MaybeSwitchDirection(GeoCoordinate userPosition)
 {
     int rnd;
     switch (_heading)
     {
         case CoarseHeading.InvalidHeading:
             // Need to generate a new heading
             // 50/50 random choice
             rnd = _random.Next(2);
             if (rnd == 0)
             {
                 _heading = CoarseHeading.Longitude;
             }
             else
             {
                 _heading = CoarseHeading.Latitude;
             }
             break;
         case CoarseHeading.Latitude:
         case CoarseHeading.Longitude:
             // Check if there only exists one direction to the user
             GeoCoordinate userLatitude = new GeoCoordinate(userPosition.Latitude, Position.Longitude);
             GeoCoordinate userLongitude = new GeoCoordinate(Position.Latitude, userPosition.Longitude);
             if (userLatitude.GetDistanceTo(Position) < Epsilon)
             {
                 _heading = CoarseHeading.Longitude;
             }
             else if (userLongitude.GetDistanceTo(Position) < Epsilon)
             {
                 _heading = CoarseHeading.Latitude;
             }
             else
             {
                 // Two possible directions, maybe change direction
                 // Likelihood of changing direction is 2%
                 rnd = _random.Next(100);
                 if (rnd < 2)
                 {
                     if (_heading == CoarseHeading.Longitude)
                     {
                         _heading = CoarseHeading.Latitude;
                     }
                     else
                     {
                         _heading = CoarseHeading.Longitude;
                     }
                 }
             }
             break;
     }
 }