package model import "math/rand" type Deck struct { cards []*Card } func NewDeck() *Deck { deck := &Deck{ cards: []*Card{}, } return deck } func (deck *Deck) Cards() []*Card { return deck.cards } func (deck *Deck) Clear() *Deck { deck.cards = []*Card{} return deck; } func (deck *Deck) Length() int { return len(deck.cards) } func (deck *Deck) Add(card *Card) *Deck { deck.cards = append(deck.cards, card) return deck } func (deck *Deck) Shuffle() *Deck { for i := range deck.cards { j := i + rand.Intn(len(deck.cards) - i) deck.cards[i], deck.cards[j] = deck.cards[j], deck.cards[i] } return deck } func (deck *Deck) Draw() *Card { if len(deck.cards) == 0 { return nil } card := deck.cards[0] deck.cards = deck.cards[1:] return card } func (deck *Deck) Contains(color string, num int) bool { for _, card := range deck.cards { if card.Color == color { for _, value := range card.Value { if value == num { return true } } } } return false }