For anyone who's interested, here's an implementation with the cards represented as integers (or wrapping integers). Perhaps this could be the basis of a super-compact representation. In any case, sorting hands becomes simpler, but either dealing (creating a card object) or checking that a play is legal becomes more involved (because at some point you would have to reconstruct the symbolic information regarding suit and rank).
Alternatively, if you want to make the deck bridge-specific you could change the undealt variable into an Array or OrderedCollection, and after shuffling treat each of the quarters as belonging to a specific hand. Again, more compact, less simplicity. Taking something out of the hand could be represented by replacing that card's integer with 0 in the deck/hand array.
Another alternative would be to use an "ordinary" representation for shuffling etc. then write that into a bit-packed representation with each two bits representing a player, as the original questioner wanted. Some utility classes could go over that to make handling such a thing look like an array of players, and use a formatting method similar to the one used in the attached code.
I don't have time to look at it today, but people interested in the best of both worlds should check out how Character and String works. There's only one instance of Character representing the letter 'a' in the whole system, but there are many letter 'a's. String stores bytes for each character for compactness, but gives you back a Character object when you call at:. It is worth looking at how. The pattern is referenced in Object Design Patterns as 'Flyweight'.
-Todd Blanchard
On Aug 25, 2008, at 4:21 AM, Marcin Tustin wrote:
For anyone who's interested, here's an implementation with the cards represented as integers (or wrapping integers). Perhaps this could be the basis of a super-compact representation. In any case, sorting hands becomes simpler, but either dealing (creating a card object) or checking that a play is legal becomes more involved (because at some point you would have to reconstruct the symbolic information regarding suit and rank).
Alternatively, if you want to make the deck bridge-specific you could change the undealt variable into an Array or OrderedCollection, and after shuffling treat each of the quarters as belonging to a specific hand. Again, more compact, less simplicity. Taking something out of the hand could be represented by replacing that card's integer with 0 in the deck/hand array.
Another alternative would be to use an "ordinary" representation for shuffling etc. then write that into a bit-packed representation with each two bits representing a player, as the original questioner wanted. Some utility classes could go over that to make handling such a thing look like an array of players, and use a formatting method similar to the one used in the attached code.
<PlayingCards.st>_______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners
On Mon, Aug 25, 2008 at 08:06:35PM +0000, Charles Gray wrote:
Marcin Tustin <mm3 <at> zepler.net> writes:
Attachment (PlayingCards.st): application/octet-stream, 2323 bytes
When I clicked on the attachment, it wasn't found.
Perhaps your mail system removed the attachment.
Attached is a copy of Marcin Tustin's PlayingCards.st in a zip file.
Dave
beginners@lists.squeakfoundation.org