package main import ( "flag" "fmt" "math/rand" "os" "time" ) var ( surfaces, modifier, diceThrows, attacks int advantage, disadvantage bool ) func main() { rand.Seed(time.Now().Unix()) ParseFlags() switch { case advantage: fmt.Println("Advantage") fmt.Println(Advantage(SimpleCast(), SimpleCast())) case disadvantage: fmt.Println("Disadvantage") fmt.Println(Disadvantage(SimpleCast(), SimpleCast())) case attacks < 1: fmt.Println("Attack amount cannot be below 1.") os.Exit(1) case attacks > 1: for i := 0; i < attacks; i++ { fmt.Println() Cast(surfaces, diceThrows, modifier) } default: Cast(surfaces, diceThrows, modifier) } } func ParseFlags() { flag.IntVar(&surfaces, "surfaces", 20, "Specify amount of die surfaces") flag.IntVar(&diceThrows, "throws", 1, "Specify dice diceThrows") flag.IntVar(&modifier, "modifier", 0, "Stat modifier") flag.IntVar(&attacks, "attacks", 1, "Attacks") flag.BoolVar(&advantage, "advantage", false, "Advantage") flag.BoolVar(&disadvantage, "disadvantage", false, "Disadvantage") flag.Parse() } func Cast(dieSurfaces, castAmount, modifier int) { var ( casts []int cast, total int ) for i := 0; i < castAmount; i++ { cast = rand.Intn(dieSurfaces) + 1 casts = append(casts, cast) total += cast } if castAmount > 1 { fmt.Println(casts) } if modifier != 0 { fmt.Println("Without modifier:", total) fmt.Println("With modifier:", total+modifier) } else { fmt.Println(total) } } func SimpleCast() int { return rand.Intn(20) + 1 } func Advantage(x, y int) int { fmt.Println("x:", x) fmt.Println("Y:", y) if x > y { return x } else { return y } } func Disadvantage(x, y int) int { fmt.Println("x:", x) fmt.Println("Y:", y) if x < y { return x } else { return y } }