// --- Private methods --- private void AddEnemy() { var random = new Random(); Monster enemy; Vector3 newPosition; var i = 0; do { if (i++ > 100) return; // try 100 times before giving up newPosition = Hero.Position; if (random.NextDouble() > 0.5) { newPosition += Vector3.UnitZ * ((float)random.NextDouble() * 2 + (random.NextDouble() > 0.5 ? 3 : -5)); newPosition += Vector3.UnitX * ((float) random.NextDouble()*10 - 5); } else { newPosition += Vector3.UnitZ * ((float) random.NextDouble()*10 - 5); newPosition += Vector3.UnitX * ((float)random.NextDouble() * 2 + (random.NextDouble() > 0.5 ? 3 : -5)); } enemy = new WeakSkeleton(_game, this, newPosition); } while (!enemy.isValidPositionToMoveTo(newPosition.X, newPosition.Z)); monsters.Add(enemy); _game.Components.Add(enemy); }