Miscellaneous questions...
stéphane ducasse
ducasse at iam.unibe.ch
Fri Sep 9 17:39:15 UTC 2005
why don't you publish it on squeaksource and squeakmap.
I looked at the code and it sounds good.
>
> !TPHand class methodsFor: 'instance creation' stamp: 'RJL 7/3/2005
> 14:09'!
> newGame: aGame
> ^self basicNew
> initialize;
> game: aGame;
> yourself.! !
>
I would write
>
> !TPHand class methodsFor: 'instance creation' stamp: 'RJL 7/3/2005
> 14:09'!
> newGame: aGame
> ^self new
> game: aGame;
> yourself.! !
stef
On 9 sept. 05, at 19:28, Ramon Leon wrote:
>> Just a few things to throw out here:
>>
>> -> Still wondering about the Squeakland image; the download
>> is less than
>> 1MB, so obviously it's not in there (right?).
>>
>> -> When you're developing classes and testing stuff out, do
>> you expose
>> -> all
>> the instance variables? And then later, remove the accessors
>> you don't want the user to have? I notice that to test/debug
>> it's often easiest to have access to everything from the
>> Workspace, but really don't want that to be exposed to
>> clients of the class.
>>
>> -> If you were creating a deck (of cards) class and a card
>> class, would
>> you put the card's rank and suit in as strings or as symbols,
>> keeping in mind that you were later going to reveal the class
>> to students for educational purposes? I know I want the deck
>> to be card neutral, i.e., to be usable for a deck of any sort
>> of cards, but the cards themselves (for standard decks), for
>> convenience, are described as being (rank) "King" and
>> (suit) "Hearts". But perhaps that should be #king and
>> #hearts. (I tend to worry about making global symbols: seems
>> like courting trouble.)
>>
>> Nothing real urgent, just stuff that has occurred to me.
>>
>
> Funny you should mention this, as one of my first sample programs to
> write to familiarize myself with Smalltalk, I did exactly that, was
> writing a poker game to see if I could, see how'd I'd do it all OO and
> Smalltalk style, so I'll share my Hand, Deck, and Card classes, but
> I'm
> new at Smalltalk, so I hope the code isn't too bad, but I
> appreciate any
> comments on proper Smalltalk style.
>
> Object subclass: #TPCard
> instanceVariableNames: 'num suit'
> classVariableNames: ''
> poolDictionaries: ''
> category: 'SentorsaTexasPoker'!
> !TPCard commentStamp: '<historical>' prior: 0!
> I am a card, I can be any card of any suit.!
>
>
> !TPCard methodsFor: 'accessing' stamp: 'RJL 7/3/2005 10:14'!
> asString
> ^num asString, ' of ', suit! !
>
> !TPCard methodsFor: 'accessing' stamp: 'RJL 7/3/2005 10:11'!
> num
> ^num! !
>
> !TPCard methodsFor: 'accessing' stamp: 'RJL 7/3/2005 10:53'!
> num: aString
> num := aString! !
>
> !TPCard methodsFor: 'accessing' stamp: 'RJL 7/3/2005 10:11'!
> suit
> ^suit! !
>
> !TPCard methodsFor: 'accessing' stamp: 'RJL 7/3/2005 10:54'!
> suit: aString
> suit := aString! !
>
> "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
>
> TPCard class
> instanceVariableNames: ''!
>
> !TPCard class methodsFor: 'instance creation' stamp: 'RJL 7/3/2005
> 10:10'!
> newNum: aNum suit: aSymbol
> ^self basicNew
> initialize;
> num: aNum;
> suit: aSymbol;
> yourself.! !
>
> Object subclass: #TPDeck
> instanceVariableNames: 'random deck'
> classVariableNames: ''
> poolDictionaries: ''
> category: 'SentorsaTexasPoker'!
> !TPDeck commentStamp: '<historical>' prior: 0!
> I am a deck of cards, I can deal cards to a hand and shuffle the deck
> randomly!
>
>
> !TPDeck methodsFor: 'private' stamp: 'RJL 7/30/2005 10:18'!
> cardNumbers
> "All possible card numbers."
> ^#(#One #Two #Three #Four #Five #Six #Seven #Eight #Nine #Ten
> #Jack #Queen #King)! !
>
> !TPDeck methodsFor: 'private' stamp: 'RJL 7/30/2005 10:19'!
> cardSuits
> "All possible card suits."
> ^#(#Clubs #Hearts #Spades #Diamonds)! !
>
>
> !TPDeck methodsFor: 'accessing' stamp: 'RJL 7/30/2005 10:19'!
> dealCard
> "Pull a random card out of the deck."
> ^deck removeAt: (random nextInt: deck size).
> ! !
>
> !TPDeck methodsFor: 'accessing' stamp: 'RJL 7/30/2005 10:20'!
> dealToHand: aHand cards: aNum
> "Deal a given number of cards to a hand."
> aNum timesRepeat: [aHand addCard: self dealCard].
> aHand rank.
> ! !
>
> !TPDeck methodsFor: 'accessing' stamp: 'RJL 7/30/2005 10:21'!
> shuffle
> "Create a new deck, generate all cards for it, dealCard deals
> random cards from this
> deck, so shuffle really only needs to build the deck, not
> actually shuffle them"
> deck := OrderedCollection new.
> self cardNumbers
> inject: self cardSuits into: [:suits :card |
> suits do: [:suit | deck add: (TPCard newNum:
> card suit: suit)]].! !
>
>
> !TPDeck methodsFor: 'initialize-release' stamp: 'RJL 8/1/2005 12:00'!
> initialize
> super initialize.
> random := Random new.
> self shuffle.
> ! !
>
> Object subclass: #TPHand
> instanceVariableNames: 'name cards game rank'
> classVariableNames: ''
> poolDictionaries: ''
> category: 'SentorsaTexasPoker'!
> !TPHand commentStamp: '<historical>' prior: 0!
> I am a hand, a collection of cards with a rank. I use a game to
> compare
> myself to other hands and decide if I outrank him.!
>
>
> !TPHand methodsFor: 'accessing' stamp: 'RJL 7/3/2005 10:54'!
> addCard: aCard
> cards add: aCard.! !
>
> !TPHand methodsFor: 'accessing' stamp: 'RJL 7/4/2005 00:07'!
> asString
> ^ name, ':', String cr, String tab, (cards join: String cr,
> String tab)! !
>
> !TPHand methodsFor: 'accessing' stamp: 'RJL 7/3/2005 22:01'!
> cards
> ^cards! !
>
> !TPHand methodsFor: 'accessing' stamp: 'RJL 7/3/2005 14:13'!
> game: aGame
> game := aGame! !
>
> !TPHand methodsFor: 'accessing' stamp: 'RJL 7/4/2005 01:14'!
> name: aString rank: aNum
> name := aString.
> rank := aNum.! !
>
>
> !TPHand methodsFor: 'initialize-release' stamp: 'RJL 8/1/2005 12:00'!
> initialize
> super initialize.
> cards := OrderedCollection new.! !
>
>
> !TPHand methodsFor: 'scoring' stamp: 'RJL 7/3/2005 22:01'!
> rank
> game rankHand: self.! !
>
>
> !TPHand methodsFor: 'comparing' stamp: 'RJL 7/3/2005 14:06'!
> < aHand
> ^ game hand: aHand beats: self! !
>
> !TPHand methodsFor: 'comparing' stamp: 'RJL 7/3/2005 14:12'!
> = aHand
> ^(self > aHand) not and: [(aHand > self) not] ! !
>
> !TPHand methodsFor: 'comparing' stamp: 'RJL 7/3/2005 14:05'!
>
>> aHand
>>
> ^ game hand: self beats: aHand! !
>
> "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
>
> TPHand class
> instanceVariableNames: ''!
>
> !TPHand class methodsFor: 'instance creation' stamp: 'RJL 7/3/2005
> 14:09'!
> newGame: aGame
> ^self basicNew
> initialize;
> game: aGame;
> yourself.! !
>
>
>
More information about the Squeak-dev
mailing list
|