PHP使用演算法求出最大同花順
阿新 • • 發佈:2018-11-08
PHP使用演算法求出最大同花順
<?php
// $poker[0] 撲克牌花色 1~4 代表黑桃 黑桃 梅花 方塊
// $poker[1] 撲克牌數字 1~13 代表1~10 J Q K
$poker = array (
0 =>
array (
0 => 1,
1 => 2,
2 => 1,
3 => 4,
4 => 1,
5 => 3,
6 => 2
),
1 =>
array (
0 => 1,
1 => 6,
2 => 9,
3 => 10,
4 => 11,
5 => 12,
6 => 13
)
);
$max_flush_count = 7;
// var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[5,6,7,8,9,10,11]];//7,8,9,10,11
var_dump(get_straight_flush($poker,$max_flush_count ));
$poker = [[1,1,1,1,1,1,1],[5,6,7,8,9,10,12]];//678910
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[3,4,7,8,9,10,11]];//7,8,9,10,11
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[2,4,5,6,7,8,10]];//4,5,6,7,8,
var_dump(get_straight_flush ($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1,1],[2,4,5,6,7,8,11]];//4,5,6,7,8,
var_dump(get_straight_flush($poker,$max_flush_count));
$max_flush_count = 6;
$poker = [[1,1,1,1,1,1],[6,7,8,9,10,11]];//7,8,9,10,11
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1],[6,7,8,9,10,12]];//6,7,8,9,10
var_dump(get_straight_flush($poker,$max_flush_count));
$poker = [[1,1,1,1,1,1],[5,7,8,9,10,11]];//7,8,9,10,11
var_dump(get_straight_flush($poker,$max_flush_count));
/**
* [get_straight_flush 統計出同花順]
* @param [type] $result_poker [玩家撲克牌]
* @param [type] $max_flush_count [最大同花數量]
*/
function get_straight_flush($result_poker,$max_flush_count)
{
// 同花大順 10
// 同花順 9
// 同花 6
// 順子 5
$king = [10,11,12,13,1];
$res = array_intersect($king,$result_poker[1]);
// var_dump($res);exit;
if(count($res) == 5){
$poker_level = 10;
$result_poker[1] = $king;
$result_poker[0][] = $result_poker[0][0];
unset($result_poker[0][0]);
unset($result_poker[0][1]);
unset($result_poker[0][2]);
}else{
$sign = 0;
foreach ($result_poker[1] as $k => $v) {
if($k+1 < $max_flush_count){
if($v+1 == $result_poker[1][$k+1]){
$sign++;
// var_dump($v);
// var_dump($k);
if($sign == 4){
if($max_flush_count == 5){
//5牌同花大順
$poker_level = 9;//牌的等級
if($result_poker[1][0] == 1){
$poker_level = 10;//同花大順
}
}else if($max_flush_count == 6){
// var_dump($sign);
if($result_poker[1][$k-3] == 1){
$poker_level = 10;//同花大順
break;
}
if($sign == 4){
//有5牌同花大順 看第6牌 是不是同花順
//5 7,8,9,10,11
if($k == 4){
//最後一個牌
// if() K A
unset($result_poker[0][0]);
unset($result_poker[1][0]);
}else{
unset($result_poker[0][$max_flush_count-1]);
unset($result_poker[1][$max_flush_count-1]);
}
$poker_level = 9;//牌的等級
break;
}
}else{
// var_dump($result_poker[1]);
if($result_poker[1][0] == 1){
$poker_level = 10;//同花大順
break;
}
if($sign == 4){
// var_dump($k);
//有5牌同花大順 看第6,7牌 是不是同花順
if($k+2 == $max_flush_count){
//最後一個牌
// var_dump($k);
unset($result_poker[0][0]);
unset($result_poker[1][0]);
unset($result_poker[0][1]);
unset($result_poker[1][1]);
}else if($k+3 == $max_flush_count){
//第6張牌了 有可能和第7張是順子
// || $v+2 == $result_poker[1][$k+2]
if(!empty($result_poker[1][$k+3]) && $v+3 == $result_poker[1][$k+3]){
unset($result_poker[0][0]);
unset($result_poker[1][0]);
unset($result_poker[0][1]);
unset($result_poker[1][1]);
}else{
unset($result_poker[0][0]);
unset($result_poker[1][0]);
unset($result_poker[0][$max_flush_count-1]);
unset($result_poker[1][$max_flush_count-1]);
}
}else{
// 12 45678
// 最後一張配成順子
if($k == 5){
// 3~7順
unset($result_poker[0][0]);
unset($result_poker[1][0]);
unset($result_poker[0][1]);
unset($result_poker[1][1]);
}else if($k == 4){
//1 34567 8
//倒數第二張是順子
//第5張牌時 有可能和第7||6,7張是順子
if($v+1 == $result_poker[1][$k+1]){
// 1~56順
if($v+2 == $result_poker[1][$k+2]){
// 1~567順
unset($result_poker[0][0]);
unset($result_poker[1][0]);
unset($result_poker[0][1]);
unset($result_poker[1][1]);
}else{
// 1~56順
unset($result_poker[0][0]);
unset($result_poker[1][0]);
unset($result_poker[0][$max_flush_count-1]);
unset($result_poker[1][$max_flush_count-1]);
}
}else{
// var_dump(333);
// 1~5順
unset($result_poker[0][$max_flush_count-1]);
unset($result_poker[1][$max_flush_count-1]);
unset($result_poker[0][$max_flush_count-2]);
unset($result_poker[1][$max_flush_count-2]);
}
}else{
var_dump($k);
// var_dump($k);
var_dump($v);
// 1~5、6、7
// 5,6,7,8,9,10,12
if($v+3 == $result_poker[1][$k+3]){
var_dump(44);
unset($result_poker[0][0]);
unset($result_poker[1][0]);
unset($result_poker[0][1]);
unset($result_poker[1][1]);
}else if($v+2 == $result_poker[1][$k+2]){
unset($result_poker[0][0]);
unset($result_poker[1][0]);
unset($result_poker[0][$max_flush_count-1]);
unset($result_poker[1][$max_flush_count-1]);
}else{
unset($result_poker[0][$max_flush_count-1]);
unset($result_poker[1][$max_flush_count-1]);
unset($result_poker[0][$max_flush_count-2]);
unset($result_poker[1][$max_flush_count-2]);
}
}
// var_dump($v);exit;
}
$poker_level = 9;//牌的等級
break;
}
}
}
// var_dump($sign);
}else{
if($sign < 4){
$sign = 0;
$poker_level = 6;//牌的等級
}
}
}
}
}
if($sign < 4){
// var_dump($result_poker);exit;
if($result_poker[1][0] == 1){
unset($result_poker[0][1]