Programmierung

Zufällige Namen mit C# erzeugen

Ich habe mir eine kleine Aufgabe gestellt. Wie kann ich zufällig Namen erzeugen, die auch halbwegs nach Namen klingen. Meine erste Version habe ich mit C# geschrieben. Ich werde aber auch eine JavaScript und / oder PHP-Version davon schreiben, aber das später.

Wie habe ich angefangen?

Zuerst habe ich mir eine neue Klasse erstellt, RandomNameCreator. Danach, hinzufügen von vier Arrays, mit folgender Einteilung: Konsonanten am Anfang, Konsonanten in der Mitte, Vokale am Anfang, Vokale in der Mitte. Mein Gedanke war folgender: Namen sind ungefähr so aufgebaut: Konsonante – Vokal – Konsonante – Vokal – … – Ende bzw. andersherum Vokal – Konsonante – Vokal – Konsonante – … – Ende. Das nur ganz grob. Ganz stimmt das nicht, aber auf diese Weise verschaffe ich mir erst einmal ein paar lesbare Namen.

    /// <summary>
    /// Diese Klasse generiert zufällige Namen.
    /// </summary>
    public class RandomNameCreator
    {
        private string[] _anfang_konsonant = {"B",
             "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P",
             "Q", "R", "S", "T", "V", "W", "Sch", "St", "Sp", "X", "Y", "Z"};
 
        private string[] _anfang_vokal = { "A", "E", "I", "O", "U", "Ei" };
 
        private string[] _mitte_vokal = { "a", "e", "i", "o", "u", "ei" };
 
        private string[] _mitte_konsonant = {"b", "c",
            "d", "f", "g", "h", "j", "k", "l", "m", "n", "p",
            "q", "r", "s", "t", "v", "w", "x", "y", "z", "sch", "st", "sp"};

Das ist mein Anfangscode. Gerade merke, ich hätte es auch anders machen können: Zwei Arrays, einmal mit Vokalen und einmal mit Konsonanten, und dann nur jeweils den Anfangsbuchstaben groß schreiben lassen. Aber ich zeige den Code jetzt erst einmal so, wie ich ihn habe.

Was wir noch brauchen, ist eine Variable, die für den Zufall zuständig ist:

        Random rand = new Random(Environment.TickCount);

Nun die eigentliche Funktion
Meine Funktion, die mir einen zufälligen Namen erstellt, sieht dann so aus:

        public string CreateName()
        {
            string l_erg = "";
 
            //Zuständig dafür, dass der Wechsel von Konsonante und Vokal
            //läuft.
            bool l_vokal = false;
 
            //Mit einer Wahrscheinlichkeit von 0.6 soll der
            //neue Name mit einem Konsonant starten
            if (rand.NextDouble() <= 0.6)
            {
                //Zufälligen Buchstaben aus der Anfangskonsonanten wählen
                l_erg += _anfang_konsonant[rand.Next(0, _anfang_konsonant.Length)];
                l_vokal = false;
            }
            else
            {
                //Zufälligen Buchstaben aus den Anfangsvokalen wählen
                l_erg += _anfang_vokal[rand.Next(0, _anfang_vokal.Length)];
                //wir zeigen dem Programm, dass der letzte Buchstabe
                //ein Vokal war...
                l_vokal = true;
            }
 
            int l_length = 10;
            //Die Länge des Namens wird auch zufällig sein
            for (int i = 0; i < rand.Next(1, l_length); i++)
            {
                if (l_vokal == true)
                {
                    //wenn der letzte Buchstabe ein Vokal war, dann fügen
                    //wir jetzt wieder eine konsonante ein
                    l_erg += _mitte_konsonant[rand.Next(0, _mitte_konsonant.Length)];
                    l_vokal = false;
                }
                else
                {
                    //da der letzte Buchstabe eine Konsonante war, werden
                    //wir jetzt ein Vokal dem Namen hinzufügen.
                    l_erg += _mitte_vokal[rand.Next(0, _mitte_vokal.Length)];
                    l_vokal = true;
                }
            }
 
            //Zurückgeben des neu-erstellen Namens
            return l_erg;
        }

Die Funktion macht folgendes: Erst wird der erste Buchstabe zufällig ausgewählt. Da die meisten Namen eher mit einer Konsonante als mit einem Vokal anfangen, sollte die Wahrscheinlichkeit hier höher sein, dass man eine Konsontante als Startbuchstaben bekommt.
Danach wird im Wechsel ein zufälliges Vokal bzw. eine zufällige Konsonsante ausgewählt. Die Länge sollte hierbei auch zufällig passieren. Wir wollen hier also fast alles dem Zufall überlassen 😉

Für diese Klasse habe ich einen Standardkonstruktor geschrieben, in dem nichts passiert.

        public RandomNameCreator()
        {
 
        }

Wie diese Funktion aufrufen?

Diese Funktion rufe ich dann schnell und einfach in einer Main-Funktion ein paar Mal auf:

        static void Main(string[] args)
        {
            RandomNameCreator rnc = new RandomNameCreator();
 
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(rnc.CreateName());
            }
 
            Console.ReadLine();
        }

Ein Beispielaufruf würde z.B. folgendes ergeben:

Liw
Mero
Eqes
Ulapu
Spur
Nuvobuv
Feira
Ayoga
Raqi
Epivusch

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.