php 实现扑克牌比大小

时间: 2024-02-04 17:03:20 浏览: 26
好的,我可以为您提供一个更完整的 PHP 扑克牌比大小的代码示例: ```php /** * 将扑克牌字符串转换为数组 * @param string $cardsStr 扑克牌字符串,如 "10H 9D AS KC" * @return array 扑克牌数组,如 array("10H", "9D", "AS", "KC") */ function convertCardsToArray($cardsStr) { $cards = explode(" ", $cardsStr); return $cards; } /** * 获取扑克牌的点数 * @param string $card 扑克牌,如 "10H" * @return int 扑克牌点数,如 10 */ function getCardValue($card) { $cardValues = array( 'A' => 14, 'K' => 13, 'Q' => 12, 'J' => 11, '10' => 10, '9' => 9, '8' => 8, '7' => 7, '6' => 6, '5' => 5, '4' => 4, '3' => 3, '2' => 2 ); return $cardValues[$card[0]]; } /** * 判断扑克牌是否为同花 * @param array $cards 扑克牌数组 * @return bool 是否为同花 */ function isFlush($cards) { $suits = array(); foreach ($cards as $card) { $suits[] = $card[1]; } return count(array_unique($suits)) == 1; } /** * 判断扑克牌是否为顺子 * @param array $cards 扑克牌数组 * @return bool 是否为顺子 */ function isStraight($cards) { $cardValues = array(); foreach ($cards as $card) { $cardValues[] = getCardValue($card); } sort($cardValues); $minValue = $cardValues[0]; for ($i = 1; $i < count($cardValues); $i++) { if ($cardValues[$i] != $minValue + $i) { return false; } } return true; } /** * 获取扑克牌的组合类型 * @param array $cards 扑克牌数组 * @return string 组合类型,如 "同花顺"、"四条"、"葫芦"、"同花"、"顺子"、"三条"、"两对"、"一对"、"高牌" */ function getHandType($cards) { $cardCounts = array(); foreach ($cards as $card) { $value = getCardValue($card); if (!isset($cardCounts[$value])) { $cardCounts[$value] = 0; } $cardCounts[$value]++; } arsort($cardCounts); $cardValues = array_keys($cardCounts); $cardCounts = array_values($cardCounts); $maxCount = $cardCounts[0]; $secondCount = isset($cardCounts[1]) ? $cardCounts[1] : 0; $thirdCount = isset($cardCounts[2]) ? $cardCounts[2] : 0; $fourthCount = isset($cardCounts[3]) ? $cardCounts[3] : 0; $fifthCount = isset($cardCounts[4]) ? $cardCounts[4] : 0; $isFlush = isFlush($cards); $isStraight = isStraight($cards); if ($isFlush && $isStraight) { return "同花顺"; } elseif ($maxCount == 4) { return "四条"; } elseif ($maxCount == 3 && $secondCount == 2) { return "葫芦"; } elseif ($isFlush) { return "同花"; } elseif ($isStraight) { return "顺子"; } elseif ($maxCount == 3) { return "三条"; } elseif ($maxCount == 2 && $secondCount == 2) { return "两对"; } elseif ($maxCount == 2) { return "一对"; } else { return "高牌"; } } /** * 比较两手扑克牌的大小 * @param array $hand1 手牌1,如 array("10H", "9D", "AS", "KC") * @param array $hand2 手牌2,如 array("10H", "9D", "AS", "KC") * @return int 比较结果,1 表示手牌1大,-1 表示手牌2大,0 表示平局 */ function compareHands($hand1, $hand2) { $hand1Type = getHandType($hand1); $hand2Type = getHandType($hand2); if ($hand1Type != $hand2Type) { $handTypes = array( "高牌" => 1, "一对" => 2, "两对" => 3, "三条" => 4, "顺子" => 5, "同花" => 6, "葫芦" => 7, "四条" => 8, "同花顺" => 9 ); return $handTypes[$hand1Type] > $handTypes[$hand2Type] ? 1 : -1; } else { $cardValues1 = array(); $cardValues2 = array(); foreach ($hand1 as $card) { $cardValues1[] = getCardValue($card); } foreach ($hand2 as $card) { $cardValues2[] = getCardValue($card); } rsort($cardValues1); rsort($cardValues2); for ($i = 0; $i < count($cardValues1); $i++) { if ($cardValues1[$i] > $cardValues2[$i]) { return 1; } elseif ($cardValues1[$i] < $cardValues2[$i]) { return -1; } } return 0; } } // 示例用法 $hand1 = convertCardsToArray("10H 9D AS KC"); $hand2 = convertCardsToArray("JD QS KH AC"); $result = compareHands($hand1, $hand2); if ($result == 1) { echo "手牌1大"; } elseif ($result == -1) { echo "手牌2大"; } else { echo "平局"; } ``` 这个示例代码中,我们实现了扑克牌字符串到数组的转换、获取扑克牌点数、判断扑克牌是否为同花或顺子、获取扑克牌的组合类型、比较两手扑克牌大小的功能。您可以通过调用这些函数来完成扑克牌比大小的操作。需要注意的是,这个示例代码只考虑了两手牌的比较,如果您需要比较多手牌,需要进行相应的扩展。

相关推荐

最新推荐

recommend-type

C语言实现简易扑克牌游戏

主要为大家详细介绍了C语言实现简易扑克牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言实现扑克牌计算24点

主要为大家详细介绍了C语言如何实现扑克牌计算24点,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

java扑克牌游戏开发课设

扑克牌游戏是一款受人喜欢的休闲游戏,大多数电脑上都装有这种游戏,很多人都玩过这种扑克牌游戏,都熟悉这种游戏的功能,我所做的这种扑克牌游戏开发理念是基于电脑自带的蜘蛛纸牌游戏,利用java语言实现了蜘蛛纸牌...
recommend-type

24点游戏 数据结构 4张扑克牌

由系统随机生成4张扑克牌,用户利用扑克牌的数字及运算符号“+”、“—”、“*”、“/”及括号“(”和“)”从键盘上输入一个计算表达式,系统运行后得出计算结果,如果结果等于24,则显示“Congratulation!...
recommend-type

埃森哲制药企业数字化转型项目顶层规划方案glq.pptx

埃森哲制药企业数字化转型项目顶层规划方案glq.pptx
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。