Page 1 sur 1

[jeu] générateur de nom

Publié : dim. 23/oct./2011 12:22
par blendman
salut

J'ai réalisé un petit générateur de nom de personnage pour notre jeu 3arks.

le code :

Code : Tout sélectionner

;{ Infos
; PB : 4.60
; blendman 21/10/2011
;}

;{ enumeration, constantes
#win = 0

Enumeration 
  #btn1
  #text_final
  #choix_nbre_syllabe
  #choix_typenom
  #cob_nbre_de_pseudo
  #lv_listenom
  #cb_norepeatsyl
  #btn_washlist
EndEnumeration
;}

;{ variable, Structure
Global nbre_syllabe.a, syllabe_1.w, syllabe_2.w, syllabe_3.w, syllabe_4.w,total.w,nbre.a, nbre_de_nom.w=9,norepeat_syl.a

Structure s_mot
  mot$
EndStructure
Global Dim mot.s_mot(total)

Structure s_result
  syl1$
  syl2$
  syl3$
  syl4$
  nomfinal$
EndStructure
Global nom.s_result

Structure s_nomFinal
  nom$
EndStructure
Global NewList liste.s_nomFinal()
;}

;{ {declare
Declare open_filename(file$)
Declare generate()
;}

;{ Window et gadgets
OpenWindow(#win,0,0,500,300,"Generateur de nom",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget)

;{ gadgets
ComboBoxGadget(#choix_nbre_syllabe,50,30,200,20)
AddGadgetItem(#choix_nbre_syllabe,0,"1 syllabe")
AddGadgetItem(#choix_nbre_syllabe,1,"2 syllabes")
AddGadgetItem(#choix_nbre_syllabe,2,"3 syllabes")
AddGadgetItem(#choix_nbre_syllabe,3,"4 syllabes")
AddGadgetItem(#choix_nbre_syllabe,4,"Nombre de syllabe aléatoire")
nbre = 4
SetGadgetState(#choix_nbre_syllabe,3)

ComboBoxGadget(#choix_typenom,50,10,200,20)
OpenPreferences("nom_type.ini")
PreferenceGroup("general")
nbre_type = ReadPreferenceInteger("nbre",1)
For j = 0 To nbre_type-1 
  AddGadgetItem(#choix_typenom,j, ReadPreferenceString(Str(j+1),"Nom_base"))
  lenom$ =ReadPreferenceString(Str(1),"")+".ini"
Next j
ClosePreferences()
open_filename(lenom$)
SetGadgetState(#choix_typenom,0)

SpinGadget(#cob_nbre_de_pseudo,50,50,50,20,1,200,#PB_Spin_Numeric)
SetGadgetState(#cob_nbre_de_pseudo,10)

CheckBoxGadget(#cb_norepeatsyl,110,50,150,20,"Ne pas répéter les syllabes")
ButtonGadget(#btn1,50,70,100,20,"Générer le nom")
ButtonGadget(#btn_washlist,160,70,100,20,"Vider la liste")
ListViewGadget(#lv_listenom,50,110,200,150)
;}
;}

;{ repeat
Repeat
  event=WaitWindowEvent()
  Select event
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #btn1
          generate()
        Case #choix_nbre_syllabe
          nbre = GetGadgetState(#choix_nbre_syllabe)+1
        Case #choix_typenom          
          open_filename(GetGadgetText(#choix_typenom)+".ini")
        Case #cob_nbre_de_pseudo
          nbre_de_nom = GetGadgetState(#cob_nbre_de_pseudo)-1
        Case #cb_norepeatsyl
          norepeat_syl = 1- norepeat_syl
        Case #btn_washlist
          ClearGadgetItems(#lv_listenom)
          
      EndSelect
    Case #PB_Event_CloseWindow
      quit = 1
  EndSelect
Until quit = 1
;}

;{ procedure
Procedure open_filename(file$)
  ReDim mot.s_mot(0)  
  OpenPreferences(file$)
  PreferenceGroup("general")
  nb = ReadPreferenceInteger("nbre",0)
  total =nb
  ReDim mot.s_mot(nb)
  For i = 0 To nb-1
    mot(i)\mot$ = ReadPreferenceString(Str(i),"")
  Next i
  ClosePreferences()
EndProcedure
Procedure generate()
  For i = 0 To nbre_de_nom
    If nbre = 5
      nbre_syllabe.a = Random(3)+1
    Else
      nbre_syllabe.a = nbre
    EndIf
    
    syllabe_1 = Random(total)  
    nom\syl1$ = mot(syllabe_1)\mot$
    If nbre_syllabe >= 2 
      syllabe_2 =  Random(total)
      If norepeat_syl = 1
        While syllabe_2 = syllabe_1
          syllabe_2 =  Random(total)
        Wend
      EndIf
      nom\syl2$ = mot(syllabe_2)\mot$
    EndIf
    If nbre_syllabe >= 3
      syllabe_3 = Random(total)
      If norepeat_syl = 1
        While syllabe_3 = syllabe_1 Or syllabe_3 = syllabe_2
          syllabe_3 = Random(total)
        Wend
      EndIf
      nom\syl3$ = mot(syllabe_3)\mot$
    EndIf
    If nbre_syllabe >= 4
      syllabe_4 = Random(total)
      If norepeat_syl = 1
        While syllabe_4 = syllabe_1  Or syllabe_4 = syllabe_2 Or syllabe_4 = syllabe_3
          syllabe_4 = Random(total)
        Wend 
      EndIf
      nom\syl4$ = mot(syllabe_4)\mot$
    EndIf
    nom\nomfinal$ = nom\syl1$ + nom\syl2$ + nom\syl3$ + nom\syl4$
    AddGadgetItem(#lv_listenom,-1,nom\nomfinal$)
    nom\syl1$ = ""
    nom\syl2$ = ""
    nom\syl3$ = ""
    nom\syl4$ = ""
    nom\nomfinal$ = ""
  Next i
EndProcedure
;}
Et les fichiers ini nécessaires :
nom_type.ini

Code : Tout sélectionner

[general]
nbre = 2
1 =classique
2 =medieval
medieval.ini

Code : Tout sélectionner

[general]
nbre = 66
0 = ga
1 = la 
2 = driel
3 = gand
4 = al
5 = fîn
6 = fern
7 = vor
8 = waar
9 = gor
10 = n'
11 = 'g 
12 = vee
13 = vae
14 = do'
15 = lon
16 = ahé
17 = kwel
18 = vog
19 = grim
20 = old
21 = yel
22 = naan
23 = khâ
24 = ween
25 = el
26 = eeh
27 = gorn
28 = ghaar
29 = fühl
30 = 'k
31 = ydre
32 = ork
33 = ael
34 = hyel
35 = hael
36 = wan
37 = ë
38 = olf
39 = ern
40=orn
41=arn
42=turn
43=myrn
44=jiin
45=keen
46=huul
47=dul
48=gwal
49=kwelt
50=m'or
51=lord'
52=drul
53=kwil
54=kor
55=g'an
56=han
57=zee
58=dea
59=gea
60=laan
61=gwal
62=eel
63=yao
64=iho
65=ka
classique.ini :

Code : Tout sélectionner

[general]
nbre = 39
0 = bru
1 = en
2 = fy
3 = lox
4 = ro
5 = val
6 = zyb
7 = bot
8 = gol
9 = vy
10 = tux
11 = zom
12 = bla
13 = vra
14 = lo
15 = zé
16 = mit
17 = mou
18 = vog
19 = ru
20 = ôh
21 = pi
22 = ba
23 = di
24 = dum
25 = gou
26 = san
27 = ku
28 = kae
29 = hi
30 = ka
31 = fu
32 = hae
33 = hun
34 = ko
35 = vo
36 = mu
37 = nu
38 = pu
Je pense que c'est assez simple à comprendre.
pour ajouter une "bibliothèque", il suffit :
- de créer le fichier ini, avec chaque syllabe que l'on souhaite, précédée d'un chiffre
- nbre : définit le nombre de syllabe qu'on trouve dans le fichier (c'est le nombre max +1 car il y a le 0)

Puis dans le fichier : nom_type.ini
- on ajoute le nom du nouveau fichier ini qu'on vient de créer
- nbre : le nombre de bibliothèques (fichier ini bibliothèque) disponible

Si vous voyez des choses pour améliorer les noms obtenus, n'hésitez pas ;).

Je pense que je vais ajouter un système de position de syllabes, et que certaines syllabes seront disponible en position 1, ou 2 ou 3 ou 4, etc..
voiloutch :)

Re: [jeu] générateur de nom

Publié : dim. 23/oct./2011 15:58
par Ar-S
Excellent :)

Par contre prévoir éventuellement un tableau Masculin / Féminin avec des "le / la"
et différents adjectifs " guerriers/ guerrière, sanguinaire, poilu, barde, chauve, félé/félée etc..." qu'on puisse tomber sur "Rolox le chauve" par exemple :)
Ce serait sympa et il y aurait plus de résultats possibles. :mrgreen: