Acme-IRC-Art

 view release on metacpan or  search on metacpan

lib/Acme/IRC/Art.pm  view on Meta::CPAN

=item new


D'abord il vous faut en premier lieu appeler le constructeur qui se nome new, il se contente de creer un canevas vide sur lequel vous allez travailler,
vous pouvez spécifier sa hauteur et sa largeur, le canevas est remplis d'espace par défaut.


my $art->new($largeur,$hauteur);



Une règle à ne pas oublier c'est de définir votre dessin dans l'ordre auquel les éléments doivent apparaître
si par exemple vous definissez un texte puis que vous dessinez un rectangle dessus le texte sera effacé


=cut


sub new  {
  my ($class, $largeur, $hauteur) = @_;
  
  #gestion d'erreur
  my $syntaxe = 'Syntaxe correcte : $deco = Art->new(largeur, hauteur)';
  croak("Les arguments de la fonction \'new\' de Art.pm sont: la largeur et la hauteur du canevas
   $syntaxe") if @_!=3;
  croak("Largeur et hauteur doivent être des nombres
   $syntaxe") if ($largeur!~/^\d+$/ or $hauteur!~/^\d+$/);
  croak("la largeur ou la hauteur ne sont pas des nombre
   $syntaxe") if ($largeur!~/\d/ or $hauteur!~/\d/);


  $hauteur-- and $largeur--;
  my @canevas;
  $#canevas = $hauteur;
  #fill with spaces
  foreach my $temp (0..$hauteur)  {
    foreach my $temp2 (0..$largeur)   {
      $canevas[$temp][$temp2] = " ";
    } 
  }
  my $self = {};
  bless ($self,$class);
  $self->{canevas} = [@canevas];
  return $self;
}

=pod

=item result


Quand vous avez finis de définir votre dessin avec les méthodes qui sont décrite par la suite, appeler
la methode C<result> qui ne prend aucun arguments et qui retourne un tableau qui contient chaque ligne
de messages à envoyer pour afficher votre dessin.


=cut

sub result {
 my ($this) = shift;
 use Data::Dumper;
 return map {join '',@{$_}} @{$this->{canevas}};
}


=head1 Methodes

Voici la liste des méthodes avec lesquelles vous allez pouvoir dessiner


=over
=item pixel

La méthode 'pixel' pour afficher ou non un pixel , vous devez spécifier sa position et sa couleur

 $art->pixel($x,$y,$couleur,$on);

$on est une valeur bouléenn pour dire d'afficher ou d'effacer le pixel (-1 pour effacer).
$on est vraie par défaut vous pouvez utiliser la synthaxe suivante

 $art->pixel($x,$y,$couleur);

Une dernière chose : le $x et $y peuvent être des références vers un tableau, mais attention les coordonnées en
x et en y doivent correspondent une à une, exemple pour remplir la diagional d'un carré de 3 sur 3

 $art->pixel([0,1,2],[0,1,2],5);



=cut

sub pixel  {
  my ($this, $x, $y, $color, $on) = @_;
  my @canevas = @{$this->{canevas}};
 
  #gestion d'erreur
  my $syntaxe = '$deco->pixel( position x , position y , couleur , [on])';
  croak("Les arguments de \'pixel\' sont : la position en x , la position en y , la couleur et l'état du pixel
   $syntaxe")   if @_<4 or @_>5;
  croak("Les tableaux des position x et y ne sont pas de la même taille !
   $syntaxe")   if (ref $y and ref $x and @$x != @$y);
  croak("l'un d'un arguments de position n'est pas compatible avec l'autre
   $syntaxe")   if (ref $y and !ref $x or ref $x and !ref $y);
  croak("Vous etes sortit du canevas définit") if ((!ref $x and !ref $y ) and ($y>$#canevas or $x>(@{$canevas[0]}-1)));
  
  my (@y, @x);
  if (ref $y) {
       @x = @$x;
       @y = @$y;
  }
  else {
      $x[0] = $x;
      $y[0] = $y;
      $#y = 0;
  }
  $on = 0 unless defined $on;
  for (0..$#y)  {
    if ($on >= 0) {   
      $canevas[$y[$_]][$x[$_]] = "\003$color,$color \003";
    }
    else { 

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 1.059 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )