前一篇關於PHP版本的骰子遊戲詳見此),for迴圈的實現,在高並發下,效率顯然是非常地低的。
下面是最佳化結果,如果您有更好的方法,望不吝賜教!
- <?php
- /**
- * Description of Dice
- *
- * @author momosweb(AT)qq.com
- */
- class Dice {
- private $dice_type = 6; // 骰子類型
- private $number = 1; // 骰子數量
- private $people = 1; // 玩家數量
-
- /**
- * 設定骰子類型
- * @param int $dice_type
- */
- public function set_dice($dice_type)
- {
- $dice_type = intval($dice_type);
- $this->dice_type = $dice_type ? $dice_type : $this->dice_type;
- }
-
- /**
- * 設定骰子數量
- * @param int $number
- */
- public function set_number($number)
- {
- $number = intval($number);
- $this->number = $number ? $number : $this->number;
- }
-
- /**
- * 設定玩家數量
- * @param int $people
- */
- public function set_people($people)
- {
- $people = intval($people);
- $this->people = $people ? $people : $this->people;
- }
-
- /**
- * 返回骰子點數
- * @return intval
- */
- private function roll()
- {
- return mt_rand(1, $this->dice_type);
- }
-
- /**
- * 返回骰子遊戲結果
- * @return array
- */
- public function result()
- {
- // 根據人數返回單次結果
- $fun_people = function() {
- // 構造骰子產生器
- $fun_game = function() {
- return $this->roll();
- };
-
- // 根據骰子數產生單次結果
- $arr_number = range(1, $this->number);
- return array_map($fun_game, $arr_number);
- };
-
- $arr_people = range(1, $this->people);
- $result = array_map($fun_people, $arr_people);
-
- return $result;
- }
- }
-
- $Dice = new Dice();
- $result = $Dice->result();
- var_dump($result);
-
- ?>
哈哈,又到出題時間啦!如果需要比對最終結果,看誰的總點數最大呢?
本文出自 “大漠—寄娛於學” 部落格,請務必保留此出處http://saron.blog.51cto.com/2581496/1175780