php 斗地主纯逻辑功能

发布时间 2023-12-12 15:12:13作者: 朝阳1
<?php  

//是不是单
function isDan($temp) {
	if (count($temp) != 1) {
		return false;
	} else {
		return '{"type":"dan","value":"'.$temp[0].'"}';
	}
}

//是不是对
function isDui($temp) {
	if (count($temp) != 2 || $temp[0] != $temp[1]) {
		return false;
	} else {
		return '{"type":"dui","value":"'.$temp[0]*$temp[1].'"}';
	}
}

//是不是火箭
function isHuojian($temp) {
	if (count($temp) == 2 && (($temp[0] == 100 && $temp[1] == 99) || ($temp[0] == 99 || $temp[1] == 100))) {
		return '{"type":"huojian","value":"99999999"}';
	} else {
		return false;
	}
}

//是不是三个一样的
function isSan($temp) {
	if (count($temp) != 3 || ($temp[0] != $temp[1] || $temp[1] != $temp[2])) {
		return false;
	} else {
		return '{"type":"san","value":"'.$temp[0] * $temp[1] * $temp[2].'"}';
	}
}

//是不是炸弹
function isZha($temp) {
	if (count($temp) != 4 || ($temp[0] != $temp[1] || $temp[1] != $temp[2] || $temp[2] != $temp[3])) {
		return false;
	} else {
		return '{"type":"zhadan","value":"'.$temp[0] * $temp[1] * $temp[2] * $temp[3].'"}';
	}
}

//是不是三带一
function isSandaiyi($temp) {
	sort($temp);
	if (count($temp) == 4) {
		 if ($temp[0] == $temp[1] && $temp[1] == $temp[2] && $temp[2] != $temp[3]) {
		 	$value = $temp[0] * $temp[1] * $temp[2];
			return '{"type":"sandaiyi","value":"'.$value.'"}';
		 } else if ($temp[0] != $temp[1] && $temp[1] == $temp[2] && $temp[2] == $temp[3]) {
		 	$value = $temp[1] * $temp[2] * $temp[3];
			return '{"type":"sandaiyi","value":"'.$value.'"}';
		 } else {
		 	return false;
		 }
	} else {
		return false;
	}
}

//是不是三带二
function isSandaiEr($temp) {
	sort($temp);
	if (count($temp) == 5) {
		 if ($temp[0] == $temp[1] && $temp[1] == $temp[2] && $temp[2] != $temp[3] && $temp[3] == $temp[4]) {
		 	$value = $temp[0] * $temp[1] * $temp[2];
			return '{"type":"sandaier","value":"'.$value.'"}';
		 } else if ($temp[0] == $temp[1] && $temp[1] != $temp[2] && $temp[2] == $temp[3] && $temp[3] == $temp[4]) {
		 	$value = $temp[2] * $temp[3] * $temp[4];
			return '{"type":"sandaier","value":"'.$value.'"}';
		 } else {
		 	return false;
		 }
	} else {
		return false;
	}
}

//是不是顺子
function isShunzi($temp) {

	if (count($temp) < 5) {
		return false;
	}
	sort($temp);
	$value = 0;
	for ($i = 0; $i < count($temp) - 1; $i++) {
		if ($temp[$i+1] - $temp[$i] != 1) {
			return false;
		}
		$value = $value + $temp[$i];
	}

	return '{"type":"shunzi","value":"'.$value.'"}';
}

//是不是连对
function isLiandui($temp) {
	sort($temp);

	if (count($temp) < 6 || count($temp) % 2 != 0) {
		return false;
	}

	for ($i = 0; $i < count($temp) - 1; $i = $i + 2) {
		if ($temp[$i] != $temp[$i+1]) {
			return false;
		}

		if ($i < count($temp) - 2) {
			if ($temp[$i] - $temp[$i+2] != -1) {
				return false;
			}
		}
	}

	$value = 0;
	for ($i = count($temp) - 1; $i >= 0; $i--) {
		$value = $temp[$i] + $value;
	}

	return '{"type":"liandui","value":"'.$value.'"}';
}

//是不是飞机带单
function isFeijiDaiDan($temp) {
	if (count($temp) < 8) {
		return false;
	}
	$arrs = array_count_values($temp);
	$list = [];

	foreach ($arrs as $k => $v) {
		if ($v == 3) {
			$list[] = $k;
		}
	}

	sort($list);
	$value = array_product($list);
	for ($i=0; $i < count($list) - 1; $i++) { 
		if ($list[$i] - $list[$i + 1] != -1) {
			return false;
		}
	}

	$pokers = count($list) * 3 + count($list);

	if ($pokers != count($temp)) {
		return false;
	}

	return '{"type":"feijidaidan","value":"'.$value.'"}';
}

