用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 '

骰子点数:

';

echo '

';

foreach($res['dice'] as $val){

echo 'img.php?num='.%24val.'';

}

echo '

';

echo '

结果:

';

echo '

'.$res['rankName'].'

';

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

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哈哈~

2fcdfccf4645a2c0f4a9a0872f730951.png

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

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

时间: 2017-11-05

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值