php实现的中秋博饼游戏之掷骰子并输出结果功能详解
这篇文章主要介绍了php实现的中秋博饼游戏之掷骰子并输出结果功能,结合实例形式分析了php掷骰子的原理及游戏结果的图形输出相关操作技巧,需要的朋友可以参考下
本文实例讲述了php实现的中秋博饼游戏之掷骰子并输出结果功能,分享给大家供大家参考,具体如下:
前面讲述了php实现的中秋博饼游戏之绘制骰子图案功能,纯php实现,就要用php来生成图案,第一步就先绘制骰子图案,下面就是编码实现业务逻辑,具体代码如下:
- <?php
- class roll
- {
- private $_defRank = 'lk';
- public function lottery()
- {
- $dice = $this->rollDice();
- $format = $this->formatDice($dice);
- $rank = $this->getRank($format);
- $rankName = $this->getName($rank);
- return [
- 'dice' => $dice,
- //'format' => $format,
- 'rank' => $rank,
- 'rankName' => $rankName,
- ];
- }
- /**
- * 获取筛子排名结果
- * @param $dice
- * @return array
- */
- public function getRes($dice)
- {
- $format = $this->formatDice($dice);
- $rank = $this->getRank($format);
- $rankName = $this->getName($rank);
- return [
- 'dice' => $dice,
- 'format' => $format,
- 'rank' => $rank,
- 'rankName' => $rankName,
- ];
- }
- /**
- * 掷骰子
- * @return array
- */
- public function rollDice()
- {
- $res = [];
- for ($i = 0; $i < 6; $i++) {
- $res[] = mt_rand(1, 6);
- }
- return $res;
- }
- /**
- * 格式化掷骰子结果
- * @param array $list
- * @return array
- */
- public function formatDice($list = [])
- {
- $data = [];
- if (count($list) != 6) {
- return $data;
- }
- $data = [
- 1 => 0,
- 2 => 0,
- 3 => 0,
- 4 => 0,
- 5 => 0,
- 6 => 0,
- ];
- foreach ($list as $val) {
- if (isset($data[$val])) {
- $data[$val] += 1;
- }
- }
- foreach ($data as $key => $val) {
- if ($val == 0) {
- unset($data[$key]);
- }
- }
- return $data;
- }
- /**
- * 判断筛子结果的大小
- * @param $list
- * @return int|string
- */
- public function getRank($list)
- {
- $ruleList = $this->_getRule();
- $res = $this->_defRank;
- if (!emptyempty($ruleList)) {
- foreach ($ruleList as $rank => $rankRules) {
- foreach ($rankRules as $rule) {
- foreach ($rule as $dian => $num) {
- if (isset($list[$dian])) {
- if ($list[$dian] == $num) {
- $res = $rank;
- } else {
- //规则中只要有一条不满足就跳出当前规则验证
- $res = $this->_defRank;
- break;
- }
- } else {
- //规则中只要有一条不满足就跳出当前规则验证
- $res = $this->_defRank;
- break;
- }
- }
- //有一条规则匹配,跳出循环,
- if ($res != $this->_defRank) {
- break;
- }
- }
- //有一条规则匹配,跳出循环,
- if ($res != $this->_defRank) {
- break;
- }
- }
- }
- return $res;
- }
- /**
- * 根据排序获取掷骰子结果名称
- * @param int $rank
- * @return array
- */
- public function getName($rank = NULL)
- {
- $list = [
- 'cjh' => '状元插金花',
- 'lbh' => '六杯红',
- 'bdj' => '遍地锦',
- 'ww' => '五王',
- 'wzdyx' => '五子带一秀',
- 'wzdk' => '五子登科',
- 'zy' => '状元',
- 'by' => '榜眼',
- 'sh' => '三红',
- 'sj' => '四进',
- 'eq' => '二举',
- 'yx' => '一秀',
- 'lk' => '轮空',
- ];
- if (!emptyempty($rank)) {
- $rankName = '';
- if (isset($list[$rank])) {
- $rankName = $list[$rank];
- }
- return $rankName;
- }
- return $list;
- }
- /**
- * 返回规则
- * @return array
- */
- private function _getRule()
- {
- return [
- 'cjh' => [
- [2 => 2, 4 => 4]
- ],
- 'lbh' => [
- [4 => 6]
- ],
- 'bdj' => [
- [1 => 6],
- [2 => 6],
- [3 => 6],
- [5 => 6],
- [6 => 6],
- ],
- 'ww' => [
- [4 => 5],
- ],
- 'wzdyx' => [
- [1 => 5, 4 => 1],
- [2 => 5, 4 => 1],
- [3 => 5, 4 => 1],
- [5 => 5, 4 => 1],
- [6 => 5, 4 => 1],
- ],
- 'wzdk' => [
- [1 => 5],
- [2 => 5],
- [3 => 5],
- [5 => 5],
- [6 => 5],
- ],
- 'zy' => [
- [4 => 4]
- ],
- 'by' => [
- [1 => 1, 2 => 1, 3 => 1, 4 => 1, 5 => 1, 6 => 1]
- ],
- 'sh' => [
- [4 => 3]
- ],
- 'sj' => [
- [1 => 4],
- [2 => 4],
- [3 => 4],
- [5 => 4],
- [6 => 4],
- ],
- 'eq' => [
- [4 => 2]
- ],
- 'yx' => [
- [4 => 1]
- ],
- ];
- }
- }
- $roll = new roll();
- $res = $roll->lottery();
- echo '<h2>骰子点数:</h2>';
- echo '<p>';
- foreach($res['dice'] as $val){
- echo '<img src="img.php?num='.$val.'" >';
- }
- echo '</p>';
- echo '<h2>结果:</h2>';
- echo '<h2 >'.$res['rankName'].'</h2>';
其中img.php是使用php生成图片的文件,参数num是点数,然后输出相应点数的图片,代码如下:
- <?php
- class imgDock
- {
- public function getImg($num = 0)
- {
- if(!emptyempty($num)){
- header('Content-Type:image/png');
- $img = imagecreatetruecolor(200, 200);
- $white = imagecolorallocate($img, 255, 255, 255);
- $grey = imagecolorallocate($img, 100, 100, 100);
- $blue = imagecolorallocate($img, 0, 102, 255);
- $red = imagecolorallocate($img, 255, 0, 0);
- imagefill($img, 0, 0, $white);
- imageline($img, 10, 20, 10, 180, $grey);
- imageline($img, 10, 180, 20, 190, $grey);
- imageline($img, 20, 190, 180, 190, $grey);
- imageline($img, 180, 190, 190, 180, $grey);
- imageline($img, 190, 180, 190, 20, $grey);
- imageline($img, 190, 20, 180, 10, $grey);
- imageline($img, 180, 10, 20, 10, $grey);
- imageline($img, 20, 10, 10, 20, $grey);
- //1/2/3/4/5/6
- switch($num){
- case 1:
- imagefilledarc($img, 100, 100, 50, 50, 0, 0, $blue, IMG_ARC_PIE);
- break;
- case 2:
- imagefilledarc($img, 60, 100, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- imagefilledarc($img, 140, 100, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- break;
- case 3:
- imagefilledarc($img, 50, 50, 40, 40, 0, 0 , $blue, IMG_ARC_PIE);
- imagefilledarc($img, 100, 100, 40, 40, 0, 0 , $blue, IMG_ARC_PIE);
- imagefilledarc($img, 150, 150, 40, 40, 0, 0 , $blue, IMG_ARC_PIE);
- break;
- case 4:
- imagefilledarc($img, 50, 50, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- imagefilledarc($img, 50, 150, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- imagefilledarc($img, 150, 150, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- imagefilledarc($img, 150, 50, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- break;
- case 5:
- imagefilledarc($img, 50, 50, 40, 40, 0, 0 , $blue, IMG_ARC_PIE);
- imagefilledarc($img, 50, 150, 40, 40, 0, 0 , $blue, IMG_ARC_PIE);
- imagefilledarc($img, 100, 100, 40, 40, 0, 0 , $blue, IMG_ARC_PIE);
- imagefilledarc($img, 150, 150, 40, 40, 0, 0 , $blue, IMG_ARC_PIE);
- imagefilledarc($img, 150, 50, 40, 40, 0, 0 , $blue, IMG_ARC_PIE);
- break;
- case 6:
- imagefilledarc($img, 50, 50, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- imagefilledarc($img, 50, 150, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- imagefilledarc($img, 100, 50, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- imagefilledarc($img, 100, 150, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- imagefilledarc($img, 150, 150, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- imagefilledarc($img, 150, 50, 40, 40, 0, 0 , $red, IMG_ARC_PIE);
- break;
- default:
- break;
- }
- imagepng($img);
- imagedestroy($img);
- }
- }
- }
- $num = 0;
- if(isset($_GET['num'])){
- $num = intval($_GET['num']);
- }
- $imgDock = new imgDock();
- $imgDock->getImg($num);