my @cards = (
{
name => "Fireball",
cost => { fire=>2, air=>1 },
# other card information...
},
{
name=>"Ice wall",
cost=>{ water=>3, frost=>5 },
},
{
name=>"Lightning bolt",
cost=>{ air=>2, electricity=>4 },
},
);
####
my @players = (
{
name=>"Joe",
mana =>{ fire=>5, air=>5, electricity=>5 },
# other information about player
},
{
name=>"Audrey",
mana =>{ water=>5, frost=>10 },
},
);
##
##
sub can_cast {
my ($rPlayer, $rCard) = @_;
for my $manaType (keys %{$rCard->{cost}}) {
return 0 if ! exists $rPlayer->{mana}{$manaType};
return 0 if $rPlayer->{mana}{$manaType} < $rCard->{cost}{$manaType};
}
# Nothing rejected, so we can cast it!
return 1;
}
##
##
$ cat mana.pl
use strict;
use warnings;
my @cards = (
<<< snip >>>
);
my @players = (
<<< snip >>>
);
# Show which players can cast which spells
for my $rPlayer (@players) {
print "$rPlayer->{name} can cast: ";
my $cnt=0;
for my $rCard (@cards) {
if (can_cast($rPlayer, $rCard)) {
++$cnt;
print "$rCard->{name} ";
}
}
if (!$cnt) {
print "NOTHING!";
}
print "\n";
}
sub can_cast {
<<>>
}
$ perl mana.pl
Joe can cast: Fireball Lightning bolt
Audrey can cast: Ice wall