Seite 1 von 2
Generator für Fantasienamen
Verfasst: 13.11.2004 16:06
von Kiffi
Hallo,
für ein Spiel benötige ich einen Generator, der Fantasienamen erstellt. Im
INet gibt es sehr viele Beispiele, die mir auf Knopfdruck mehr oder minder
gelungene Ergebnisse liefert (bei einstellbarer Option, ob die Spielfigur nett,
niedlich, böse oder sonstwas ist). Leider ohne Source, den ich portieren
könnte.
Leider habe ich momentan überhaupt keinen Ansatz, wie so was in PureBasic
zu realisieren ist.
Hat jemand von Euch einen Tipp für mich?
Danke & Grüße ... Kiffi
Verfasst: 13.11.2004 16:10
von Lars
Ich würde ggf. einfach Listen von männlichen und weiblichen Vornamen
machen und dazu noch eine Liste mit Nachnamen. Diese Listen müsste
man sicherlich irgendwo klauen können, je nach deinem Vorhaben solltest
du dir aber natürlich ein Paar Gedanken zum Copyright machen
Aus diesen Listen kannst du dann einfach mit einem Zufallsgenerator
Namen zusammenstellen.
Verfasst: 13.11.2004 17:32
von Kaeru Gaman
wenn es wirklich 'Fantasienamen' sein können und keine wirklichen, gäbe es noch folgende möglichkeit:
- erstelle ein Liste von Silben.
- setze in einer Proc jeweils 1-3 Silben für den vornamen und 2-4 Silben für den Nachnamen zusammen.
[Edit] ...du könntest dann jeden erzeugten namen mit einer kennzahl versehen (die sich aus den laufenden nummern der verwendeten silben zusammensetzt), um zu vermeiden, dass in einem programmlauf ein name doppelt erzeugt wird...
[Edit2] ...den silben könnte noch ein flag zugeordnet werden, um zu deklarieren, ob sie für gut u/o böse u/o niedlich etc. verwendet werden können...
Verfasst: 13.11.2004 17:44
von MLK
das hier wäre doch schon mal ne anregung:
Code: Alles auswählen
vokal.s="aeiou"
Doppelvokal.s="aeo"
Konsonant.s="bcdfghjklmnpqrstvwxyz"
Doppelkonsonant.s="bcfklmnprstz"
For x=1 To 1000
Laenge=3+Random(3)
;erster buchstabe - vokal oder konsonant
If Random(1)
Name.s+Mid(Konsonant,Random(Len(Konsonant)-1)+1,1)
Else
Name.s+Mid(vokal,Random(Len(vokal)-1)+1,1)
EndIf
;einer geht noch..
While Laenge>1
;letzter buchstabe ist ein vokal
If CountString(vokal,Right(Name,1))
;einen konsonanten dazu
Name+Mid(Konsonant,Random(Len(Konsonant)-1)+1,1)
Laenge-1
;wenn dieser ein möglicher doppelkonsonant und der zufall es will
If CountString(Doppelkonsonant,Right(Name,1)) And doppel=#True And Laenge>1 And Random(4)=0
;verdoppeln
Name+Right(Name,1)
Laenge-1
EndIf
;letzter buchstabe ist ein konsonant
Else
;einen vokal dazu
Name+Mid(vokal,Random(Len(vokal)-1)+1,1)
Laenge-1
;wenn dieser ein möglicher doppelvokal und der zufall es will
If CountString(Doppelvokal,Right(Name,1)) And doppel=#True And Laenge>1 And Random(4)=0
;verdoppeln
Name+Right(Name,1)
Laenge-1
EndIf
EndIf
;wenn die letzten beiden buchstaben gleich sind
If Right(Right(Name,2),1)=Left(Right(Name,2),1)
;verhindern dass noch zwei doppelte dazu kommen
doppel=#False
Else
;ansonsten ist es erlaubt
doppel=#True
EndIf
Wend
Name+"|"
Debug StringField(Name,x,"|")
Next
Verfasst: 13.11.2004 17:50
von Kaeru Gaman
@MLK
klasse idee, mit buchstaben zu arbeiten...
...liest sich gut, der code, leider kann ich ihn noch nicht testen (V3.30)...wird nächste woche besser
...btw: super-lustiges pic, George&Saddam, find ich einfach klasse

