47 lines
1.1 KiB
Text
47 lines
1.1 KiB
Text
#MaxCardNum = 51 ;zero-based count of cards in a deck
|
|
Global deckSize
|
|
Global Dim cards(#MaxCardNum) ;card with highest index is at the top of deck
|
|
|
|
Procedure RNG(seed.q = -1)
|
|
Static state.q
|
|
If seed >= 0
|
|
state = seed
|
|
Else
|
|
state = (state * 214013 + 2531011) % (1 << 31)
|
|
ProcedureReturn state >> 16
|
|
EndIf
|
|
EndProcedure
|
|
|
|
Procedure makeDeck(hand)
|
|
Protected i, c
|
|
For i = 0 To #MaxCardNum: cards(i) = i: Next
|
|
|
|
RNG(hand) ;set seed value
|
|
deckSize = #MaxCardNum
|
|
While deckSize
|
|
c = RNG() % (deckSize + 1)
|
|
Swap cards(c), cards(deckSize)
|
|
deckSize - 1
|
|
Wend
|
|
deckSize = #MaxCardNum
|
|
EndProcedure
|
|
|
|
Procedure showDeck(hand)
|
|
Protected i, c
|
|
PrintN("Hand #" + Str(hand))
|
|
makeDeck(hand)
|
|
For i = 0 To #MaxCardNum
|
|
c = cards(#MaxCardNum - i)
|
|
Print(" " + Mid("A23456789TJQK", (c / 4) + 1, 1) + Mid("CDHS",(c % 4) + 1, 1))
|
|
If (i + 1) % 8 = 0 Or i = #MaxCardNum: PrintN(""): EndIf
|
|
Next
|
|
EndProcedure
|
|
|
|
If OpenConsole()
|
|
showDeck(1)
|
|
showDeck(617)
|
|
showDeck(11982)
|
|
|
|
Print(#CRLF$ + #CRLF$ + "Press ENTER to exit"): Input()
|
|
CloseConsole()
|
|
EndIf
|