当前位置:首页 > PHP教程 > php图像处理 > 列表

php实现的中秋博饼游戏之掷骰子并输出结果功能详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-08-18 11:38:41 浏览: 评论:0 

这篇文章主要介绍了php实现的中秋博饼游戏之掷骰子并输出结果功能,结合实例形式分析了php掷骰子的原理及游戏结果的图形输出相关操作技巧,需要的朋友可以参考下

本文实例讲述了php实现的中秋博饼游戏之掷骰子并输出结果功能,分享给大家供大家参考,具体如下:

前面讲述了php实现的中秋博饼游戏之绘制骰子图案功能,纯php实现,就要用php来生成图案,第一步就先绘制骰子图案,下面就是编码实现业务逻辑,具体代码如下:

  1. <?php 
  2. class roll 
  3.   private $_defRank = 'lk'
  4.   public function lottery() 
  5.   { 
  6.     $dice   = $this->rollDice(); 
  7.     $format  = $this->formatDice($dice); 
  8.     $rank   = $this->getRank($format); 
  9.     $rankName = $this->getName($rank); 
  10.     return [ 
  11.       'dice'   => $dice
  12.       //'format'  => $format, 
  13.       'rank'   => $rank
  14.       'rankName' => $rankName
  15.     ]; 
  16.   } 
  17.   /** 
  18.    * 获取筛子排名结果 
  19.    * @param $dice 
  20.    * @return array 
  21.    */ 
  22.   public function getRes($dice
  23.   { 
  24.     $format  = $this->formatDice($dice); 
  25.     $rank   = $this->getRank($format); 
  26.     $rankName = $this->getName($rank); 
  27.     return [ 
  28.       'dice'   => $dice
  29.       'format'  => $format
  30.       'rank'   => $rank
  31.       'rankName' => $rankName
  32.     ]; 
  33.   } 
  34.   /** 
  35.    * 掷骰子 
  36.    * @return array 
  37.    */ 
  38.   public function rollDice() 
  39.   { 
  40.     $res = []; 
  41.     for ($i = 0; $i < 6; $i++) { 
  42.       $res[] = mt_rand(1, 6); 
  43.     } 
  44.     return $res
  45.   } 
  46.   /** 
  47.    * 格式化掷骰子结果 
  48.    * @param array $list 
  49.    * @return array 
  50.    */ 
  51.   public function formatDice($list = []) 
  52.   { 
  53.     $data = []; 
  54.     if (count($list) != 6) { 
  55.       return $data
  56.     } 
  57.     $data = [ 
  58.       1 => 0, 
  59.       2 => 0, 
  60.       3 => 0, 
  61.       4 => 0, 
  62.       5 => 0, 
  63.       6 => 0, 
  64.     ]; 
  65.     foreach ($list as $val) { 
  66.       if (isset($data[$val])) { 
  67.         $data[$val] += 1; 
  68.       } 
  69.     } 
  70.     foreach ($data as $key => $val) { 
  71.       if ($val == 0) { 
  72.         unset($data[$key]); 
  73.       } 
  74.     } 
  75.     return $data
  76.   } 
  77.   /** 
  78.    * 判断筛子结果的大小 
  79.    * @param $list 
  80.    * @return int|string 
  81.    */ 
  82.   public function getRank($list
  83.   { 
  84.     $ruleList = $this->_getRule(); 
  85.     $res   = $this->_defRank; 
  86.     if (!emptyempty($ruleList)) { 
  87.       foreach ($ruleList as $rank => $rankRules) { 
  88.         foreach ($rankRules as $rule) { 
  89.           foreach ($rule as $dian => $num) { 
  90.             if (isset($list[$dian])) { 
  91.               if ($list[$dian] == $num) { 
  92.                 $res = $rank
  93.               } else { 
  94.                 //规则中只要有一条不满足就跳出当前规则验证 
  95.                 $res = $this->_defRank; 
  96.                 break
  97.               } 
  98.             } else { 
  99.               //规则中只要有一条不满足就跳出当前规则验证 
  100.               $res = $this->_defRank; 
  101.               break
  102.             } 
  103.           } 
  104.           //有一条规则匹配,跳出循环, 
  105.           if ($res != $this->_defRank) { 
  106.             break
  107.           } 
  108.         } 
  109.         //有一条规则匹配,跳出循环, 
  110.         if ($res != $this->_defRank) { 
  111.           break
  112.         } 
  113.       } 
  114.     } 
  115.     return $res
  116.   } 
  117.   /** 
  118.    * 根据排序获取掷骰子结果名称 
  119.    * @param int $rank 
  120.    * @return array 
  121.    */ 
  122.   public function getName($rank = NULL) 
  123.   { 
  124.     $list = [ 
  125.       'cjh'  => '状元插金花'
  126.       'lbh'  => '六杯红'
  127.       'bdj'  => '遍地锦'
  128.       'ww'  => '五王'
  129.       'wzdyx' => '五子带一秀'
  130.       'wzdk' => '五子登科'
  131.       'zy'  => '状元'
  132.       'by'  => '榜眼'
  133.       'sh'  => '三红'
  134.       'sj'  => '四进'
  135.       'eq'  => '二举'
  136.       'yx'  => '一秀'
  137.       'lk'  => '轮空'
  138.     ]; 
  139.     if (!emptyempty($rank)) { 
  140.       $rankName = ''
  141.       if (isset($list[$rank])) { 
  142.         $rankName = $list[$rank]; 
  143.       } 
  144.       return $rankName
  145.     } 
  146.     return $list
  147.   } 
  148.   /** 
  149.    * 返回规则 
  150.    * @return array 
  151.    */ 
  152.   private function _getRule() 
  153.   { 
  154.     return [ 
  155.       'cjh'  => [ 
  156.         [2 => 2, 4 => 4] 
  157.       ], 
  158.       'lbh'  => [ 
  159.         [4 => 6] 
  160.       ], 
  161.       'bdj'  => [ 
  162.         [1 => 6], 
  163.         [2 => 6], 
  164.         [3 => 6], 
  165.         [5 => 6], 
  166.         [6 => 6], 
  167.       ], 
  168.       'ww'  => [ 
  169.         [4 => 5], 
  170.       ], 
  171.       'wzdyx' => [ 
  172.         [1 => 5, 4 => 1], 
  173.         [2 => 5, 4 => 1], 
  174.         [3 => 5, 4 => 1], 
  175.         [5 => 5, 4 => 1], 
  176.         [6 => 5, 4 => 1], 
  177.       ], 
  178.       'wzdk' => [ 
  179.         [1 => 5], 
  180.         [2 => 5], 
  181.         [3 => 5], 
  182.         [5 => 5], 
  183.         [6 => 5], 
  184.       ], 
  185.       'zy'  => [ 
  186.         [4 => 4] 
  187.       ], 
  188.       'by'  => [ 
  189.         [1 => 1, 2 => 1, 3 => 1, 4 => 1, 5 => 1, 6 => 1] 
  190.       ], 
  191.       'sh'  => [ 
  192.         [4 => 3] 
  193.       ], 
  194.       'sj'  => [ 
  195.         [1 => 4], 
  196.         [2 => 4], 
  197.         [3 => 4], 
  198.         [5 => 4], 
  199.         [6 => 4], 
  200.       ], 
  201.       'eq'  => [ 
  202.         [4 => 2] 
  203.       ], 
  204.       'yx'  => [ 
  205.         [4 => 1] 
  206.       ], 
  207.     ]; 
  208.   } 
  209. $roll = new roll(); 
  210. $res = $roll->lottery(); 
  211. echo '<h2>骰子点数:</h2>'
  212. echo '<p>'
  213. foreach($res['dice'as $val){ 
  214.   echo '<img src="img.php?num='.$val.'" >'
  215. echo '</p>'
  216. echo '<h2>结果:</h2>'
  217. echo '<h2 style="color:red;">'.$res['rankName'].'</h2>'

其中img.php是使用php生成图片的文件,参数num是点数,然后输出相应点数的图片,代码如下:

  1. <?php 
  2. class imgDock 
  3.   public function getImg($num = 0) 
  4.   { 
  5.     if(!emptyempty($num)){ 
  6.       header('Content-Type:image/png'); 
  7.       $img  = imagecreatetruecolor(200, 200); 
  8.       $white = imagecolorallocate($img, 255, 255, 255); 
  9.       $grey = imagecolorallocate($img, 100, 100, 100); 
  10.       $blue = imagecolorallocate($img, 0, 102, 255); 
  11.       $red  = imagecolorallocate($img, 255, 0, 0); 
  12.       imagefill($img, 0, 0, $white); 
  13.       imageline($img, 10, 20, 10, 180, $grey); 
  14.       imageline($img, 10, 180, 20, 190, $grey); 
  15.       imageline($img, 20, 190, 180, 190, $grey); 
  16.       imageline($img, 180, 190, 190, 180, $grey); 
  17.       imageline($img, 190, 180, 190, 20, $grey); 
  18.       imageline($img, 190, 20, 180, 10, $grey); 
  19.       imageline($img, 180, 10, 20, 10, $grey); 
  20.       imageline($img, 20, 10, 10, 20, $grey); 
  21.       //1/2/3/4/5/6 
  22.       switch($num){ 
  23.         case 1: 
  24.           imagefilledarc($img, 100, 100, 50, 50, 0, 0, $blue, IMG_ARC_PIE); 
  25.           break
  26.         case 2: 
  27.           imagefilledarc($img, 60, 100, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  28.           imagefilledarc($img, 140, 100, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  29.           break
  30.         case 3: 
  31.           imagefilledarc($img, 50, 50, 40, 40, 0, 0 , $blue, IMG_ARC_PIE); 
  32.           imagefilledarc($img, 100, 100, 40, 40, 0, 0 , $blue, IMG_ARC_PIE); 
  33.           imagefilledarc($img, 150, 150, 40, 40, 0, 0 , $blue, IMG_ARC_PIE); 
  34.           break
  35.         case 4: 
  36.           imagefilledarc($img, 50, 50, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  37.           imagefilledarc($img, 50, 150, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  38.           imagefilledarc($img, 150, 150, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  39.           imagefilledarc($img, 150, 50, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  40.           break
  41.         case 5: 
  42.           imagefilledarc($img, 50, 50, 40, 40, 0, 0 , $blue, IMG_ARC_PIE); 
  43.           imagefilledarc($img, 50, 150, 40, 40, 0, 0 , $blue, IMG_ARC_PIE); 
  44.           imagefilledarc($img, 100, 100, 40, 40, 0, 0 , $blue, IMG_ARC_PIE); 
  45.           imagefilledarc($img, 150, 150, 40, 40, 0, 0 , $blue, IMG_ARC_PIE); 
  46.           imagefilledarc($img, 150, 50, 40, 40, 0, 0 , $blue, IMG_ARC_PIE); 
  47.           break
  48.         case 6: 
  49.           imagefilledarc($img, 50, 50, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  50.           imagefilledarc($img, 50, 150, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  51.           imagefilledarc($img, 100, 50, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  52.           imagefilledarc($img, 100, 150, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  53.           imagefilledarc($img, 150, 150, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  54.           imagefilledarc($img, 150, 50, 40, 40, 0, 0 , $red, IMG_ARC_PIE); 
  55.           break
  56.         default
  57.           break
  58.       } 
  59.       imagepng($img); 
  60.       imagedestroy($img); 
  61.     } 
  62.   } 
  63. $num = 0; 
  64. if(isset($_GET['num'])){ 
  65.   $num = intval($_GET['num']); 
  66. $imgDock = new imgDock(); 
  67. $imgDock->getImg($num);

Tags: php中秋博饼 php骰子图案

分享到: