当前位置:首页 > PHP教程 > php应用 > 列表

PHP实现猜数游戏

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-07 08:26:44 浏览: 评论:0 

本文实例为大家分享了PHP实现猜数游戏的具体代码,供大家参考,具体内容如下

猜数游戏有两种玩法:

第一种:两个人玩,一方出数字,一方猜。出数字的人要想好一个指定位数的数,数字可重复,不能让猜的人知道。

猜的人就可以开始猜。每猜一个数,出数者就要说大过或小过出的数。

第二种:两个人玩,一方出数字,一方猜。出数字的人要先想好一个没有重复数字的4位数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。如正确答案为5234,而猜的人猜5346,则是1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为2B,合起来就是1A2B。接着猜的人再根据出题者的几A几B继续猜,直到猜中为止。

下面是PHP代码实现:

  1. <?php 
  2. // 标准输入流和标准输出流 
  3. $stdin = null; 
  4. $stdout = null; 
  5.    
  6. /** 
  7.  * 初始化 IO 流 
  8.  */ 
  9. function init() { 
  10.  global $stdin
  11.  global $stdout
  12.    
  13.  $stdin = fopen('php://stdin''r'); 
  14.  $stdout = fopen('php://stdout''w'); 
  15.    
  16. /** 
  17.  * 关闭 IO 流 
  18.  */ 
  19. function destroy() { 
  20.  global $stdin
  21.  global $stdout
  22.    
  23.  if(is_resource($stdin)) { 
  24.  fclose($stdin); 
  25.  } 
  26.  if(is_resource($stdout)) { 
  27.  fclose($stdout); 
  28.  } 
  29.    
  30. /** 
  31.  * 从命令行读取一行数据 
  32.  */ 
  33. function read() { 
  34.  global $stdin
  35.    
  36.  $line = fgets($stdin); 
  37.  return trim($line, PHP_EOL); //去除换行符 
  38.    
  39. /** 
  40.  * 向命令行输出一行数据 
  41.  */ 
  42. function write($line) { 
  43.  global $stdout
  44.  // 转换编码 
  45.  if(stripos(PHP_OS, 'winnt') !== false) { 
  46.  $line = iconv('UTF-8''GBK'$line); 
  47.  } 
  48.  fwrite($stdout$line . PHP_EOL); 
  49.    
  50. /** 
  51.  * 第一种玩法 
  52.  * @param $count 位数 
  53.  */ 
  54. function guess_the_number($count = 2) { 
  55.  // 随机生成一个 $count 位数 
  56.  $min = pow(10, $count - 1); 
  57.  $max = pow(10, $count) - 1; 
  58.  $number = rand($min$max); 
  59.  init(); 
  60.  while(1) { 
  61.  write(sprintf('Please input your number (%s-bit digit), q or quit exit: '$count)); 
  62.  $readStr = read(); 
  63.  // exit program 
  64.  if($readStr == 'q' || $readStr == 'quit') { 
  65.  break
  66.  } 
  67.  $readInt = intval($readStr); 
  68.  if($readInt > $number) { 
  69.  write('大了'); 
  70.  } else if($readInt < $number) { 
  71.  write('小了'); 
  72.  } else { 
  73.  write('恭喜你,猜对了!'); 
  74.  write('Input c continue to play'); 
  75.  $readStr = read(); 
  76.  if($readStr == 'c' || $readStr == 'continue') { 
  77.  $number = rand($min$max); 
  78.  } else {  
  79.  break ; 
  80.  } 
  81.  } 
  82.  } 
  83.  destroy(); 
  84.    
  85. /** 
  86.  * 得到一个没有重复数字的四位数 
  87.  */ 
  88. function getRandNumber() { 
  89.  $num = rand(1, 9); 
  90.  $array = array_diff(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), [$num]); 
  91.  shuffle($array); 
  92.  $subarr = array_slice($array, 0, 3); //再取 3 个数字 
  93.  $str = implode(''array_merge([$num], $subarr)); 
  94.  return intval($str); 
  95.    
  96. /** 
  97.  * 第二种玩法 
  98.  */ 
  99. function guess_the_number2() { 
  100.  $number = getRandNumber(); 
  101.  $len = 4; //四位数 
  102.  init(); 
  103.  while(1) { 
  104.  write(sprintf('Please input your number (%s-bit digit), q or quit exit: '$len)); 
  105.  $readStr = read(); 
  106.  // exit program 
  107.  if($readStr == 'q' || $readStr == 'quit') { 
  108.  break
  109.  } 
  110.  $readInt = intval($readStr); 
  111.  if($readInt == $number) { 
  112.  write('恭喜你,猜对了!'); 
  113.  write('Input c continue to play'); 
  114.  $readStr = read(); 
  115.  if($readStr == 'c' || $readStr == 'continue') { 
  116.  $number = getRandNumber(); 
  117.  } else {  
  118.  break ; 
  119.  } 
  120.  } else { 
  121.  // 判断 几A几B 
  122.  $readInt = str_pad($readInt$len'0', STR_PAD_LEFT); //不足四位的补足四位 
  123.  $number = strval($number); 
  124.  $readArr = str_split($readInt, 1); // cast to array 
  125.  $numArr = str_split($number, 1); 
  126.  $aval = 0; // 几A 
  127.  $bval = 0; // 几B 
  128.  for($i = 0; $i < $len$i++) { 
  129.  if($readArr[$i] == $numArr[$i]) { 
  130.  $aval++; 
  131.  unset($readArr[$i], $numArr[$i]); 
  132.  } 
  133.  } 
  134.  $bval = count(array_intersect($readArr$numArr)); 
  135.  write(sprintf('%sA%sB'$aval$bval)); 
  136.  } 
  137.  } 
  138.  destroy(); 
  139.    
  140. if(PHP_SAPI == 'cli') { 
  141.  // guess_the_number(1); 
  142.  guess_the_number2(); 
  143. else { 
  144.  echo 'Please run under command line!'
  145.  exit
  146. }

Tags: PHP猜数游戏

分享到: