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


Posted in PHP onNovember 06, 2017

本文实例讲述了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 相关文章推荐
比较discuz和ecshop的截取字符串函数php版
Sep 03 PHP
基于empty函数的输出详解
Jun 17 PHP
PHP Session机制简介及用法
Aug 19 PHP
php超快高效率统计大文件行数
Jul 05 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
PHP实现的观察者模式实例
Jun 21 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
laravel migrate初学常见错误的解决方法
Oct 11 PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 27 PHP
基于PHP+mysql实现新闻发布系统的开发
Aug 06 PHP
详解PHP服务器如何在有限的资源里最大提升并发能力
May 25 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 #PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 #PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 #PHP
php实现的生成迷宫与迷宫寻址算法完整实例
Nov 06 #PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 #PHP
PHP中危险的file_put_contents函数详解
Nov 04 #PHP
PHP回调函数概念与用法实例分析
Nov 03 #PHP
You might like
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
vue项目初始化到登录login页面的示例
2019/10/31 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
Python坐标线性插值应用实现
2019/11/13 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
经济系大学生求职信
2013/10/01 职场文书
数控技术专业推荐信
2013/11/01 职场文书
信息专业个人的自我评价
2013/12/27 职场文书
早餐连锁店计划书
2014/01/08 职场文书
应用英语专业自荐信
2014/01/26 职场文书
运动会开幕式主持词
2014/03/28 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
党员个人总结范文
2015/02/14 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python