-------------------------------1163714257
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit
I am new to Ruby and OOP although I have written programs in Forth; another
world. As a learning project, I decided to duplicate something I had written
in Forth; namely a bridge hand dealer. I originally stored the hands in a
3-dimensional binary array (hand, suit, cards). In cards, a set bit represented
a particular card. I like the binary representation because it makes things
like searching for pairs or sequences, etc. easy with bit logic.
Here is what I have written so far:
class Carddeck
attr_writer :deck
def initialize
@deck ¨Âáù®îå÷
end
def build_deck
0.upto(51) {|i| @deck.push(i.divmod(13))}
# deck consists of 52 2-member arrays, [suit, rank],
# each representing a playing card. In use, the first
# 13 members is hand[0] and the next 13 are hand[1], etc.
# hand will be defined in a subclass.
return @deck
end
def shuffle_deck
@deck
eck.sort_by{rand}
end
end
class Bridgehands < Carddeck
attr_writer :hands
attr_reader :deck
def initialize
super
@hands rray.new(4) {|idx| Array.new(4)}
# hands is a 4 by 4 array for player,suit
end
def build_hands
self.shuffle_deck
0.upto(51) {|i| @hands[i/13][@deck[i][0]] + b1 << @deck[i][1]}
# The left side addresses a particular cell in hands.
# The right side converts the card rank to a bit shifted
# to the position represented by the rank of the card.
# We cycle through the entire deck and let i/13 the hand.
return @hands
end
end
Carddeck works just fine but Bridgehands returns an error when I enter:
bh ridgehands.new followed by bh.build_deck and then bh.build_hands. to
which it responds:
NoMethodError: undefined method `+' for nil:NilClass
from (irb):92:in `build_hands'
from (irb):92:in `build_hands'
from (irb):103
from :0
I'm going nuts.
Charles Gray -- Phoenix, AZ ... skype and google-talk user name: tcykgreis
-------------------------------1163714257--