看了Drdi的猜数游戏 俺也用perl改写了一个!大神指教

软件和网站开发以及相关技术探讨
回复
头像
ghoul
帖子: 24
注册时间: 2007-09-13 10:31

看了Drdi的猜数游戏 俺也用perl改写了一个!大神指教

#1

帖子 ghoul » 2013-08-25 13:46

新手 正在看perl语言入门 以前学了点点C语言 看到 Drdi 那个猜数游戏贴看明白了 就自己也来改写一个
看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;
}
[/size]
上次由 ghoul 在 2013-09-02 10:23,总共编辑 2 次。
头像
ghoul
帖子: 24
注册时间: 2007-09-13 10:31

Re: 看了Drdi的猜数游戏 俺也用perl改写了一个!大神指教

#2

帖子 ghoul » 2013-08-25 14:04

我这个是在windows下编写的 dos下运行正常 不知道在linux下汉字显示怎么弄!!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 看了Drdi的猜数游戏 俺也用perl改写了一个!大神指教

#3

帖子 eexpress » 2013-08-26 9:07

不会玩。只知道中文不需要管,运行正常。perl缺省支持utf8。

● perl t.pl
由电脑根据游戏设置产生一个数,每猜一个数字,
电脑就根据这个数字给出几A几B,
其中A前面的数字表示位置正确的数的个数,
而B前的数字表示数字正确而位置不对的数的个数。
如正确答案为5234 而猜的人猜 5346,则是 1A2B,
。。。。
● 鸣学
回复