<?php
classroll
{
private$_defRank='lk';
publicfunctionlottery()
{
$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
*@returnarray
*/
publicfunctiongetRes($dice)
{
$format=$this->formatDice($dice);
$rank=$this->getRank($format);
$rankName=$this->getName($rank);
return[
'dice'=>$dice,
'format'=>$format,
'rank'=>$rank,
'rankName'=>$rankName,
];
}
/**
*掷骰子
*@returnarray
*/
publicfunctionrollDice()
{
$res=[];
for($i=0;$i<6;$i++){
$res[]=mt_rand(1,6);
}
return$res;
}
/**
*格式化掷骰子结果
*@paramarray$list
*@returnarray
*/
publicfunctionformatDice($list=[])
{
$data=[];
if(count($list)!=6){
return$data;
}
$data=[
1=>0,
2=>0,
3=>0,
4=>0,
5=>0,
6=>0,
];
foreach($listas$val){
if(isset($data[$val])){
$data[$val]+=1;
}
}
foreach($dataas$key=>$val){
if($val==0){
unset($data[$key]);
}
}
return$data;
}
/**
*判断筛子结果的大小
*@param$list
*@returnint|string
*/
publicfunctiongetRank($list)
{
$ruleList=$this->_getRule();
$res=$this->_defRank;
if(!empty($ruleList)){
foreach($ruleListas$rank=>$rankRules){
foreach($rankRulesas$rule){
foreach($ruleas$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;
}
/**
*根据排序获取掷骰子结果名称
*@paramint$rank
*@returnarray
*/
publicfunctiongetName($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;
}
/**
*返回规则
*@returnarray
*/
privatefunction_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=newroll();
$res=$roll->lottery();
echo'<h2>骰子点数:</h2>';
echo'<p>';
foreach($res['dice']as$val){
echo'<imgsrc="img.php?num='.$val.'">';
}
echo'</p>';
echo'<h2>结果:</h2>';
echo'<h2style="color:red;">'.$res['rankName'].'</h2>';
其中img.php是使用php生成图片的文件,参数num是点数,然后输出相应点数的图片,代码如下:
<?php
classimgDock
{
publicfunctiongetImg($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){
case1:
imagefilledarc($img,100,100,50,50,0,0,$blue,IMG_ARC_PIE);
break;
case2:
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;
case3:
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;
case4:
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;
case5:
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;
case6:
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=newimgDock();
$imgDock->getImg($num);
|