DIM Deck{ncards%, card&(51)}, Suit$(3), Rank$(12) Suit$() = "Clubs", "Diamonds", "Hearts", "Spades" Rank$() = "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", \ \ "Eight", "Nine", "Ten", "Jack", "Queen", "King" PRINT "Creating a new deck..." PROCnewdeck(deck1{}) PRINT "Shuffling the deck..." PROCshuffle(deck1{}) PRINT "The first few cards are:" FOR card% = 1 TO 8 PRINT FNcardname(deck1.card&(card%)) NEXT PRINT "Dealing three cards from the deck:" FOR card% = 1 TO 3 PRINT FNcardname(FNdeal(deck1{})) NEXT PRINT "Number of cards remaining in the deck = " ; deck1.ncards% END REM Make a new deck: DEF PROCnewdeck(RETURN deck{}) LOCAL N% DIM deck{} = Deck{} FOR N% = 0 TO 51 deck.card&(N%) = N% deck.ncards% += 1 NEXT ENDPROC REM Shuffle a deck: DEF PROCshuffle(deck{}) LOCAL N% FOR N% = 52 TO 2 STEP -1 SWAP deck.card&(N%-1), deck.card&(RND(N%)-1) NEXT ENDPROC REM Deal from the 'bottom' of the deck: DEF FNdeal(deck{}) IF deck.ncards% = 0 THEN ERROR 100, "Deck is empty" deck.ncards% -= 1 = deck.card&(deck.ncards%) REM Return the name of a card: DEF FNcardname(card&) = Rank$(card& >> 2) + " of " + Suit$(card& AND 3)