Files
liche/api/libraries/bobing/Dice.php
T
2021-09-03 14:40:57 +08:00

312 lines
9.8 KiB
PHP

<?php
/**
* Title: 骰子类
* Description: 用于模拟投骰子,取得结果
* @copyright: Copyright (c) 2005-2010 By SS
* @author: pcq
* @version: 2.0
*/
class Dice
{
const RESULT_ZYCJH = 13; //状元插金花
const RESULT_LBHONG = 12; //六勃红
const RESULT_BDJ = 11; //遍地锦
const RESULT_LBHEI = 10; //六勃黑
const RESULT_WH = 9; //五红
const RESULT_WZDYX = 8; //五子带一秀
const RESULT_WZ = 7; //五子
const RESULT_ZY = 6; //状元
const RESULT_DT = 5; //对堂
const RESULT_SH = 4; //三红
const RESULT_SJ = 3; //四进
const RESULT_EJ = 2; //二举
const RESULT_YX = 1; //一秀
const RESULT_FH = 0; //罚黑
//结果骰子点数数组
private $_resultArr = array(0, 0, 0, 0, 0, 0);
//结果等级
private $_resultLevel = 0;
//结果值(附带点数)
private $_resultVal = 0;
static public function getAllLevel()
{
$arr = array(
self::RESULT_LBHONG => "六勃红",
self::RESULT_BDJ => "遍地锦",
self::RESULT_LBHEI => "六抔黑",
self::RESULT_ZYCJH => "状元插金花",
self::RESULT_WH => "五红",
self::RESULT_WZDYX => "五子带一秀",
self::RESULT_WZ => "五子",
self::RESULT_ZY => "状元",
self::RESULT_DT => "对堂",
self::RESULT_SH => "三红",
self::RESULT_SJ => "四进",
self::RESULT_EJ => "二举",
self::RESULT_YX => "一秀",
self::RESULT_FH => "罚黑"
);
return $arr;
}
/**
* 博小鱼币时,鱼币对应关系
* @param $level
* @return int
*/
static public function getyucoin($level)
{
$arr = array(
self::RESULT_ZYCJH => 20, //状元插金花
self::RESULT_LBHONG => 18, //六勃红
//self::RESULT_BD => 13, //遍地锦
self::RESULT_LBHEI => 16, //六勃黑
self::RESULT_WH => 14, //五红
self::RESULT_WZDYX => 12, //五子带一秀
self::RESULT_WZ => 10, //五子
self::RESULT_ZY => 8, //状元
self::RESULT_DT => 5, //对堂
self::RESULT_SH => 4, //三红
self::RESULT_SJ => 3, //四进
self::RESULT_EJ => 2, //二举
self::RESULT_YX => 1, //一秀
self::RESULT_FH => 0, //罚黑
);
return intval($arr[$level]);
}
//结果名称
static public function getName($flag)
{
$arr = self::getAllLevel();
if (empty($arr[$flag])) {
return $arr[self::RESULT_FH];
} else {
return $arr[$flag];
}
}
//输出结果
static public function show_result_msg($resultlevel, &$resultname, &$istop)
{
if ($resultlevel == 0) {
$resultname = "加油 再试一次";
} else if ($resultlevel == Dice::RESULT_YX) {
$resultname .= " 一马当先";
} else if ($resultlevel == Dice::RESULT_EJ) {
$resultname .= " 加把劲往前冲";
} else if ($resultlevel == Dice::RESULT_SJ) {
$resultname .= " 再博博找找灵感";
} else if ($resultlevel == Dice::RESULT_SH) {
$resultname .= " 有点能耐继续努力";
} else if ($resultlevel == Dice::RESULT_DT) {
$resultname .= " 胜利在望";
} else if ($resultlevel >= Dice::RESULT_ZY) {
$istop = 1;
$resultname .= " 恭喜!";
}
return $resultname;
}
//初始化,随便生成点数
function init($resultStr = false)
{
if (!$resultStr) {
$this->run();
} else {
$this->_resultArr = self::strToArr($resultStr);
if (!$this->_resultArr) {
return false;
}
}
$this->parse();
}
//掷骰子
private function run($resultStr = false)
{
if (!$resultStr) {
$_DICE = array(
array(1, 2, 3, 4, 5, 6),
array(1, 2, 3, 4, 5, 6),
array(1, 2, 3, 4, 5, 6),
array(1, 2, 3, 4, 5, 6),
array(1, 2, 3, 4, 5, 6),
array(1, 2, 3, 4, 5, 6)
);
//生成随机数组
$dice_count = count($_DICE);
for ($i = 0; $i < $dice_count; $i++) {
$this->_resultArr[$i] = $_DICE[$i][rand(0, count($_DICE[$i]) - 1)];
}
} else {
$this->_resultArr = self::strToArr($resultStr);
if (!$this->_resultArr) {
return false;
}
}
}
//分析
private function parse()
{
$sumVal = 0; //总点数
//结果数量,用于统计哪个点有几个
$nums = array(
//点=>数量,
1 => 0,
2 => 0,
3 => 0,
4 => 0,
5 => 0,
6 => 0,
);
//统计点数数量
foreach ($this->_resultArr as $value) {
$nums[$value]++;
$sumVal += $value;
}
if ($nums[4] == 6) {
$this->_resultLevel = self::RESULT_LBHONG; //六勃红
} /*
* else if($nums[1] == 6){
$this->_resultLevel = self::RESULT_BDJ; //遍地锦
}
*/
else if (($nums[2] == 6) || ($nums[3] == 6) || ($nums[5] == 6) || ($nums[6] == 6) || $nums[1] == 6) {
$this->_resultLevel = self::RESULT_LBHEI; //六勃黑
} else if (($nums[4] == 4) && ($nums[1] == 2)) {
$this->_resultLevel = self::RESULT_ZYCJH; //状元插金花
} else if ($nums[4] == 5) {
$this->_resultLevel = self::RESULT_WH; //五红
$this->_resultVal = $sumVal - 20; //附带点数
} else if ((($nums[1] == 5) || ($nums[2] == 5) || ($nums[3] == 5) || ($nums[5] == 5) || ($nums[6] == 5)) && ($nums[4] == 1)) {
$this->_resultLevel = self::RESULT_WZDYX; //五子带一秀
} else if ((($nums[1] == 5) || ($nums[2] == 5) || ($nums[3] == 5) || ($nums[5] == 5) || ($nums[6] == 5))) {
$this->_resultLevel = self::RESULT_WZ; //五子
if ($nums[$this->_resultArr[0]] == 5) {
$this->_resultVal = $sumVal - $this->_resultArr[0] * 5; //附带点数
} else {
$this->_resultVal = $this->_resultArr[0]; //附带点数
}
} else if (($nums[4] == 4)) {
$this->_resultLevel = self::RESULT_ZY; //状元
$this->_resultVal = $sumVal - 16; //附带点数
} else if (($nums[1] == 1) && ($nums[2] == 1) && ($nums[3] == 1) && ($nums[4] == 1) && ($nums[5] == 1) && ($nums[6] == 1)) {
$this->_resultLevel = self::RESULT_DT; //对堂
} else if ($nums[4] == 3) {
$this->_resultLevel = self::RESULT_SH; //三红
} else if (($nums[1] == 4) || ($nums[2] == 4) || ($nums[3] == 4) || ($nums[5] == 4) || ($nums[6] == 4)) {
$this->_resultLevel = self::RESULT_SJ; //四进
} else if ($nums[4] == 2) {
$this->_resultLevel = self::RESULT_EJ; //二举
} else if ($nums[4] == 1) {
$this->_resultLevel = self::RESULT_YX; //一秀
} else {
$this->_resultLevel = self::RESULT_FH; //罚黑
}
}
//重新掷骰子
public function reRun($resultStr = false)
{
//清空数据
$this->_resultLevel = 0;
$this->_resultVal = 0;
$this->_resultArr = array(0, 0, 0, 0, 0, 0);
$this->run($resultStr);
$this->parse();
}
//取得结果等级
public function getResultLevel()
{
return $this->_resultLevel;
}
//取得结果值(附带点数)
public function getResultVal()
{
return $this->_resultVal;
}
//取得结果名称
public function getResultName()
{
$resultLevel = $this->_resultLevel;
return $this->getName($resultLevel);
}
//取得结果骰子点数数组
public function getResultArr()
{
return $this->_resultArr;
}
//取得结果骰子点数字符串代表结果(用于保存到数据库中如234123)
public function getResultStr()
{
return implode($this->_resultArr);
}
public function getcredit($level = false)
{
$level = $level == false ? $this->_resultLevel : $level;
$arr = array(
self::RESULT_ZYCJH => 120, //状元插金花
self::RESULT_LBHONG => 100, //六勃红
//self::RESULT_BD => 13, //遍地锦
self::RESULT_LBHEI => 90, //六勃黑
self::RESULT_WH => 80, //五红
self::RESULT_WZDYX => 70, //五子带一秀
self::RESULT_WZ => 60, //五子
self::RESULT_ZY => 50, //状元
self::RESULT_DT => 20, //对堂
self::RESULT_SH => 10, //三红
self::RESULT_SJ => 5, //四进
self::RESULT_EJ => 2, //二举
self::RESULT_YX => 1, //一秀
self::RESULT_FH => 0, //罚黑
);
return intval($arr[$level]);
}
//把代表点数的字符串转化为点数数组
static public function strToArr($str = "")
{
if ($str == "") {
return false;
}
$arr = explode(',', $str);
if (count($arr) != 6) { //非法字符串
return false;
}
foreach ($arr as $value) {
if (!($value >= 1 && $value <= 6)) { //非法字符
return false;
}
}
return $arr;
}
}
//test
//$dice = new Dice();
//while($dice->getResultLevel() != 5)
//{
// $dice->reRun();
//}
//echo "<br/>result lever:".$dice->getResultLevel();
//echo "<br/>result val:".$dice->getResultVal();
//echo "<br/>result name:".$dice->getResultName();
//echo "<br/>result string:".$dice->getResultStr();
?>