//是不是飞机带双
function isFeijiDaiShuang($temp) {
	if (count($temp) < 8) {
		return false;
	}
	$arrs = array_count_values($temp);
	$list = [];

	foreach ($arrs as $k => $v) {
		if ($v == 3) {
			$list[] = $k;
		}
	}

	sort($list);
	$value = array_product($list);
	for ($i=0; $i < count($list) - 1; $i++) { 
		if ($list[$i] - $list[$i + 1] != -1) {
			return false;
		}
	}

	$pokers = count($list) * 3 + count($list) * 2;

	if ($pokers != count($temp)) {
		return false;
	}

	$list = [];
	foreach ($arrs as $k => $v) {
		if ($v == 2) {
			$list[] = $k;
		}
	}

	$pokers = count($list);
	if (count($list) != $pokers) {
		return false;
	}

	return '{"type":"feijidaishuang","value":"'.$value.'"}';
}

//是不是飞机不带
function isFeijiBuDai($temp) {
	sort($temp);
	if (count($temp) % 3 != 0 || count($temp) < 3) {
		return false;
	} else {
		$value = 0;
		$index = [];
		for ($i = 0; $i + 2 < count($temp); $i = $i + 3) {
			if ($i != count($temp)) {
				if (!isSan([$temp[$i],$temp[$i+1],$temp[$i+2]])) {
					return false;
				}
				$value = $value + $temp[$i] + $temp[$i + 1] + $temp[$i+2];
				$index[] = $temp[$i];
			}
		}
		sort($index);
		for ($i=0; $i < count($index) - 1; $i++) { 
			if ($index[$i] - $index[$i + 1] != -1) {
				return false;
			}
		}

		return '{"type":"feijibudai","value":"'.$value.'"}';
	}
}

//是不是四带一
function isSiDaiYi($temp) {
	sort($temp);
	if (count($temp) == 5 && $temp[0] == $temp[1] && $temp[1] == $temp[2] && $temp[2] == $temp[3]) {
		$value = $temp[0] + $temp[1] + $temp[2] + $temp[3];
		return '{"type":"sidaiyi","value":"'.$value.'"}';
	} else if (count($temp) == 5 && $temp[1] == $temp[2] && $temp[2] == $temp[3] && $temp[3] == $temp[4]) {
		$value = $temp[1] + $temp[2] + $temp[3] + $temp[4];
		return '{"type":"sidaiyi","value":"'.$value.'"}';
	} else {
		return false;
	}

}


//是不是四带二
function isSiDaiEr($temp) {
	sort($temp);
	if (count($temp) == 6 && $temp[0] == $temp[1] && $temp[1] == $temp[2] && $temp[2] == $temp[3]) {
		$value = $temp[0] + $temp[1] + $temp[2] + $temp[3];
		return '{"type":"sidaier","value":"'.$value.'"}';
	} else if (count($temp) == 6 && $temp[1] == $temp[2] && $temp[2] == $temp[3] && $temp[3] == $temp[4]) {
		$value = $temp[2] + $temp[3] + $temp[4] + $temp[5];
		return '{"type":"sidaier","value":"'.$value.'"}';
	} else {
		return false;
	}
}

//检测牌型
function checkpokers($temp) {

	if (empty($temp)) {
		return false;
	}
	
	if (isDan($temp)) {
		return isDan($temp);
	} else if (isDui($temp)) {
		return isDui($temp);
	} else if (isHuojian($temp)) {
		return isHuojian($temp);
	} else if (isSan($temp)) {
		return isSan($temp);
	} else if (isZha($temp)) {
		return isZha($temp);
	} else if (isSandaiyi($temp)) {
		return isSandaiyi($temp);
	} else if (isShunzi($temp)) {
		return isShunzi($temp);
	} else if (isLiandui($temp)) {
		return isLiandui($temp);
	} else if (isFeijiBuDai($temp)) {
		return isFeijiBuDai($temp);
	} else if (isSiDaiYi($temp)) {
		return isSiDaiYi($temp);
	} else if (isSiDaiEr($temp)) {
		return isSiDaiEr($temp);
	} else if (isSandaiEr($temp)) {
		return isSandaiEr($temp);
	} else if (isFeijiDaiDan($temp)) {
		return isFeijiDaiDan($temp);
	} else if (isFeijiDaiShuang($temp)){
		return isFeijiDaiShuang($temp);
	} else {
		return false;
	}
	
}

//检测牌的大小
function checkdaxiao($round_type, $res)
{
	if ($round_type->type == 'huojian') {
		return true;
	}

	if ($res->type == 'zhadan') {
		if ($round_type->type == 'huojian') {
			return false;
		} else {
			return true;
		}
	}

	if ($round_type->type == $res->type && $res->value > $round_type->value) {
		return true;
	}

	return false;
}