Verfasst: 13.11.2004 18:02
von MLK
meinen namen findet der code (unter angeben der richtigen länge) in zwischen 3 und 10 sekunden, oder 50000 und 2600000 versuchen raus

Verfasst: 13.11.2004 18:44
von Kiffi
Hallo,
erstmal vielen Dank für Eure rege Teilnahme!
hier habe ich auch mal einen kleinen Code zusammengebastelt:
Code: Alles auswählen
NewList sVokal.s()
NewList sKonsonant.s()
NewList sSilbe.s()
; Vokale
AddElement(sVokal()):sVokal()="a"
AddElement(sVokal()):sVokal()="e"
AddElement(sVokal()):sVokal()="i"
AddElement(sVokal()):sVokal()="o"
AddElement(sVokal()):sVokal()="u"
; Konsonanten
AddElement(sKonsonant()):sKonsonant()="b"
AddElement(sKonsonant()):sKonsonant()="c"
AddElement(sKonsonant()):sKonsonant()="d"
AddElement(sKonsonant()):sKonsonant()="f"
AddElement(sKonsonant()):sKonsonant()="g"
AddElement(sKonsonant()):sKonsonant()="h"
AddElement(sKonsonant()):sKonsonant()="j"
AddElement(sKonsonant()):sKonsonant()="k"
AddElement(sKonsonant()):sKonsonant()="l"
AddElement(sKonsonant()):sKonsonant()="m"
AddElement(sKonsonant()):sKonsonant()="n"
AddElement(sKonsonant()):sKonsonant()="p"
AddElement(sKonsonant()):sKonsonant()="q"
AddElement(sKonsonant()):sKonsonant()="r"
AddElement(sKonsonant()):sKonsonant()="s"
AddElement(sKonsonant()):sKonsonant()="t"
AddElement(sKonsonant()):sKonsonant()="v"
AddElement(sKonsonant()):sKonsonant()="w"
AddElement(sKonsonant()):sKonsonant()="x"
AddElement(sKonsonant()):sKonsonant()="y"
AddElement(sKonsonant()):sKonsonant()="z"
; Jetzt jeden Konsonanten mit einem Vokal zu einer Silbe verknüpfen
ResetList(sKonsonant())
While NextElement(sKonsonant())
ResetList(sVokal())
While NextElement(sVokal())
AddElement(sSilbe()):sSilbe()= sKonsonant() + sVokal()
Wend
Wend
; Maximale Anzahl Silben ermitteln
MaxCount.l=CountList(sSilbe())
For intU = 1 To 10 ; 10 Namen im Debugger ausgeben
sName.s = ""
For intI = 1 To 4 ; Jeder Name besteht aus 4 Silben
SelectElement(sSilbe(),Random(MaxCount))
sName = sName + sSilbe()
Next
; Namen ausgeben (1. Buchstabe groß)
Debug UCase(Left(sName,1)) + Mid(sName, 2, Len(sName)-1)
Next
to be continued...
Grüße ... Kiffi
Verfasst: 13.11.2004 18:54
von Kaeru Gaman
schon echt schick
a) wie wäre es , per zufall (oder ähnlich) einen teil der silben auf konsonant enden zu lassen ? oder ohne konsonant anfangen ?
... schau dir nochmal MLK's Beispiel bezüglich Doppelvokal + Doppelkonsonant durch...
b) eine alternative methode zur listen erstellung wäre eine schleife mit READ und unten dann DATA (wenn man sowas mag, deine lösung ist durchaus ok)
Verfasst: 13.11.2004 19:17
von Kiffi
> eine alternative methode zur listen erstellung wäre eine schleife
> mit READ und unten dann DATA
danke für den Tipp! Habe mir schon gedacht, daß es sowas in Purebasic
geben muss, habe ich aber auf die Schnelle nicht gefunden.
So sieht das schon etwas übersichtlicher aus.
Mit dem Doppelkonsonanten muss ich noch ein wenig knobeln.
Grüße ... Kiffi
Namen-Maschine
Verfasst: 14.11.2004 03:48
von Hroudtwolf
Entfernt. Out of date.