' ' *** TYPE_EX.BAS -- TYPE statement programming example ' TYPE Card Value AS INTEGER Suit AS STRING*9 END TYPE DEFINT A-Z ' Define the Deck as a 52-element array of Cards. DIM Deck(1 TO 52) AS Card ' Build, shuffle, and deal the top five cards. CALL BuildDeck(Deck()) CALL Shuffle(Deck()) FOR I%=1 TO 5 CALL ShowCard(Deck(I%)) NEXT I% ' Build the deck--fill the array of Cards with ' appropriate values. SUB BuildDeck(Deck(1) AS Card) STATIC DIM Suits(4) AS STRING*9 Suits(1)="Hearts" Suits(2)="Clubs" Suits(3)="Diamonds" Suits(4)="Spades" ' This loop controls the suit. FOR I%=1 TO 4 ' This loop controls the face value. FOR J%=1 TO 13 ' Figure out which card (1...52) you're creating. CardNum%=J%+(I%-1)*13 ' Place the face value and suit into the Card. Deck(CardNum%).Value=J% Deck(CardNum%).Suit=Suits(I%) NEXT J% NEXT I% END SUB ' Shuffle a deck (an array containing Card elements). SUB Shuffle(Deck(1) AS Card) STATIC RANDOMIZE TIMER ' Shuffle by transposing 1000 randomly selected pairs of cards. FOR I%=1 TO 1000 CardOne%=INT(52*RND+1) CardTwo%=INT(52*RND+1) ' Notice that SWAP works on arrays of user types. SWAP Deck(CardOne%),Deck(CardTwo%) NEXT I% END SUB ' Display a single card by converting and printing the ' face value and the suit. SUB ShowCard (SingleCard AS Card) STATIC SELECT CASE SingleCard.Value CASE 13 PRINT "King "; CASE 12 PRINT "Queen"; CASE 11 PRINT "Jack "; CASE 1 PRINT "Ace "; CASE ELSE PRINT USING " ## ";SingleCard.Value; END SELECT PRINT " ";SingleCard.Suit END SUB