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?
| [reply] [d/l] |
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
| [reply] |
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.
| [reply] |