56 lines
945 B
Go
56 lines
945 B
Go
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
|
|
}
|