#define NSWAPS 100 type card suit : 2 as ubyte face : 4 as ubyte 'the remaining 2 bits are unused end type dim shared as string*8 Suits(0 to 3) = {"Spades", "Clubs", "Hearts", "Diamonds"} dim shared as string*8 Faces(0 to 12) = {"Ace", "Two", "Three", "Four", "Five",_ "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"} sub newdeck( deck() as card ) 'produces an unshuffled deck of 52 cards redim preserve deck(0 to 51) as card for s as ubyte = 0 to 3 for f as ubyte = 0 to 12 deck(13*s + f).suit = s deck(13*s + f).face = f next f next s end sub function deal( deck() as card ) as card 'deals one card from the top of the deck, returning that 'card and removing it from the deck dim as card dealt = deck(ubound(deck)) redim preserve deck(0 to ubound(deck) - 1) return dealt end function function card_name( c as card ) as string 'returns the name of a single given card return Faces(c.face) + " of " + Suits(c.suit) end function sub print_deck( deck() as card ) 'displays the contents of the deck, 'with the top card (next to be dealt) first for i as byte = ubound(deck) to 0 step -1 print card_name( deck(i) ) next i end sub sub shuffle_deck( deck() as card ) dim as integer n = ubound(deck)+1 for i as integer = 1 to NSWAPS swap deck( int(rnd*n) ), deck( int(rnd*n) ) next i end sub redim as card deck(0 to 0) 'allocate a new deck newdeck(deck()) 'set up the new deck print "Dealing a card: ", card_name( deal( deck() ) ) for j as integer = 1 to 41 'deal another 41 cards and discard them deal(deck()) next j shuffle_deck(deck()) 'shuffle the remaining cards print_deck(deck()) 'display the last ten cards