PHP使用算法求出最大同花顺

版权声明:gg原创,未经授权不得转载。 https://blog.csdn.net/qq_34965877/article/details/83150860

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]);
      unset($result_poker[1][1]);
      unset($result_poker[0][2]);
      unset($result_poker[1][2]);
    }else{
      unset($result_poker[0][0]);
      unset($result_poker[1][0]);
      unset($result_poker[0][1]);
      unset($result_poker[1][1]);
    }
  }
  return array(
    'poker_level' => $poker_level,
    'result_poker' => $result_poker
  );
}

猜你喜欢

转载自blog.csdn.net/qq_34965877/article/details/83150860