Generator für Fantasienamen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

so... ich hab jetzt auch mal 'ne routine entworfen...

... der erzeugt die WILDESTEN Fantasienamen...

... keinerlei geschlechtlicher oder kultureller bezug... :wink:

...mir ging es hier hauptsächlich um die FLAG-Idee

Code: Alles auswählen

; Flags:
; 0 = kann von bel. 2. gefolgt werden
; 1 = kann von bel. 2. ausser selbst gefolgt werden
; 2 = kann von bel. 2. ausser Special gefolgt werden
; 4 = ist special
;
; z.B.: 6 = ist Special und kann nur nicht-special gefolgt werden
;
; Diese Flags sind ziemlich willkürlich gesetzt, kann man noch überarbeiten...
; wer mehr als 3-Bit für flags benötigt, kann Grossbuchstaben als flags verwenden,
; asc() statt val(), und Bit 64 einfach ignorieren

Dim Char$(2)
Dim ChFl$(2)

Char$(0) = "aeiouy"
ChFl$(0) = "002015"
Char$(1) = "bcdfghjklmnpqrstvwxz"
ChFl$(1) = "04000111000030400020"

Procedure.s Create_Name(Lang.l)

  n.l
  Nummer.l
  NumFlg.l
  DopFlg.l = 0
  Out$ = ""
  Wrk$ = ""
  Typ.l = Random(1) ; Vokal oder Konsonant als erstes...
  
  For n = 1 To Lang
  
    Repeat
  
      Nummer = 1+Random(5+Typ*14) ; 6 Vokale, 20 Konsonanten....
      NumFlg = Val( Mid( ChFl$(Typ), Nummer, 1) )
      Weiter = 1
      
      If DopFl = 1

        If (LastFlg & 1)= 1 And Nummer = LastNum : Weiter=0 : EndIf
        ; Flag & 1 darf nicht selbst folgen
      
        If (LastFlg & 2)= 2 And (NumFlg & 4)= 4 : Weiter=0 : EndIf
        ; special darf nicht Flag & 2 folgen

      EndIf
      
    Until Weiter = 1
    
    Wrk$ + Mid(Char$(Typ), Nummer , 1)
    
    If Random(3) = 0 And DopFl = 0 And n>1 And n<Lang-1
    ; nächster Buchst. gleicher Typ ?
      DopFl = 1
      LastNum = Nummer
      LastFlg = NumFlg
    Else
      Typ = 1-Typ ; Typwechsel
      DopFl = 0
    EndIf
    
  Next

  Out$ = UCase(Left(Wrk$,1))+Mid(Wrk$,2,Lang)
  ; ich schenke mir das -1, weil wird eh abgeschnitten...
  
  ProcedureReturn Out$

EndProcedure

For x = 0 To 50
  LO = 3+Random(6)
  Debug Create_Name(LO)
Next
[EDIT] Special-Bezug innerhalb d. Konsonanten geändert...
[EDIT2] If DopFl = 1 / EndIf ergänzt...
Zuletzt geändert von Kaeru Gaman am 02.03.2005 17:58, insgesamt 3-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Fantasienamen

Beitrag von Hroudtwolf »

Prima......klingt auch gut.....

Wäre toll für ein Spiel mit Fabel-Wesen.(Klingt irgendwie Tierisch).

Zitiere Spock : Faszinierend...............
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yap... gibt halt alles mögliche...

...ich hatte auch schon "Lana" und "Pony" rausbekommen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten