You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
878 B
51 lines
878 B
package game |
|
|
|
import ( |
|
"math/rand" |
|
) |
|
|
|
// Dealer 发牌员, 有打乱的一副牌 |
|
type Dealer struct { |
|
// 一副牌 |
|
// cardList *collect.LinkedList[Card] |
|
cards []*Card |
|
index int |
|
} |
|
|
|
func (d *Dealer) Init() *Dealer { |
|
d.index = 0 |
|
d.cards = make([]*Card, 52) |
|
// 初始化一副牌,13张牌 |
|
for i := 0; i < 13; i++ { |
|
// 4 种花色 |
|
for j := 0; j < 4; j++ { |
|
d.cards[i*4+j] = &Card{PokerDot(i), PokerSuit(j)} |
|
} |
|
} |
|
// 洗牌 |
|
disorder(d.cards) |
|
return d |
|
} |
|
|
|
// Deal 发牌堆第一张牌 |
|
func (d *Dealer) Deal() *Card { |
|
card := d.cards[d.index] |
|
d.index++ |
|
return card |
|
} |
|
|
|
// disorder 洗牌 |
|
func disorder(cards []*Card) { |
|
length := len(cards) |
|
// 洗13次 |
|
for i := 0; i < 13; i++ { |
|
for j := 0; j < length; j++ { |
|
repIdx := rand.Intn(length) |
|
cards[i], cards[repIdx] = cards[repIdx], cards[i] |
|
} |
|
} |
|
} |
|
|
|
func NewDealer() *Dealer { |
|
return new(Dealer).Init() |
|
}
|
|
|