Object subclass: #Card instanceVariableNames: 'suit rank ' classVariableNames: '' poolDictionaries: '' category: 'CardGame'! !Card methodsFor: 'printing'! printOn: aStream aStream show: 'Suit = ', suit, ' Rank = ', (rank printStringRadix: 10); cr. aStream flush.! ! !Card methodsFor: 'private'! setSuit: aSymbol rank: anInteger suit := aSymbol. rank := anInteger.! ! !Card methodsFor: 'accessing'! rank ^rank.! suit ^suit.! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! Card class instanceVariableNames: ''! !Card class methodsFor: 'instance creation'! suit: aSymbol rank: anInteger ^self new setSuit: aSymbol rank: anInteger.! ! Object subclass: #CardDeck instanceVariableNames: 'cards ' classVariableNames: 'InitialCardDeck ' poolDictionaries: '' category: 'CardGame'! !CardDeck methodsFor: 'private'! cards: aCollection cards := aCollection.! ! !CardDeck methodsFor: 'testing'! isEmpty ^cards isEmpty.! ! !CardDeck methodsFor: 'accessing'! next ^cards removeFirst.! return: aCard cards addLast: aCard.! shuffle | sample tempDeck | sample := SampleSpaceWithoutReplacement data: cards. tempDeck := OrderedCollection new: cards size. cards size timesRepeat: [ tempDeck addLast: sample next]. self cards: tempDeck.! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! CardDeck class instanceVariableNames: ''! !CardDeck class methodsFor: 'instance creation'! new ^super new cards: InitialCardDeck copy.! ! !CardDeck class methodsFor: 'initialization'! initialize InitialCardDeck := OrderedCollection new: 52. #(heart club spade diamond) do: [:aSuit | 1 to: 13 do: [:n | InitialCardDeck add: (Card suit: aSuit rank: n)]]! ! Object subclass: #Player instanceVariableNames: 'cards ' classVariableNames: '' poolDictionaries: '' category: 'CardGame'! !Player methodsFor: 'private'! setCards cards := OrderedCollection new.! ! !Player methodsFor: 'inquiries'! points ^cards inject: 0 into: [ :value :nextCard | value + nextCard rank].! showHand Transcript show: ' Read em and weep...'. Transcript show: (self points printStringRadix: 10), ' points!!'; cr. cards do: [ :eachCard | eachCard printOn: Transcript ].! showHand: aTextCollector aTextCollector show: ' Read em and weep...'. aTextCollector show: (self points printStringRadix: 10), ' points!!'; cr. cards do: [ :eachCard | eachCard printOn: aTextCollector ].! ! !Player methodsFor: 'accessing'! returnAll: cardDeck cards do: [ :eachCard | cardDeck return: eachCard ]. self setCards.! take: aCard cards add: aCard.! ! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! Player class instanceVariableNames: ''! !Player class methodsFor: 'instance creation'! new ^super new setCards.! ! CardDeck initialize!