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
;}
nom_type.ini
Code : Tout sélectionner
[general]
nbre = 2
1 =classique
2 =medieval
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
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
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
