我有这段代码可以生成一副牌,还有一个函数可以随机选择 52 张牌中的一张。我现在需要一种方法来打出牌组中五张独特的牌,但我不知道该怎么做。
答案 0 :(得分:2)
正如我在评论中指出的,创建这手牌的一种方法是洗牌,然后从顶部取 5 张牌。
type Suit = Diamonds | Hearts | Clubs | Spades
type Face =
| Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten
| Jack | Queen | King | Ace
type Card = { Face: Face; Suit : Suit }
let allFaces = [
Two; Three; Four; Five; Six; Seven; Eight; Nine; Ten;
Jack; Queen; King; Ace
]
let allSuits = [ Diamonds; Hearts; Clubs; Spades ]
let fullDeck = [
for suit in allSuits do
for face in allFaces do
yield { Face = face; Suit = suit }
]
// returns a random card and the remaining deck
let GetCard (deck: Card list) =
let rand = new System.Random()
let idx = rand.Next(deck.Length)
let card = deck.[idx]
(card, List.except [card] deck)
// shuffle a deck
let rec shuffle = function
| card :: [] -> [card]
| deck -> let (card, rest) = GetCard deck
card :: shuffle rest
let hand deck = deck |> shuffle |> List.take 5
fullDeck |> hand |> printfn "%A"