• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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 (!empty($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 (!empty($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 style="color:red;">'.$res['rankName'].'/h2>';
    
    

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

    ?php
    class imgDock
    {
      public function getImg($num = 0)
      {
        if(!empty($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);
    
    

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

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • php实现的中秋博饼游戏之绘制骰子图案功能示例
    • php实现的网页版剪刀石头布游戏示例
    • php实现贪吃蛇小游戏
    • php猜单词游戏
    • php实现的简易扫雷游戏实例
    • PHP实现扎金花游戏之大小比赛的方法
    • jQuery+PHP实现的掷色子抽奖游戏实例
    • PHP使用header()输出图片缓存实例
    • php将图片文件转换成二进制输出的方法
    • php读取图片内容并输出到浏览器的实现代码
    • PHP提取数据库内容中的图片地址并循环输出
    上一篇:php实现的中秋博饼游戏之绘制骰子图案功能示例
    下一篇:php实现的三个常用加密解密功能函数示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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