Namens-Generator

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Silver_Knee

Betreff: Namens-Generator

BeitragSo, Jul 15, 2007 1:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Da viele leute mal bots schreiben wollen brauchen sie für die immer mal Namen. dafür gibt es diese lustige funktion die von Amul optimiert wurde
Code: [AUSKLAPPEN]
Function GenerateName$(min, max)
   Local name$, char, vowel, length
   vowel = Rand(0, 1)
   length = Rand(min, max)
   For x = 1 To length
      vowel = Not vowel
      If vowel
         Repeat
            char = Rand(95, 122)
         Until (char <> Asc("a")) And (char <> Asc("e")) And (char <> Asc("i")) And (char <> Asc("o")) And (char <> Asc("u"))
      Else
         Select Rand(1, 5)
            Case 1
               char = 97
            Case 2
               char = 101
            Case 3
               char = 105
            Case 4
               char = 111
            Case 5
               char = 117
         End Select
     EndIf
      name = name + Chr(char)
   Next
   name= Replace(name, "q", "qu")
   name= Replace(name, Chr(96), "sch")
   name= Replace(name, Chr(95), "ch")
   name = Upper(Mid(name, 1,1)) + Mid(name,2)
   Return name
End Function


Der code wurde von Amul optimiert und von mir verbessert, da "qu", "sch" und "ch" als ein Buchstabe gelten und es bei Amul's Code Schwierigkeiten bei der Großschreibung aus diesem Grund gab.

Für die Engländer unter uns nochmal eine englische version:
Code: [AUSKLAPPEN]
Function GenerateName_en$(min, max)
   Local name$, char, vowel, length
   vowel = Rand(0, 1)
   length = Rand(min, max)
   For x = 1 To length
      vowel = Not vowel
      If vowel
         Repeat
            char = Rand(95, 122)
         Until (char <> Asc("a")) And (char <> Asc("e")) And (char <> Asc("i")) And (char <> Asc("o")) And (char <> Asc("u"))
      Else
         Select Rand(1, 5)
            Case 1
               char = 97
            Case 2
               char = 101
            Case 3
               char = 105
            Case 4
               char = 111
            Case 5
               char = 117
         End Select
     EndIf
      name = name + Chr(char)
   Next
   name= Replace(name, "q", "qu")
   name= Replace(name, Chr(96), "sh")
   name= Replace(name, Chr(95), "th")
   name = Upper(Mid(name, 1,1)) + Mid(name,2)
   Return name
End Function


Es passiert dennoch oft das der italiener im prog rauskommt: Lacideci^^
Oder tscheschen: Oxawukuzec
Oder es kommen einfach tolle sachen wie: Nice
  • Zuletzt bearbeitet von Silver_Knee am So, Jul 15, 2007 17:35, insgesamt 4-mal bearbeitet

Puccini

BeitragSo, Jul 15, 2007 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
LOL

die namen klingen ja sogar fast wie echte! Laughing

cool gemacht Wink
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39

aMul

Sieger des Minimalist Compo 01/13

BeitragSo, Jul 15, 2007 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Nette Idee. Allerdings kann man das ganz noch sehr optimieren.

Ich hab mir mal erlaubt, die Funktion zu kürzen und etwas schneller zu machen Wink
Code: [AUSKLAPPEN]
Function GenerateName$(min, max)
   Local name$, char, vowel, length
   vowel = Rand(0, 1)
   length = Rand(min, max)
   For x = 1 To length
      vowel = 1 - vowel
      If vowel
         Repeat
            char = Rand(98, 122)
         Until char <> 101 And char <> 105 And char <> 111 And char <> 117
         name = name + Chr(char)
      Else
         Select Rand(1, 5)
            Case 1
               char = 97
            Case 2
               char = 101
            Case 3
               char = 105
            Case 4
               char = 111
            Case 5
               char = 117
         End Select
         name = name + Chr(char)
      EndIf
   Next
   name = Replace(name, "q", "qu")
   name = Upper(Left(name, 1)) + Right(name, length - 1)
   Return name
