package game type Player struct { ID string Name string Hand []Card Booked [][]Card // sets of 4 cards Connected bool } func NewPlayer(id, name string) *Player { return &Player{ ID: id, Name: name, Hand: []Card{}, Booked: [][]Card{}, Connected: true, } } func (p *Player) Draw(card Card) { p.Hand = append(p.Hand, card) } func (p *Player) RemoveCard(rank Rank) []Card { var removed []Card var remaining []Card for _, c := range p.Hand { if c.Rank == rank && len(removed) < 4 { removed = append(removed, c) } else { remaining = append(remaining, c) } } p.Hand = remaining return removed } func (p *Player) HasCard(rank Rank) bool { for _, c := range p.Hand { if c.Rank == rank { return true } } return false } func (p *Player) HasBook(rank Rank) bool { count := 0 for _, c := range p.Hand { if c.Rank == rank { count++ } } return count == 4 }