纯php实现中秋博饼游戏(2):掷骰子并输出结果

这篇是纯php实现中秋博饼游戏系列博文(2)

 

上文是:
纯php实现中秋博饼游戏(1):绘制骰子图案

http://www.cnblogs.com/zqifa/p/php-dice-1.html
要纯php实现,就要用php来生成图案,第一步就先绘制骰子图案。下面就是编码实现业务逻辑,具体代码如下:

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

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

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

下面是我抽中状元的效果图,O(∩_∩)O哈哈~

纯php实现中秋博饼游戏系列博文:

纯php实现中秋博饼游戏(1):绘制骰子图案
http://www.cnblogs.com/zqifa/p/php-dice-1.html
纯php实现中秋博饼游戏(2):掷骰子并输出结果
http://www.cnblogs.com/zqifa/p/php-dice-2.html

done!

作者:zqifa

出处:https://www.l1mn.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z_qifa

此处弱弱求打赏~~万一有好心人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值