package NaughtsAndCrosses; use strict; use Carp; sub new { my $class = shift; my %self; $self{board} = [[0,0,0], [0,0,0], [0,0,0]]; $self{player} = 1; $self{moves} = 0; bless \%self, $class; } sub player() { my $self = shift; return $self->{player}; } sub play { my ($self, $row, $col) = @_; $row--; $col--; carp "Move already played" unless $self->{board}[$row][$col]==0; $self->{board}[$row][$col] = $self->{player}; $self->{player} = $self->{player}==1? 2 : 1; $self->{moves}++; return; } sub board { my $self = shift; my $board = ""; foreach my $row(@{$self->{board}}) { foreach my $val(@{$row}) { $board.= $val; } $board.= "\n"; } return $board; } sub winner() { my $self = shift; # todo } sub finished() { my $self = shift; return $self->winner() || $self->{moves}==9; } 1;