前一篇关于PHP版本的骰子游戏(详见此),for循环的实现,在高并发下,效率显然是非常地低的。

下面是优化结果,如果您有更好的方法,望不吝赐教!

  1. <?php 
  2. /** 
  3.  * Description of Dice 
  4.  * 
  5.  * @author momosweb(AT)qq.com 
  6.  */ 
  7. class Dice { 
  8.     private $dice_type = 6; // 骰子类型 
  9.     private $number = 1;    // 骰子数量 
  10.     private $people = 1;    // 玩家数量 
  11.      
  12.     /** 
  13.      * 设置骰子类型 
  14.      * @param int $dice_type 
  15.      */ 
  16.     public function set_dice($dice_type
  17.     { 
  18.         $dice_type = intval($dice_type); 
  19.         $this->dice_type = $dice_type ? $dice_type : $this->dice_type; 
  20.     } 
  21.  
  22.     /** 
  23.      * 设置骰子数量 
  24.      * @param int $number 
  25.      */ 
  26.     public function set_number($number
  27.     { 
  28.         $number = intval($number); 
  29.         $this->number = $number ? $number : $this->number; 
  30.     } 
  31.      
  32.     /** 
  33.      * 设置玩家数量 
  34.      * @param int $people 
  35.      */ 
  36.     public function set_people($people
  37.     { 
  38.         $people = intval($people); 
  39.         $this->people = $people ? $people : $this->people; 
  40.     } 
  41.  
  42.     /** 
  43.      * 返回骰子点数 
  44.      * @return intval 
  45.      */ 
  46.     private function roll() 
  47.     { 
  48.         return mt_rand(1, $this->dice_type); 
  49.     } 
  50.      
  51.     /** 
  52.      * 返回骰子游戏结果 
  53.      * @return array 
  54.      */ 
  55.     public function result() 
  56.     {    
  57.         // 根据人数返回单次结果 
  58.         $fun_people = function() { 
  59.             // 构造骰子生成器 
  60.             $fun_game = function() { 
  61.                 return $this->roll(); 
  62.             }; 
  63.              
  64.             // 根据骰子数生成单次结果 
  65.             $arr_number = range(1, $this->number); 
  66.             return array_map($fun_game$arr_number); 
  67.         }; 
  68.          
  69.         $arr_people = range(1, $this->people); 
  70.         $result = array_map($fun_people$arr_people); 
  71.          
  72.         return $result
  73.     } 
  74.  
  75. $Dice = new Dice(); 
  76. $result = $Dice->result(); 
  77. var_dump($result); 
  78.  
  79. ?> 

哈哈,又到出题时间啦!如果需要比对最终结果,看谁的总点数最大呢?