random Facegenerator

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
1of7470000000
User
Beiträge: 10
Registriert: Donnerstag 8. Februar 2018, 22:04

Freitag 9. Februar 2018, 00:19

Code: Alles auswählen

#Python 2.7
import random
def facegen():
    eyes = [  # Die %s Augen sind
    "gross",
    "eher schmal und weisen eine leichte Neigung nach oben auf",
    "nur als klassische grosse Rehaugen zu beschreiben. Sehr attraktiv.",
    "eher unscheinbar. Die Augenfarbe kommt durch eine \n relativ kleine Iris nicht zum tragen",
    "truebe, was auf eine Erkrankung oder Mangelerscheinungen hinweisenn koennte.",
    "an den ausseren Raendern etwasnach unten gezogen, was \nihnen einen staendig traurigen Ausdruck verleiht",
    "von einer leichten schraege, was ihnen ein vage exotisches Aussehen verleiht",
    "staendig in Bewegung, was einen Betrachter recht nevoes machen kann",
    "klein und stehen leicht schraeg"
    "immer wieder dabei, die naehere Umgebung zu ueberblicken"
     ]

    eyes_color = [ #Die eyes_color Augen
        "hellgruenen",
        "hellen stechenden"
        "hellbraunen",
        "meerblauen",
        "haselnusbraunen",
        "aschgrauen",
        "braunen",
        "dunklen warmen braunen"
        "tiefen braunen",
        "dunkelbraunen",
        "blauen",
        "strahlend blauen",
        "gruenen",
        "stechend gruenen"
        "grossen schwarzbraunen",
        "schwarzbraunen",
        "stechend schwarzbraunen",
        "tiefbraunen",
        "graublauen",
        "derart dunkelbraunen, fast gaenzlich schwarzen"
        ]
    nose = [ # Die Nase
        "ist klein und gerade",
        "ist eine typische Adlernase",
        "ist von normalem Wuchs, mit etwas breiteren Nasenfluegeln",
        "besitzt abgesehen von dem etwas laengeren Nasenbein keine auffaelligkeiten",
        "ist kurz, die Nasenfluegel sind eher klein",
        "ist eher klein"
        "ist klein und gerade. Sie scheint ehemals gebrochen",
        "eine typische Adlernase, allerdings hat das linke Nasenloch einen Riss",
        "ist von normalem Wuchs, mit etwas breiteren Nasenfluegeln",
        "hat, abgesehen von dem etwas laengeren Nasenbein starke Akne",
        "ist laenger und die Nasenfluegel sind klein, ein Haar steht aus der Nase hervor",
        "ist eher klein und scheint oefter gebrochen worden zu sein. Ausserdem ist sie vernarbt."
        ]

    lips = [ # Die Lippen
        "darunter sind voll und wohlgeformt",
        "darunter sind schmal",
        "dieses Gesichts sind voll und von schoener Form",
        "darunter sind aestetisch geschwungen",
        "dieses Gesichts sind von schoener Form",
        "darunter sind voll und wohlgeformt, weisen jedoch eine Narbe an der linken Unterlippe auf",
        "dieses Gesichts sind aestetisch geschwungen, weisen jedoch an der rechten Obelippe eine kleine Narbe auf",
        "darunter scheinen blass, aber wohlgeformt",
        "dieses Gesichts sind fein geschwungen, aber etwas rissig"
        ]

    ears = [  # Die Ohren
        "sind durchschnittlichen Wuchses und von normaler Form",
        "sind normal und voellig unauffaellig",
        "sind etwas groesser als normal, aber im normalen Rahmen",
        "sind etwas kleiner als gewoehnlich, aber im normalen Rahmen"
        ]

    chin = [  # Ein () Kinn schliesst den Kopf zum Oberkoerper ab
        "vergleichsweise breites",
        "schmales",
        "eher langes",
        "ausdrucksstarkes",
        "markantes",
        "spitzes",
        "formschoenes"
        ]

    cheeks = [  # Die Wangen ()
        "wirken etwas eingefallen",
        "sind wohlgeformt",
        "sind unterschiedlich, eine Seite ist normal, die andere ziert eine Fingerlange Narbe (RandomReason)",
        "sind an sich unauffaellig",
        "sind ausgespraegt"
        ]

    face_form = [  # Der Blickaus dem ()
        "huebschen, eher runden, froehlichen",  # line 90
        "schoenen, aber eher blassen herzfoermigigen",
        "attraktiven vergleichsweise ovalen",
        "unauffaelligen",
        "huebschen laenglichen, schmal wirkenden",
        "gemuetlichen rundlichen",
        "markanten wettergegerbten",
        "herzfoermigen sonnen-gebraeunten"
        "eher runden, froehlichen",
        "blassen herzfoermigigen",
        "vergleichsweise ovalen",
        "soweit unauffaelligen",
        "laenglichen, schmal wirkenden",
        "rundlichen",
        "symetrischen, kantigen",
        "charismatischen, herzfoermigen sonnen-gebraeunten"
        ]

    face_look = [  # Der Blick aus dem xx Gesicht ()
        "wirkt ausdrucksstark",
        "wirkt scharfsinnig",
        "wirkt klug",
        "erweckt einen einfaeltig eindruck",
        "scheint gutglaeubig",
        "mutet misstrauisch an",
        "erweckt einen Aufmerksamen Eindruck",
        "wirkt bescheaftigt",
        "macht einen Abwesenden Eindruck",
        "sieht wachsam aus",
        "erscheint muede",
        "kommt dem Betrachter eilig bzw etwas gehetzt vor",
        "scheint entspannt"
        ]
    head_form = [  # Der Kopf ist ()
        "eher schmal",
        "schmal",
        "eher gross",
        "ist gesenkt",
        "aufrecht erhoben"
        ]
    face_hair = [
        "Schulterlange Haare, die zu einem Zopf gebunden sind bedecken den Kopf",
        "Das Haupt wird von schulterlangen Haaren gekroent, die lose auf die Schultern fallen ",
        "Die Haare sind schulterlang und zu einem Zopf geflochten",
        "Aufwaendig geflochtene Haare fallen bis zur Mitte des Rueckens",
        "Die Haare sind schulterlang und werden von einem Haarband zusammen gehalten",
        "Schulterlange Haare, die mit drei bunten Baendern zu einem Zopf zusammen gebunden sind bedecken den Kopf",
        "Die Haare sind mit 2 hoelzernen Haarnadeln auf dem Haupt hochgesteckt",
        "Kurz geschorene Haare bedecken de Kopf. Die Stopeln verraten, das es vor kurzem geschoren wurde"
        ]

    face_hair_color = [
        "brauner ",
        "hasselnussbrauner",
        "dunkelblond",
        "strohblonder ",
        "matt schwarzer ",
        "gaenzend schwarzer",
        "seidiger haselnusfarbener ",
        "braun-schwarzer ",
        "ebenholzfarben- schwarzer ",
        "dunkelbraun ",
        "hellem blond ",
        "hellblond mit einem Stich ins roetliche ",
        "heller roter ",
        "dunklem roter "
        ]

    random_facelook = random.choice(face_look)
    random_face_form = random.choice(face_form)
    random_head_form = random.choice(head_form)
    random_cheeks = random.choice(cheeks)
    random_chin = random.choice(chin)
    random_ears = random.choice(ears)
    random_eyes = random.choice(eyes)
    random_lips = random.choice(lips)
    random_nose = random.choice(nose)
    random_eyes_color = random.choice(eyes_color)
    random_face_hair = random.choice(face_hair)
    random_face_hair_color = random.choice(face_hair_color)

    print "\33[32m'generate random NPC- face..."

    print """\n"\
    '\033[95m'Der Blick aus dem %s Gesicht \n\
    %s. Die %s Augen\n\
    sind %s.\n\
    %s\
    Sie sind von %s Farbe\n\
    Die Nase %s.\n\
    Die Lippen %s.\n\
    Die Wangen %s.\n\
    Der Kopf ist %s.\n\
    Ein %s Kinn schliesst den Kopf zum Oberkoerper ab.\n\
    Die Ohren %s."""\
    %(
    random_face_form,\
    random_facelook,\
    random_eyes_color,\
    random_eyes,\
    random_face_hair,\
    random_face_hair_color,\
    random_nose,\
    random_lips,\
    random_cheeks,\
    random_head_form,\
    random_chin,\
    random_ears\
    )
    print "\n"
    common_signs = [
        "Am Handruecken ist deutlich eine eingebrannte Hand zu sehen. Die Finger, der ganze Abdruck eben",
        "Am Hals befindet sic eine Narbe, die aufgrund von Form und Verlauf nur eine Ritualnarbe sein kann\n (5eckiger Stern mit einem Symboldes Tar-Baphon",
        "Auf dem Handruecken befindet sich eine arkane Taetovierung, die in etwa einem Zauber des Grades 0 entspricht",
        "Die Nase ist offenkundig mehrfach gebrochen, mehrere Narben verlaufen ueber das Gesicht (ehem.Stadtwache/Dorfbuettel)"
        "Es befinden sich deutlich sichtbare Hoecker auf dem Ruecken (entfernte Ueberbleibsel eines daemonischen Erbes (waren nie Flugfaehig)"
        ]
    exact_sign = random.choice(common_signs)
    case = random.randint(1,10)
    check_if = case
    if check_if == 10:
        print "Aber da ist noch etwas, dass ins Auge sticht: %s" % (exact_sign)
    elif check_if < 10:
        print "Ansonsten ist nichts besonders zu sehen."


