用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"; // 输出:顺子
相关推荐
@大迁世界5 小时前
Firefox 本地模式:localhost 再见了 ?
前端·架构
米米商聊7 小时前
同名附件为什么被 Map 覆盖?重复键与一对多索引
前端·javascript
ESDWAN8 小时前
SD-WAN 主备切换为什么仍然会断网?从检测机制到会话恢复分析
开发语言·php
echome8888 小时前
Python 异常处理:try、else、finally 的正确搭配
开发语言·前端·python·异常处理·编程技巧
时间的情敌8 小时前
OpenLayers 实战|Vue3 + OpenLayers 完整工程案例(加载天地图、要素、弹窗、绘制、WFS)
前端·openlayers
陈随易8 小时前
下载神器!Motrix 停更三年后重写回归
前端·后端·程序员
I Am a robert girl9 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
前端的日常9 小时前
一个人+AI做情侣食谱小程序,0 费用的服务器
前端·后端
计算机魔术师9 小时前
谷歌搜索广告踩刹车,AI广告成为救命稻草
前端
总要学点什么10 小时前
第81篇:数据可视化-PM2.5分布——让圆点的胖瘦替每座城市报出浓度
前端·信息可视化·echarts·cesium·空间分析