I have had a curiosity about Smalltalk for many years so I recently downloaded and installed Squeak. That's when the trouble began. I have written applications that deal bridge hands and either display the hands on screen or save them in a couple of different formats. I originally wrote the 'words' in Forth. I later tried Ruby and rewrote most of the programs in Ruby. I did it as a learning experience. I sat out to do the same thing in Squeak, again as a learning experience, but have made virtually no progress. I create the class 'Bridge' with the subclass of dealer. I try to initialize by filling a byteArray with 52 numbers, 0 through 51. I tended to create additional methods to shuffle and deal the cards to four more byte arrays named north, east, south, and west. Eventually I will need another method to "stack the deck." I will also need a counter to keep track of the deal number.
 
I can't get started, and I mean zero progress, because I can't create and load deck. It seems like the documentation is never quit up to date. I read about curly braces and tried deck := {0. 1. 2. ... }. When I try to accept it, first deck is questioned and then after deck I get something about not expecting anything else.
I know there is a word 'asByteArray:' and I assume a number would specify the size of the array but nowhere can I find anything about the order in which the information should be provided. I tried deck asByteArray: 52 but I don't know if it worked. If it did work, how do I load the bytes into it? How do I look at a byte in a particular location in the array? Can I remove a byte from position x and/or insert a byte at position y and everything moves to accommodate the change.
 
In Forth and Ruby, I was able to store the hands as a 2D bit array, 4 suits and 13 bits. If the card was present the bit was set. When I dealt the cards, the appropriate bits were set.. This worked really well. The suits came out already sorted. The strength of a suit turned out to be related to the value stored for the suit. The number of cards in the suit could be found by counting set bits. I have yet to find bit-manipulating words in Squeak/Smalltalk.
 
As an aside, the least number of bits that must be used to store a complete deal is 104 or 13 bytes. The bits are arranged in 52 2-bit groups. The position in the array represents the value of the card and the bits determine which hands gets the card represented by that position. When you shuffle the 2-bit groups must be kept in tact. I could easily do this in Forth but could not do it in Ruby. If you are going to save a few million hands, it is nice to be able to do so in this most compact form.
 
If I could just figure out where to find the answers to these beginner question, I would really appreciate it. It would also be nice if I could see some examples of these methods.
 
Charlie
 
 




It's only a deal if it's where you want to go. Find your travel deal here.