1. 程式人生 > >PHP使用演算法求出最大同花順

PHP使用演算法求出最大同花順

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]