Browse Source

Basic implementation of class and stats

master
Noëlle Anthony 5 years ago
parent
commit
0a41d46584
2 changed files with 113 additions and 0 deletions
  1. 71
    0
      ddchar.go
  2. 42
    0
      main.go

+ 71
- 0
ddchar.go View File

@@ -0,0 +1,71 @@
package main

import (
"fmt"
"math/rand"
"sort"
"time"
)

type Class struct {
Name string
HitDie int
StatPriority []string
}

type Player struct {
Name string
Class Class
Stats map[string]int
}

func roll(x, y int) []int {
rolls := make([]int, x)
for i := 0; i < x; i++ {
rolls[i] = (rand.Intn(y) + 1)
}
return rolls
}

func sum(ary []int) int {
s := 0
for _, v := range ary {
s += v
}
return s
}

func stats() []int {
rolls := make([]int, 6)
for i := 0; i < 6; i++ {
thisRoll := roll(4, 6)
for k, v := range thisRoll {
// fmt.Println(thisRoll)
for v == 1 {
// fmt.Println("Replacing 1")
newv := roll(1, 6)
thisRoll[k] = newv[0]
v = newv[0]
}
}
sort.Ints(thisRoll)
top3 := make([]int, 3)
copy(top3, thisRoll[1:])
rolls[i] = sum(top3)
}
return rolls
}

func main() {
barb := Class{"Barbarian", 12, []string{"Int", "Wis", "Cha", "Dex", "Con", "Str"}}
rand.Seed(time.Now().UnixNano())
fmt.Println("=== Generated D&D character ===")
rolls := stats()
fmt.Println("Rolls: ", rolls)
sort.Ints(rolls)
ply := Player{"Bob", barb, make(map[string]int)}
for k, v := range barb.StatPriority {
ply.Stats[v] = rolls[k]
}
fmt.Println(ply)
}

+ 42
- 0
main.go View File

@@ -0,0 +1,42 @@
package main

import (
"fmt"
"math/rand"
"sort"
"time"
)

func roll(x, y int) []int {
rolls := make([]int, x)
for i := 0; i < x; i++ {
rolls[i] = (rand.Intn(y) + 1)
}
return rolls
}

func sum(ary []int) int {
s := 0
for _, v := range ary {
s += v
}
return s
}

func stats() []int {
rolls := make([]int, 6)
for i := 0; i < 6; i++ {
thisRoll := roll(4, 6)
sort.Ints(thisRoll)
top3 := make([]int, 3)
copy(top3, thisRoll[1:])
rolls[i] = sum(top3)
}
return rolls
}

func main() {
rand.Seed(time.Now().UnixNano())
fmt.Println("=== Generated D&D character ===")
fmt.Println("Rolls: ", stats())
}

Loading…
Cancel
Save