End Function

Funktionieren tut sie allerdings fast noch genauso wie vorher.

EDIT:
Hab gerade die Geschwindigkeit getestet, und meine Funktion ist bei mir etwa 10 mal schneller Smile Razz

Hier der Code zum Testen:
Code: [AUSKLAPPEN]
Function GenerateName$(min, max)
   Local name$, char, vowel, length
   vowel = Rand(0, 1)
   length = Rand(min, max)
   For x = 1 To length
      vowel = 1 - vowel
      If vowel
         Repeat
            char = Rand(98, 122)
         Until char <> 101 And char <> 105 And char <> 111 And char <> 117
         name = name + Chr(char)
      Else
         Select Rand(1, 5)
            Case 1
               char = 97
            Case 2
               char = 101
            Case 3
               char = 105
            Case 4
               char = 111
            Case 5
               char = 117
         End Select
         name = name + Chr(char)
      EndIf
   Next
   name = Replace(name, "q", "qu")
   name = Upper(Left(name, 1)) + Right(name, length - 1)
   Return name
End Function

Function GenerateName_old$(min,max)
   bed1=Rand(0,1)
   If bed1
      txt$="a"
      While txt$="a" Or txt="e" Or txt="i" Or txt="o" Or txt="u"
         txt$=Chr( Rand(97,122) )
      Wend
      name$=name+txt
   Else
      txt="b"
      While Not(txt="a" Or txt="e" Or txt="i" Or txt="o" Or txt="u")
         txt$=Chr( Rand(97,122) )
      Wend
      name=name+txt
   EndIf
   name=Upper(name)
   Leng=Rand(min-1,max-1)
   For x= 1 To leng
      bed1=Not(bed1)
      If bed1
         While txt="a" Or txt="e" Or txt="i" Or txt="o" Or txt="u"
            txt$=Chr( Rand(97,122) )
         Wend
         name=name+txt
      Else
         While Not(txt="a" Or txt="e" Or txt="i" Or txt="o" Or txt="u")
            txt$=Chr( Rand(97,122) )
         Wend
         name=name+txt
      EndIf
   Next
   name=Replace(name,"q","qu")
   name=Replace(name,"Q","Qu")
   Return name
End Function


SeedRnd MilliSecs()
Local ms, name$, i, ms1, ms2

ms = MilliSecs()

For i = 0 To 9999
   name = GenerateName_old(4, 8)
Next

ms1 = MilliSecs() - ms
ms = MilliSecs()

For i = 0 To 9999
   name = GenerateName(4, 8)
Next

ms2 = MilliSecs() - ms

Print "alte funktion: " + ms1 + "ms"
Print " durchschnitt: " + ms1 / 10000.0 + "ms"
Print ""
Print "neue funktion: " + ms2 + "ms"
Print " durchschnitt: " + ms2 / 10000.0 + "ms"
Print ""
Print "damit ist die neue funktion " + ms1 / Float(ms2) + "x schneller"
Print ""
Print ""
Print "zum beenden beliebige taste drücken..."

WaitKey
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Xeres

Moderator

BeitragSo, Jul 15, 2007 12:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Sind coole Namen dabei, wenn ich mal wieder unkreativ bin, werd ich's benutzen Wink
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Silver_Knee

Betreff: @amul

BeitragSo, Jul 15, 2007 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
hey danke ich werde es mit freude entgegen nehmen es soll auch gesagt sein dass ich äöü sowie sch und ch einbauen werde... ich arbeite dran und nehme einfachmal direkt den optimierten von amul^^

EDIT

der code von amul scheit irgendwo schwachstellen zu haben ich bekomme immer wieder so sachen wie Ao was bei meinem code nie statt gefunden hätte

EDIT

so die fehler sind alle draußen ich habs oben verbessert und ne neue version mit sch und ch ist drinne...

Evolver01

BeitragSo, Jul 15, 2007 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
nochmal ne kleine optimierung von mir^^:

name= Replace(name, "q", "qu")

genau hier
name=Replace(name,"quu","qu")
name=Replace(name,"Quu","Qu")
zwischen

