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

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

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

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