看ee大神的代码都看不明白 求ee都给点进阶资料学习啊!!!
代码: 全选
#!/usr/bin/perl -w
use strict;
use 5.010;
REPLAY:
my @secret=&Random_Number;
my $secret=join "",@secret;
# say $secret; #测试作弊开关
print "由电脑根据游戏设置产生一个数,每猜一个数字,\n电脑就根据这个数字给出几A几B,\n其中A前面的数字表示位置正确的数的个数,\n而B前的数字表示数字正确而位置不对的数的个数。\n如正确答案为5234 而猜的人猜 5346,则是 1A2B,\n其中有一个5的位置对了,记为1A,\n而3和4这两个数字对了,而位置没对,\n因此记为 2B,合起来就是 1A2B。\n接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止\n中途直接退出游戏可以输入'quit'或'exit',\n\n输入4个(0-9)字符回车继续游戏:\n";
foreach (1..7){ #主循环
my $guess=&check_enter;
unless($guess==$secret){
say "\n".&judge($guess,@secret)."..........还可以继续猜".(7-$_)." 次\n" if $_!=7;
say "\n对不起,你已经猜了7次,你没有猜中.\n 正确答案是: $secret" if $_==7;
}else{
say "\n恭喜你!猜中了!!";
last;
}
}
print "重新开始猜?(y/n):"; # 这段判断是否重新开始游戏!
chomp(my $answer=<STDIN>);
until($answer=~/y|n/i){
say "请重新输入:";
chomp ($answer=<STDIN>);
}
($answer=~/n/i)?exit 1:
system "cls";
goto REPLAY;
sub judge{ #匹配数字 输出如1A2B
my($n,@g)=@_;
my @n=split //,$n;
my ($a,$b)=(0,0);
foreach (0..3){
($n[$_] eq $g[$_] )?$a++:
($n=~/.*$g[$_].*/)?$b++:
next;
} return $a.'A'.$b.'B';
}
sub Random_Number{ #这子程序用来生成随机数
my($rand,%count);
for (1..4){
$rand=int(rand(10));
$count{$rand}++;
redo if($count{$rand}>1);
} return keys %count;
}
sub check_enter{ #这个子程序判断输入是否是4个数字还是终止程序
chomp (my $guess=<STDIN>);
until($guess=~/\A[0-9]{4}\Z/){
exit 1 if $guess=~/quit|exit/i;
say "\n你输入错误,请重新输入(0-9)的4个数字:\n";
chomp ($guess=<STDIN>);
} return $guess;
}