name= Replace(name, Chr(96), "sch")
name= Replace(name, Chr(95), "ch")

da es immer mal vorkommt das sich ein doppel u einschleicht
Grafiker von Space Threat...

FireballFlame

BeitragSo, Jul 15, 2007 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hehe, schicke Sache!
Mit ein paar Codezeilen kann man auch sowas wie nen Lorem Ipsum-Generator draus machen Wink Laughing
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Evolver01

BeitragSo, Jul 15, 2007 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
tadaa nun kann er sogar apostroph gross und kleinbuchstaben (a e i o u):

Code: [AUSKLAPPEN]
Function GenerateName$(min, max)
   Local name$, char, vowel, length
   
   a$=Chr$(193)
   e$=Chr$(201)
   i$=Chr$(205)
   o$=Chr$(211)
   u$=Chr$(218)
   
   vowel = Rand(0, 1)
   length = Rand(min, max)
   For x = 1 To length
      vowel = Not vowel
      If vowel
         Repeat
            char = Rand(95, 122)
         Until (char <> Asc("a")) And (char <> Asc("e")) And (char <> Asc("i")) And (char <> Asc("o")) And (char <> Asc("u"))
      Else
         Select Rand(1, 25)
            Case 1
               char = 97
            Case 2
               char = 101
            Case 3
               char = 105
            Case 4
               char = 111
            Case 5
               char = 117
            Case 6
               char = 225
            Case 7
               char = 233
            Case 8
               char = 237
            Case 9
               char = 243
            Case 10
               char = 250
            Case 11
               char = 97
            Case 12
               char = 101
            Case 13
               char = 105
            Case 14
               char = 111
            Case 15
               char = 117
            Case 16
               char = 97
            Case 17
               char = 101
            Case 18
               char = 105
            Case 19
               char = 111
            Case 20
               char = 117
            Case 21
               char = 97
            Case 22
               char = 101
            Case 23
               char = 105
            Case 24
               char = 111
            Case 25
               char = 117
         End Select
      EndIf
      name = name + Chr(char)
   Next
   
   name= Replace(name, "q", "qu")
   name= Replace(name,"quu","qu")
   name= Replace(name, Chr(96), "sch")
   name= Replace(name, Chr(95), "ch")
   name= Upper(Mid(name, 1,1)) + Mid(name,2)
   
   apo$=Left(name,1)
   
   apoa$=Instr(apo,Chr$(225))
   If apoa =1 Then
      name=a+Mid(name,2,-1)
   EndIf
   
   apoe$=Instr(apo,Chr$(233))
   If apoe =1 Then
      name=e+Mid(name,2,-1)
   EndIf
   
   apoi$=Instr(apo,Chr$(237))
   If apoi =1 Then
      name=i+Mid(name,2,-1)
   EndIf
   
   apoo$=Instr(apo,Chr$(243))
   If apoo =1 Then
      name=o+Mid(name,2,-1)
   EndIf
   
   apou$=Instr(apo,Chr$(250))
   If apou =1 Then
      name=u+Mid(name,2,-1)
   EndIf

   Return name
End Function
Grafiker von Space Threat...

FireballFlame

BeitragSo, Jul 15, 2007 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Sooo, ich hab das Ganze mal noch ein wenig verkompliziert ^^
Der Code ist jetzt zwar wieder langsamer, aber es kommen jetzt noch schönere Namen heraus, finde ich ^^

