用PHP8实现斗地主游戏,实现三带一,三带二,四带二,顺子,王炸功能(第二集)

实现三带一,三带二,四带二,顺子,王炸功能逻辑

代码:

php 复制代码
class CardValidator {
	// 逻辑
	public function checkPokerType($cards) {
    	$counts = array_count_values($cards);
	    sort($cards);
	    $isStraight = true;
	    $isStraightFlush = true;
	    $isFourOfAKind = false;
	    $isFullHouse = false;
	    $isThreeOfAKind = false;
	    $isTwoPairs = false;
	    $isOnePair = false;
	    $isHighCard = true;

	    // 顺子判断
	    for ($i = 1; $i < count($cards); $i++) {
	        if ($cards[$i] != $cards[$i - 1] + 1) {
	            $isStraight = false;
	            break;
	        }
	    }
    
		if(count($cards) == 2 && in_array('小王',$cards) && in_array('大王',$cards)){
				return "王炸";
		}

	  // 四带二和王炸判断
	  if (count($counts) == 2) {
         $values = array_values($counts);
         if (in_array(4, $values) && in_array(2, $values)) {
            return "四带二";
         }        
	  }

     // 三带一/三带二判断
     if (count($counts) == 3) {
        $values = array_values($counts);
        if (in_array(3, $values)) {
            if (in_array(1, $values)) {
                return "三带一";
            } elseif (in_array(2, $values)) {
                return "三带二";
            }
        }
    }

    // 其他牌型判断
    if (count($counts) == 4) {
        $values = array_values($counts);
        if (in_array(2, $values) && in_array(2, $values)) {
            $isTwoPairs = true;
        } elseif (in_array(2, $values)) {
            $isOnePair = true;
        }
    }

    if ($isStraight) {
        return "顺子";
    }

    return "牌选择错误";
  }
}

// 测试
$cards0 = ['大王', '小王']; // 王炸
$cards1 = [3, 3, 3, 4, 5]; // 三带一
$cards2 = [3, 3, 3, 4, 4]; // 三带二
$cards3 = [3, 3, 3, 3, 5, 5]; // 四带二
$cards4 = [3, 4, 5, 6, 7]; // 顺子

$card = new CardValidator();
echo card->checkPokerType($cards0) . "\n"; // 输出:王炸
echo card->checkPokerType($cards1) . "\n"; // 输出:三带一
echo card->checkPokerType($cards2) . "\n"; // 输出:三带二
echo card->checkPokerType($cards3) . "\n"; // 输出:四带二
echo card->checkPokerType($cards4) . "\n"; // 输出:顺子
相关推荐
Mintopia12 小时前
促成高端技术方案形成的关键要素与实践路径
前端
JaguarJack12 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo13 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
摸鱼的春哥14 小时前
春哥的Agent通关秘籍13:实现RAG查询
前端·javascript·后端
明月_清风14 小时前
滚动锁定:用户向上翻看历史时,如何阻止 AI 新消息把它“顶”下去?
前端·javascript
明月_清风14 小时前
当高阶函数遇到 AI:如何自动化生成业务层面的逻辑拦截器
前端·javascript·函数式编程
moshuying1 天前
别让AI焦虑,偷走你本该有的底气
前端·人工智能
GIS之路1 天前
ArcPy,一个基于 Python 的 GIS 开发库简介
前端
可夫小子1 天前
OpenClaw基础-为什么会有两个端口
前端
喝拿铁写前端1 天前
Dify 构建 FE 工作流:前端团队可复用 AI 工作流实战
前端·人工智能