-- 18-04-2002 A V Peterson class DECK -- Deck of playing cards creation make feature {NONE} rand : STD_RAND -- random number generator for shuffling seed : INTEGER -- seed for random number generator the_cards : ARRAY[CARD] cards_left : INTEGER -- number of cards in deck not yet dealt feature {ANY} last_card : CARD -- most recently dealt card make is -- Create a deck of card in order ace of clubs to king of spades local s : INTEGER r : INTEGER c : CARD do -- random number generator for shuffling cards io.put_string("Seed for random number generator : ") io.read_integer; io.newline seed := io.last_integer !!rand.with_seed(seed) -- create deck !!the_cards.make(1, 0) -- empty deck -- add cards to deck from s := 1 -- club until s > 4 -- spade loop from r := 1 -- ace until r > 13 -- king loop !!c.make(s, r) the_cards.add_last(c) r := r + 1 end -- loop r s := s + 1 end -- loop s cards_left := the_cards.count end -- make shuffle is -- shuffle deck by selecting cards randomly local i, k : INTEGER do from i := the_cards.upper until i = the_cards.lower loop -- put randomly selected card in ith position rand.next k := rand.last_integer(i) the_cards.swap(i, k) i := i - 1 end -- loop cards_left := the_cards.count end -- shuffle deal_card is -- Deal a card do -- if all cards have been used up then reshuffle entire deck if cards_left = 0 then shuffle end -- deal the next card last_card := the_cards.item(cards_left) cards_left := cards_left - 1 end -- deal_card display is -- Display cards remaining in deck showing suit and value local i : INTEGER do from i := the_cards.lower until i > cards_left loop the_cards.item(i).display; io.put_spaces(2) if i\\13 = 0 then io.put_new_line end i := i + 1 end -- loop io.put_new_line end -- display end -- class DECK