Code: [AUSKLAPPEN]
Function GenerateName$(min, max)
   Local name$, char, lastchar, vowel, lastvowel, length, sz2
   vowel = Rand(0, 1)
   lastvowel=1-vowel
   length = Rand(min, max)
   
   For x = 1 To length
      If x<3 Or lastchar<97 Or lastchar>119 Or sz2=1 Or lastvowel=1 Or Rand(1,4)<3
         vowel = Not vowel
      Else
         vowel = Rand(0,1)
      End If
     
      If lastvowel=vowel sz2=1 Else sz2=0
      lastvowel=vowel
      If vowel
         Repeat
            char = Rand(94, 122)
         Until char<>Asc("a") And char<>Asc("e") And char<>Asc("i") And char<>Asc("o") And char<>Asc("u") And char<>lastchar And ((char<>99 And char<>113 And char<>118 And char<>120 And char<>121) Or Rand(1,7)>4) And (char>94 Or x>1)
      Else
         Select Rand(1, 5)
            Case 1
               char = Asc("a")
            Case 2
               char = Asc("e")
            Case 3
               char = Asc("i")
            Case 4
               char = Asc("o")
            Case 5
               char = Asc("u")
         End Select
      EndIf
     
      name = name + Chr(char)
      lastchar=char
   Next

   nz1$=Left(name,1)
   nzl$=Right(name,1)
   name=Mid(name,2,Len(name)-2)
   name=Replace(name,"b","bb",15)
   name=Replace(name,"c","cc",10)
   name=Replace(name,"d","dd",15)
   name=Replace(name,"f","ff",15)
   name=Replace(name,"g","gg",15)
   name=Replace(name,"k","kk",10)
   name=Replace(name,"l","ll",15)
   name=Replace(name,"m","mm",10)
   name=Replace(name,"n","nn",15)
   name=Replace(name,"p","pp",10)
   name=Replace(name,"s","ss",15)
   name=Replace(name,"t","tt",15)
   name=nz1+name+nzl

   name=Replace(name, "q", "qu")
   name=Replace(name,"quu","qu")
   name=Replace(name, Chr(96),"sch")
   name=Replace(name, Chr(95),"ch")
   name=Replace(name, Chr(94),"ck")

   nnl=Rand(min,max)
   name=Left(Upper(Mid(name,1,1))+Mid(name,2),nnl)
   Return name
End Function


Function Replace$(zrep_string$,zrep_from$,zrep_to$,zrep_probab=100)
zrep_fl=Len(zrep_from)
zrep_tl=Len(zrep_string)
zrep_vl=Len(zrep_to)-Len(zrep_from)
For zrep_snt=1 To zrep_tl
   If Mid(zrep_string,zrep_snt,zrep_fl)=zrep_from And Rand(1,100)<=zrep_probab
      zrep_string=Left(zrep_string,zrep_snt-1)+zrep_to+Mid(zrep_string,zrep_snt+zrep_fl,-1)
      zrep_snt=zrep_snt+zrep_vl
      zrep_tl=zrep_tl+zrep_vl
   End If
Next
Return zrep_string
End Function


Mal schaun, ob sich das Ganze noch ein bissl auf Aussprechbarkeit optimieren lässt...


