Acme-Mahjong-Rule-CC
view release on metacpan or search on metacpan
lib/Acme/Mahjong/Rule/CC.pm view on Meta::CPAN
@score;
}
sub draw{
croak "Wrong number of arguments, needs 4.\n" unless (@_==4);
my @score;
my($l1, $l2 ,$l3 ,$l4)=@_;
$score[0]=$l1*6-2*($l2+$l3+$l4);
$score[1]=$l2*4-($l1*2+$l3+$l4);
$score[2]=$l3*4-($l1*2+$l2+$l4);
$score[3]=$l4*4-($l1*2+$l3+$l2);
@score;
}
1;
__END__
=head1 NAME
Acme::Mahjong::Rule::CC - Exchange Tables for a Classic Chinese Version of Mahjong.
=head1 SYNOPSIS
this returns the exchanges of the given scores
when the winner is a non-dealer.
The equivalent chart form of this exchange would be:
|win 200 | deal 100 | pl3 50 | pl4 20 |
=============================================|
win | X | -400 | -200 | -200 |
deal | 400 | X | -100 | -160 |
pl3 | 200 | 100 | X | -30 |
pl4 | 200 | 160 | 30 | X |
=============================================|
total| 800 | -140 | -270 | -390 |
Now since the methods require that the winner comes
first(if there is one), and then the dealer you need to
rearrage the players in a way such as the following
example from mj_series:
=cut
my $type;
if ($winner eq $dealer){
@players = sort {$b eq $winner} @players;
$type = 0;
} elsif ($winner ne ""){
@players = sort {$b eq $dealer} @players;
@players = sort {$b eq $winner} @players;
$type = 1;
} else {
@players = sort {$b eq $dealer} @players;
$type = 2;
}
=head2 Note:
You can find the rest of the source code for mj_series with your distrobution.
#!There must be exactly four arguments in dealer(), nondealer(),
and draw() otherwise, the function will throw an exception.
=head1 DESCRIPTION
This module provides functions that table the exchanges of a round of mahjong
based off of the given scores. This module mainly applies to the Classic
Chinese version of the game, where every hand is scored, not just the winners.
Players pay each other the value of the other's hand, dealer pays and recieves
double, and winner pays no one.
=over
=item mahjong_table()
mahjong_table() provides an example of how to use the
other functions or gives you a very basic 1-hand mahjong
score calculator. It is not included with :tables, you must
use :all to be able to use it.
=item nondealer()
As with all game types, the dealer pays and recieves double, the winner
pays no one, but collects from everyone(double from the dealer),
and the other players collect normally, while still paying/recieving
double from the dealer and paying, but not collecting from the winner.
=cut
nondealer($winner_pts, $dealer_pts, $player3_pts, $player4_pts);
#nondealer(200,100,50,20) returns (800,-140,-270,-390)
=item dealer()
The dealer() function returns the exchanges of the given
scores when the dealer is the winner. meaning that the
winnner both collects double and pays no one.
=cut
dealer(winner, player2, player3, player4);
#dealer(200,100,50,20) returns (1200,-200,-500,-500)
=item draw()
returns the exchanges of the given scores when there
is no winner in the form of an array.
=cut
draw(dealer, player2, player3, player4);
#draw(200,100,0,0) returns (1000,-200,-400,-400)
=back
=head2 EXPORT
None by default.
=head1 SEE ALSO
( run in 1.401 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )