应该说设计思想:
1。显示函数。 传值或引用。
2。结果函数。传值或引用。
3。后期处理函数。
#!/usr/bin/perl
use strict;
use warnings;
#1-rock, 2-paper, 3-scissors
our ($You, $Me, $Draw) = (0,0,0);
my @options = ("rock", "paper", "scissors");
my($my_turn, $your_turn);
PrintIntro();
while(1) {
$my_turn = MyGo();
$your_turn = YourGo()-1;
print "Me: $options[$my_turn], You: $options[$your_turn] -- ";
Results($my_turn, $your_turn);#进行比较,进而改变$you $me ,$draw
PrintScore($You, $Me, $Draw);
last unless Continue();
}
sub PrintIntro {
print "\nRock, paper, scissors\n";
print "---------------------\n\n";
print "Rock beats scissors,\n";
print "Scissors beats paper, \n";
print "Paper beats rock.\n\n";
}
sub MyGo { return int(rand(3)); }
sub YourGo {
my $Turn = 0;
print "Enter 1-rock, 2-paper, 3-scissors\n";
chomp($Turn = );
while(($Turn < 1) || ($Turn > 3)) {
print "Enter 1-rock, 2-paper, 3-scissors\n";
chomp($Turn = );
}
return $Turn;
}
sub PrintScore {
print "You scored $You, I scored $Me with $Draw draws.\n";
if($You > $Me) {
print "You are winning.\n";
}
if($You < $Me) {
print "I am winning.\n";
}
print "\n\n";
}
sub Results {
my($my, $your) = @_;
my $Test = $my - $your;
if($Test == 0) {
$Draw++;
print " Draw.\n";
} elsif ($Test == -1) {
$You++;
print " You won.\n";
} elsif ($Test == 2) {
$You++;
print " You won.\n";
} else {
$Me++;
print " I won.\n";
}
}
sub Continue {
print "\nAnother game?(y/n): ";
my $answer;
while (1) {
$answer = ;
chomp $answer;
last if (lc $answer eq 'y') || (lc $answer eq 'n');
}
return $answer eq 'y';
}