@Evolver: Akzent heißen die Dinger (´, ` und ^), Abostroph ist das hier: ' Wink
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
  • Zuletzt bearbeitet von FireballFlame am Mo, Jul 16, 2007 1:02, insgesamt 3-mal bearbeitet

Evolver01

BeitragMo, Jul 16, 2007 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ja hehe danke dir... ich hab den code mit den akzenten noch etwas optimiert und hab noch Ý und ý hinzugeführt sieht nun echt nice aus Wink

Code: [AUSKLAPPEN]
Function GenerateName$(min, max)
   Local name$, char, vowel, length
   
   a$=Chr$(193)
   e$=Chr$(201)
   i$=Chr$(205)
   o$=Chr$(211)
   u$=Chr$(218)
   y$=Chr$(221)
   
   vowel = Rand(0, 1)
   length = Rand(min, max)
   For x = 1 To length
      vowel = Not vowel
      If vowel
         Repeat
            char = Rand(95, 122)
         Until (char <> Asc("a")) And (char <> Asc("e")) And (char <> Asc("i")) And (char <> Asc("o")) And (char <> Asc("u"))
      Else
         apornd=Rnd(1,10)
         If apornd <> 5 Then
            Select Rand(1,5)
               Case 1
                  char = 97
               Case 2
                  char = 101
               Case 3
                  char = 105
               Case 4
                  char = 111
               Case 5
                  char = 117
            End Select
         Else      
            Select Rand(1,6)
               Case 1
                  char = 225
               Case 2
                  char = 233
               Case 3
                  char = 237
               Case 4
                  char = 243
               Case 5
                  char = 250
               Case 6
                  char = 253
            End Select
         EndIf
      EndIf
      name = name + Chr(char)
   Next
   
   name= Replace(name, "q", "qu")
   name= Replace(name,"yý","ý")
   name= Replace(name,"ýy","y")
   name= Replace(name,"quu","qu")
   name= Replace(name, Chr(96), "sch")
   name= Replace(name, Chr(95), "ch")
   name= Upper(Mid(name, 1,1)) + Mid(name,2)
   
   apo$=Left(name,1)
   
   apoa$=Instr(apo,Chr$(225))
   If apoa =1 Then
      name=a+Mid(name,2,-1)
   EndIf
   
   apoe$=Instr(apo,Chr$(233))
   If apoe =1 Then
      name=e+Mid(name,2,-1)
   EndIf
   
   apoi$=Instr(apo,Chr$(237))
   If apoi =1 Then
      name=i+Mid(name,2,-1)
   EndIf
   
   apoo$=Instr(apo,Chr$(243))
   If apoo =1 Then
      name=o+Mid(name,2,-1)
   EndIf
   
   apou$=Instr(apo,Chr$(250))
   If apou =1 Then
      name=u+Mid(name,2,-1)
   EndIf
   
   apoy$=Instr(apo,Chr$(253))
   If apoy =1 Then
      name=y+Mid(name,2,-1)
   EndIf

   Return name
End Function
Grafiker von Space Threat...

FireballFlame

BeitragMo, Jul 16, 2007 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, hab jetzt mal beides gewissermaßen vereinigt und in meine Version auch Akzente eingebaut, geht bei mir einfacher ^^
Umlaute und weitere Zeichen sollte man meiner Meinung nach weglassen, sonst wirds zu länderspezifisch Wink


Hier ist jedenfalls der Code: [AUSKLAPPEN]
Function GenerateName$(min, max)
   Local name$, char, lastchar, vowel, lastvowel, length, sz2
   vowel = Rand(0, 1)
   lastvowel=1-vowel
   length = Rand(min, max)
   
   For x = 1 To length
      If x<3 Or lastchar<97 Or lastchar>119 Or sz2=1 Or lastvowel=1 Or Rand(1,4)<3
         vowel = Not vowel
      Else
         vowel = Rand(0,1)
      End If
     
      If lastvowel=vowel sz2=1 Else sz2=0
      lastvowel=vowel
      If vowel
         Repeat
            char = Rand(94, 122)
         Until char<>Asc("a") And char<>Asc("e") And char<>Asc("i") And char<>Asc("o") And char<>Asc("u") And char<>lastchar And ((char<>99 And char<>113 And char<>118 And char<>120 And char<>121) Or Rand(1,7)>4) And (char>94 Or x>1)
      Else
         Select Rand(1, 5)
            Case 1
               char = Asc("a")
            Case 2
               char = Asc("e")
            Case 3
               char = Asc("i")
            Case 4
               char = Asc("o")
            Case 5
               char = Asc("u")
         End Select
      EndIf
     
      name = name + Chr(char)
      lastchar=char
   Next

   nz1$=Left(name,1)
   nzl$=Right(name,1)
   name=Mid(name,2,Len(name)-2)
   name=Replace(name,"b","bb",15)
   name=Replace(name,"c","cc",10)
   name=Replace(name,"d","dd",15)
   name=Replace(name,"f","ff",15)
   name=Replace(name,"g","gg",15)
   name=Replace(name,"k","kk",10)
   name=Replace(name,"l","ll",15)
   name=Replace(name,"m","mm",10)
   name=Replace(name,"n","nn",15)
   name=Replace(name,"p","pp",10)
   name=Replace(name,"s","ss",15)
   name=Replace(name,"t","tt",15)

   name=name+nzl
   name=Replace(name,"a","á",5)
   name=Replace(name,"e","é",5)
   name=Replace(name,"i","í",5)
   name=Replace(name,"o","ó",5)
   name=Replace(name,"u","ú",5)
   name=Replace(name,"y","ý",4)
   name=Replace(name,"a","à",3)
   name=Replace(name,"e","è",3)
   name=Replace(name,"i","ì",3)
   name=Replace(name,"o","ò",3)
   name=Replace(name,"u","ù",3)
   name=Replace(name,"a","â",3)
   name=Replace(name,"e","ê",3)
   name=Replace(name,"i","î",3)
   name=Replace(name,"o","ô",3)
   name=Replace(name,"u","û",3)

   name=nz1+name
   name=Replace(name, "q", "qu")
   name=Replace(name,"quu","qu")
   name=Replace(name, Chr(96),"sch")
   name=Replace(name, Chr(95),"ch")
   name=Replace(name, Chr(94),"ck")

   nnl=Rand(min,max)
   name=Left(Upper(Mid(name,1,1))+Mid(name,2),nnl)
   Return name
End Function


Function Replace$(zrep_string$,zrep_from$,zrep_to$,zrep_probab=100)
zrep_fl=Len(zrep_from)
zrep_tl=Len(zrep_string)
zrep_vl=Len(zrep_to)-Len(zrep_from)
For zrep_snt=1 To zrep_tl
   If Mid(zrep_string,zrep_snt,zrep_fl)=zrep_from And Rand(1,100)<=zrep_probab
      zrep_string=Left(zrep_string,zrep_snt-1)+zrep_to+Mid(zrep_string,zrep_snt+zrep_fl,-1)
      zrep_snt=zrep_snt+zrep_vl
      zrep_tl=zrep_tl+zrep_vl
   End If
Next
Return zrep_string
End Function
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Evolver01

BeitragMo, Jul 16, 2007 1:25
Antworten mit Zitat
Benutzer-Profile anzeigen
nice, aber ein paar doppelbuchstaben hätts auch weglassen können und das "^" auch sieht irgendwie scheisse aus xD und wenn du dann noch definieren kannst, welcher name männlich, weiblich, cosmisch, ländisch ist und das alles ordentlich gelistet inne txt bekommst, bekommst n dickes lob von mir^^
Grafiker von Space Threat...

The_Nici

BeitragMo, Jul 16, 2007 1:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versuch gerade zu basteln, dass es rausfindet wie lange es geht bis es auf meinen Namen kommt. xD

Silver_Knee

BeitragMo, Jul 16, 2007 1:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Grundsätzlich n name mit a am ende ist fast immer weiblich und o ist ausschlaggebend für männlich... sogesehen..... Palava zb ist mehr weiblich und Xoqualo mehr männlich wer also sicher gehen will mnimmt einfach für jungs nur namen die auf o enden und für frauen nur welche die auf a enden.

Das ist eigendlich eine italiensche grammatik regel hat sich aber bei namen eingebürgert (Alexa Maria Sonia/Antonio Mario Francesco^^).

Als Nachname kann alles herhalten....

geschrieben hab ich das für bot-gegner bei Agent und für Planeten-Namen bei nem kleineren projekt. und da waren nun wirklich geschlechter egal

Evolver01

BeitragMo, Jul 16, 2007 2:54
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm ich hätte es toll gefunden wenn du nochmal online gekommen wärst.. aber naja .....
Grafiker von Space Threat...

FireballFlame

BeitragMo, Jul 16, 2007 3:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Evolver01 hat Folgendes geschrieben:
nice, aber ein paar doppelbuchstaben hätts auch weglassen können

Wenns dir zuviele sind, kannst du das ja verändern.
Für Doppelvokale musst du die Rand()-Bedingung in der 8. Zeile verändern und für die Doppelkonsonanten den letzten Parameter bei meiner neuen Replace-Funktion (der gibt die Wahrscheinlichkeit in % an).

Evolver01 hat Folgendes geschrieben:
und das "^" auch sieht irgendwie scheisse aus xD

Geschmackssache. Wenn dus net magst, dann nimms halt raus.


Evolver01 hat Folgendes geschrieben:
und wenn du dann noch definieren kannst, welcher name männlich, weiblich ...



Bitte sehr Wink
(den Code kann man gleich ausführen)
Code: [AUSKLAPPEN]
Graphics 640,480,0,2
SeedRnd MilliSecs()

For i=1 To 15
   n$=generatename(3,8)
   If namegender(n)=0 g$="(männlich)" Else g$="(weiblich)"
   Print n+"      "+g
Next

WaitKey
End










Function GenerateName$(min, max)
   Local name$, char, lastchar, vowel, lastvowel, length, sz2
   vowel = Rand(0, 1)
   lastvowel=1-vowel
   length = Rand(min, max)
   
   For x = 1 To length
      If x<3 Or lastchar<97 Or lastchar>119 Or sz2=1 Or lastvowel=1 Or Rand(1,4)<3
         vowel = Not vowel
      Else
         vowel = Rand(0,1)
      End If
     
      If lastvowel=vowel sz2=1 Else sz2=0
      lastvowel=vowel
      If vowel
         Repeat
            char = Rand(94, 122)
         Until char<>Asc("a") And char<>Asc("e") And char<>Asc("i") And char<>Asc("o") And char<>Asc("u") And char<>lastchar And ((char<>99 And char<>113 And char<>118 And char<>120 And char<>121) Or Rand(1,7)>4) And (char>94 Or x>1)
      Else
      Repeat
         Select Rand(1, 5)
               Case 1
                  char = Asc("a")
               Case 2
                  char = Asc("e")
               Case 3
                  char = Asc("i")
               Case 4
                  char = Asc("o")
               Case 5
                  char = Asc("u")
            End Select
      Until Rand(1,3)>1 Or char<>lastchar
      EndIf
     
      name = name + Chr(char)
      lastchar=char
   Next

   nz1$=Left(name,1)
   nzl$=Right(name,1)
   name=Mid(name,2,Len(name)-2)
   name=Replace(name,"b","bb",15)
   name=Replace(name,"c","cc",10)
   name=Replace(name,"d","dd",15)
   name=Replace(name,"f","ff",15)
   name=Replace(name,"g","gg",15)
   name=Replace(name,"k","kk",10)
   name=Replace(name,"l","ll",15)
   name=Replace(name,"m","mm",10)
   name=Replace(name,"n","nn",15)
   name=Replace(name,"p","pp",10)
   name=Replace(name,"s","ss",15)
   name=Replace(name,"t","tt",15)

   name=name+nzl
   name=Replace(name,"a","á",5)
   name=Replace(name,"e","é",5)
   name=Replace(name,"i","í",5)
   name=Replace(name,"o","ó",5)
   name=Replace(name,"u","ú",5)
   name=Replace(name,"y","ý",4)
   name=Replace(name,"a","à",3)
   name=Replace(name,"e","è",3)
   name=Replace(name,"i","ì",3)
   name=Replace(name,"o","ò",3)
   name=Replace(name,"u","ù",3)
   name=Replace(name,"a","â",2)
   name=Replace(name,"e","ê",2)
   name=Replace(name,"i","î",2)
   name=Replace(name,"o","ô",2)
   name=Replace(name,"u","û",2)

   name=nz1+name
   name=Replace(name, "q", "qu")
   name=Replace(name,"quu","qu")
   name=Replace(name, Chr(96),"sch")
   name=Replace(name, Chr(95),"ch")
   name=Replace(name, Chr(94),"ck")

   nnl=Rand(min,max)
   name=Left(Upper(Mid(name,1,1))+Mid(name,2),nnl)
   Return name
End Function


Function Replace$(zrep_string$,zrep_from$,zrep_to$,zrep_probab=100)
zrep_fl=Len(zrep_from)
zrep_tl=Len(zrep_string)
zrep_vl=Len(zrep_to)-Len(zrep_from)
For zrep_snt=1 To zrep_tl
   If Mid(zrep_string,zrep_snt,zrep_fl)=zrep_from And Rand(1,100)<=zrep_probab
      zrep_string=Left(zrep_string,zrep_snt-1)+zrep_to+Mid(zrep_string,zrep_snt+zrep_fl,-1)
      zrep_snt=zrep_snt+zrep_vl
      If zrep_snt<1 zrep_snt=1
      zrep_tl=zrep_tl+zrep_vl
   End If
Next
Return zrep_string
End Function













Function NameGender(zbname$)   ; Rückgabe: 0=männlich, 1=weiblich
   zbname=Lower(zbname)
   zbname=Replace(zbname,"á","a")
   zbname=Replace(zbname,"é","e")
   zbname=Replace(zbname,"í","i")
   zbname=Replace(zbname,"ó","o")
   zbname=Replace(zbname,"ú","u")
   zbname=Replace(zbname,"ý","y")
   zbname=Replace(zbname,"à","a")
   zbname=Replace(zbname,"è","e")
   zbname=Replace(zbname,"ì","i")
   zbname=Replace(zbname,"ò","o")
   zbname=Replace(zbname,"ù","u")
   zbname=Replace(zbname,"â","a")
   zbname=Replace(zbname,"ê","e")
   zbname=Replace(zbname,"î","i")
   zbname=Replace(zbname,"ô","o")
   zbname=Replace(zbname,"û","u")
   zbname=Replace(zbname,"sch",Chr(96))
   zbname=Replace(zbname,"ch",Chr(95))
   zbname=Replace(zbname,"ck",Chr(94))

mw#=0
For zhw=1 To Len(zbname)
   Select Mid(zbname,zhw,1)
      Case "u","c","w","z"
         mw=mw-1
      
      Case Chr(94),Chr(96),"k","g","o","p","q","r","s","t","x"
         mw=mw-2   
         
      Case Chr(95),"a","e","l","m","n"
         mw=mw+1
         
      Case "h","i","y","v"
         mw=mw+2
      
   End Select
Next

neg=-1
r$=Right(zbname,1)
If r="a" Or r="e" Or r="i" Or r="h" Or r="v" Or r="z" neg=1
If r="y" Or r="z" Or r="c" Or r="q" Or r="h" neg=0
mw=mw+5*neg
mw=Sgn(mw)
If mw=0 mw=mw+neg
If mw=0 mw=-1
If mw<1 mw=mw+1

Return mw
End Function
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
  • Zuletzt bearbeitet von FireballFlame am Di, Jul 17, 2007 1:35, insgesamt einmal bearbeitet

Evolver01

BeitragMo, Jul 16, 2007 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
hey, die function ist echt nice, die gefällt mir!^^ hab ich gleich bei mir eingebaut^^
Grafiker von Space Threat...

DAK

BeitragFr, Jul 20, 2007 0:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese Funktion würd ich nicht ungefiltert in nem Spiel verwenden... Vorallem die namegender funktion gibt manchmal mist aus... hatte z.B. Cho (männlich)
Baut aber auch noch ein, das es keine Namen gibt wie z.B. Sch
Gewinner der 6. und der 68. BlitzCodeCompo

FireballFlame

BeitragFr, Jul 20, 2007 1:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso ist das "Mist? Würdest du den Namen "Cho" zum ersten Mal hören, wüsstest du, ob das ein Männer- oder Frauenname ist? Die Funktion sollte ja nicht zwischen zwischen Phantasiewörtern Männer- und Frauennamen unterscheiden, nicht zwischen echten. die Funktion gibt auch z.B. bei "Opa" "weiblich" aus ^^

Zum Thema "Sch" wär wohl das einfachste, nen Workaround zu machen und einfach hinterher zu prüfen, ob ein Vokal im Namen ist.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Silver_Knee

BeitragFr, Jul 20, 2007 11:14
Antworten mit Zitat
Benutzer-Profile anzeigen
jeah dann kommt :
Scha
o.ô
ich find meine grundfunktion bringts auch dakommen auf jedenfall abwechslungsreiche namen raus.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group