51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
package main
|
||
|
||
// PlayerState — состояние одного игрока в партии.
|
||
type PlayerState struct {
|
||
Name string
|
||
Hand []Card
|
||
IsHuman bool
|
||
Balance int // текущий капитал игрока (в условных фишках/деньгах)
|
||
}
|
||
|
||
// HandValue — суммарная очковая стоимость карт на руке игрока.
|
||
func (p *PlayerState) HandValue() int {
|
||
return HandValue(p.Hand)
|
||
}
|
||
|
||
// HasCard проверяет наличие конкретной карты на руке.
|
||
func (p *PlayerState) HasCard(c Card) bool {
|
||
for _, card := range p.Hand {
|
||
if card == c {
|
||
return true
|
||
}
|
||
}
|
||
return false
|
||
}
|
||
|
||
// RemoveCard удаляет карту из руки, если она там есть. Возвращает
|
||
// false, если карты не было (вызывающий код должен считать это
|
||
// программной ошибкой, а не игровой ситуацией).
|
||
func (p *PlayerState) RemoveCard(c Card) bool {
|
||
for i, card := range p.Hand {
|
||
if card == c {
|
||
p.Hand = append(p.Hand[:i], p.Hand[i+1:]...)
|
||
return true
|
||
}
|
||
}
|
||
return false
|
||
}
|
||
|
||
// RemoveCards удаляет несколько карт разом. Если хотя бы одной не
|
||
// было на руке — не удаляет ничего и возвращает false.
|
||
func (p *PlayerState) RemoveCards(cards []Card) bool {
|
||
for _, c := range cards {
|
||
if !p.HasCard(c) {
|
||
return false
|
||
}
|
||
}
|
||
for _, c := range cards {
|
||
p.RemoveCard(c)
|
||
}
|
||
return true
|
||
}
|