facegen()
Benutzeravatar
MagBen
User
Beiträge: 756
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Freitag 9. Februar 2018, 09:44

Wenn du als Output nicht einfach nur Text haben willst, sondern ein 3D-Modell von einem Menschen, dann schau dir mal das an
http://www.makehuman.org
Bild

Es hat eine GUI, kann aber auch komplett über die API von Python aus gesteuert werden.
a fool with a tool is still a fool, www.magben.de, YouTube
1of7470000000
User
Beiträge: 10
Registriert: Donnerstag 8. Februar 2018, 22:04

Freitag 9. Februar 2018, 21:31

Vielen Dank!

Ich.. habe noch nie etwas mit Python und einer API gemacht. Aber jetzt habe ich eine Motivation dafür (Einlesen und das lernen). Bestimmt kann man das dann auch in anderm Zusammenhang gebrauchen. Das hat sich bis jetzt wirklich gelohnt, sich bemerkbar zu machen.
(Ich weiß noch gar nicht ob wir es direkt zum DnD zocken brauchen, aber die Idee ist inspirierend).

Danke für dein Feedback.
nezzcarth
User
Beiträge: 477
Registriert: Samstag 16. April 2011, 12:47

Freitag 9. Februar 2018, 22:44

Wenn du auf dem aufbauen möchtest, was du hast, wäre ein Vorschlag, dich strukturell stärker an einem "üblichen" Python Programm zu orientieren. Du vermischst sehr stark die Programmlogik und die Daten, die du ausgeben möchtest. Stattdessen bietet es sich an, den kompletten Inhalt aus dem Programm in eine externe Datei (zum Beispiel im JSON-Format) zu verschieben. Was dann übrig bleibt, ist eine generisch verwendbare Programmlogik, die Daten aus deiner Datei einliest, die gewünschte, zufällige Zusammenstellung erzeugt und ausgibt. In deinen bisherigen Beispielen hast du den Code einfach "untereinander weg" geschrieben. Python Skripte sollten nach Möglichkeit einer bestimmten Struktur folgen (http://python.net/~goodger/projects/pyc ... -structure ; die letzte Zeile ist m.M.n. unnötig, außer, man möchte explizit einen besonderen Status verwenden), bei der es eine main-Funktion gibt und große Teile der Programmlogik in wiederverwendbare, logisch sinnvolle Funktionen (oder Klassen) ausgelagert werden.

Falls du die Funktion noch erweitern möchtest: Gängige Funktionen von NPC-Generatoren sind zum Beispiel noch Namen (Regions-abhängig), Größe, Geschlecht, Haarfarbe, Alter/Geburtsdatum, etc.. Das ist nicht schwierig umzusetzen.
Antworten