package main import ( "math/rand" "strings" "time" ) func init() { rand.Seed(time.Now().UnixNano()) } var kparts = [][]string{ {`br`, `cr`, `dr`, `fr`, `gr`, `j`, `kr`, `l`, `m`, `n`, `pr`, ``, ``, ``, `r`, `sh`, `tr`, `v`, `wh`, `x`, `y`, `z`}, {`a`, `a`, `e`, `e`, `i`, `i`, `o`, `o`, `u`, `u`, `ae`, `ie`, `oo`, `ou`}, {`b`, `ck`, `d`, `g`, `k`, `m`, `n`, `p`, `t`, `v`, `x`, `z`}, } func Pick(s []string) string { return s[rand.Intn(len(s))] } func GenerateName() string { var s string for i := 0; i < 6; i++ { s += Pick(kparts[i%3]) } return strings.Title(s) } func Roll() int { return 3 + rand.Intn(6) + rand.Intn(6) + rand.Intn(6) } type Guy struct { Name, Race, Klass string Level int Attr map[Attr]int } func NewGuy() *Guy { r := Races.Pick() k := Klasses.Pick() g := Guy{ Name: GenerateName(), Race: r.Name, Klass: k.Name, Level: 1, Attr: make(map[Attr]int), } for i := Attr(0); i < Nattr; i++ { g.Attr[i] = Roll() } for _, v := range r.Attr { g.Attr[v] += 1 } for _, v := range k.Attr { g.Attr[v] += 1 } return &g }