我一直致力于使用F#对流行的纸牌游戏(情书)进行建模,以了解有关函数式编程的更多信息.
module Game =
open Cards
open Players
type Deck = Card list
let dealACard (deck:Deck) =
let randomGenerator = System.Random()
let index = randomGenerator.Next deck.Length
let card = deck.Item index
(card, (deck |> List.filter((<>) card)))
let createPlayer playerNumber deck =
let card, newDeck = dealACard deck
({cards=[card]; playerNumber=playerNumber}, newDeck)
Run Code Online (Sandbox Code Playgroud)
我一直做得很好,直到我知道如何模拟如何绘制卡片.为了测试这个,我想从牌组中抽出所有牌.我的程序看起来像这样:
let deck = createDeck
while not deck.IsEmpty do
let card, newDeck = dealACard deck
// print the card
// how do I update the deck?
Run Code Online (Sandbox Code Playgroud)
任何帮助或反馈都会很棒.
我正在建模如何从牌组中绘制一张扑克牌,我想出了以下解决方案:
type Card = { Value:int }
type Deck = Card list
type Player = { Hand : Card list }
type CardDrawer(deck) =
let mutable deck = deck
member this.drawCard () =
match deck with
| h::t ->
deck <- t
h
member this.getDeck () = deck
//Example Usage
let createPlayers deck numPlayers =
let cardDrawer = new CardDrawer(deck)
let drawCard = cardDrawer.drawCard
let createPlayer drawCard =
let hand = [drawCard(); drawCard()]
{Hand=hand}
([1 .. numPlayers] |> List.map(fun _ …Run Code Online (Sandbox Code Playgroud)