Home | History | Annotate | Download | only in demo
      1 package
      2   Turtle;
      3 
      4 # Written by jreed (at] itis.com, adapted by Cristy.
      5 
      6 sub new
      7 {
      8   my $class = shift;
      9   my $self = {};
     10 
     11   @{$self}{qw(x y theta mirror)} = @_;
     12   bless $self, $class;
     13 }
     14 
     15 sub forward
     16 {
     17   my $self = shift;
     18   my ($r, $what) = @_;
     19   my ($newx, $newy)=($self->{x}+$r* sin($self->{theta}),
     20                      $self->{y}+$r*-cos($self->{theta}));
     21   if ($what) {
     22     &$what($self->{x}, $self->{y}, $newx, $newy);  # motion
     23   }
     24   # According to the coderef passed in
     25   ($self->{x}, $self->{y})=($newx, $newy);  # change the old coords
     26 }
     27 
     28 sub turn
     29 {
     30   my $self = shift;
     31   my $dtheta = shift;
     32 
     33   $self->{theta} += $dtheta*$self->{mirror};
     34 }
     35 
     36 sub state
     37 {
     38   my $self = shift;
     39 
     40   @{$self}{qw(x y theta mirror)};
     41 }
     42 
     43 sub setstate
     44 {
     45   my $self = shift;
     46 
     47   @{$self}{qw(x y theta mirror)} = @_;
     48 }
     49 
     50 sub mirror
     51 {
     52   my $self = shift;
     53 
     54   $self->{mirror} *= -1;
     55 }
     56 
     57 "Turtle.pm";
     58