in reply to (ichimunki) Re (tilly) 1: Dice::Dice
in thread Dice::Dice

Call me dense but I'm not understanding the difference between a 'face' attribute and the array held in the 'Results' attribute.

As for an OppositeFace() method I don't think I'll be chasing that one for a while :)

  • Comment on Re: (ichimunki) Re (tilly) 1: Dice::Dice

Replies are listed 'Best First'.
Re: Re: (ichimunki) Re (tilly) 1: Dice::Dice
by ichimunki (Priest) on Jan 08, 2001 at 20:35 UTC
    Untested, for illustration only.
    sub new { my $Di = { Sides => 6, Face => 1 }; #default six sider, sitting with 1 up bless $Di, "Dice::Di"; } sub Roll { my $self = shift; my $newface = int( rand( $self->{'Sides'} ) + 1); $self->{'Face'} = $newface; return $newface; } sub Rolls { #call with @results = $Di->Rolls( integer ); my $self = shift; my $times = shift; my @faces; for (1..$times) { my $rolled = $self->Roll(); push( @faces, $rolled ); } return @faces; } sub CurrentFace { my $self = shift; return $self->{'Face'}; }
    If you really want to be able to know every roll this particular Di has ever yielded you could add History => (), to the new method and push $newface onto that during Roll(). I would avoid this unless it were heavily restricted in the implementation. Also, using the wantarray function (or even detecting the presence of an argument) you can easily have the Roll() method detect whether or not it should act like the Rolls() function and return a list, or just roll once and return that as a scalar. Does this help?

      I see where you're comming from. Following these lines of thought I'll need a Dice::blow-on() routine too! :)

      I like the way your looking at this, and I really like the 'History' method, it gives a 'personality' aspect to the di. I'm still pondering the 'face' value though as no matter what face is up a person still 'rolls' the di, unleass the 'last-face' value was somehow worked into the random seed... hrmmm... hrmmm....

      coreolyn
        Since we are attempting to model an actual physical object using OO Perl, we may as well look at an actual die in the world. It has two main attributes which are useful to us (although I have one game which takes advantage of a third, but is way out of scope)-- number of sides, and which side is up.

        Our instance, in order to be accurate, should have these attributes and nothing else. A history attribute is an open door to a serious memory leak unless you manage the size of the history very actively.

        About face, as the die sits on a surface, the face up is an attribute. Roll is an action. Sometimes we want to know what the up face is without changing it, like in Yahtzee. We roll all five dice, examine them, reroll the ones we don't like, reroll again, then score. For scoring we need to have a way to check all five dice without changing them.