package main import ( "math/rand" "time" ) type Deck struct { Cards []Card `json:"cards"` } func NewDeck() *Deck { cards := []Card{NewCard(0)} for i := 0; i < 3; i++ { for j := 1; j < 9; j++ { cards = append(cards, Card(NewCard(j))) } } return &Deck{ Cards: cards, } } func (d *Deck) Shuffle() { cards := d.Cards r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := range cards { j := r.Intn(i + 1) cards[i], cards[j] = cards[j], cards[i] } d.Cards = cards } func (d *Deck) Scry(s int) []Card { seen := []Card{} if len(d.Cards) < s { seen = d.Cards d.Cards = []Card{} return seen } seen = d.Cards[(len(d.Cards) - s):len(d.Cards)] d.Cards = d.Cards[0 : len(d.Cards)-s] return seen } func (d *Deck) Bottom(result []Card) { d.Cards = append(result, d.Cards...) //Should shuffle result first? } func (d *Deck) Size() int { return len(d.Cards) }