public Ghost(GeoCoordinate position) { Position = position; StartPosition.Location = position; _heading = CoarseHeading.InvalidHeading; _random = new Random(); DistanceToPlayer = Double.PositiveInfinity; }
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; } }