炸金花 php算法,200行代码搞定炸金花游戏(PHP版)
0 ) { //给出一个从小到大的顺序 if( fmod($dian[0], 14 ) >= fmod($value, 14) || fmod($value, 14) == 1 ) { //得到的牌面比数组第一张牌小时,放到数组前面 array_unshift( $dian, $value ); }else if ( fmod($dian[count($dian)-1], 14 ) <= fmod($value, 14) ){ //得到的牌面比数组最后一张牌大时,放到数组最后面 $dian[] = $value; }else { //除了以上情况之外,就是中间值 $dian[2] = $dian[1]; $dian[1] = $value; } }else $dian[] = $value; //echo '
'; $peice++; } $person[] = $dian; //将牌面存起来 $number++; } return $person; //返回所有玩家牌面 } //牌型,$card是一个含三张牌的数组 function cardName($card){ if( ! is_array( $card ) && count($card) == 3 ) return; $c[0] = fmod($card[0], 14); $c[1] = fmod($card[1], 14); $c[2] = fmod($card[2], 14); //三张版面 $t0 = ceil($card[0]/14); $t1 = ceil($card[1]/14); $t2 = ceil($card[2]/14); //三张版面的花色 if( $c[0] == $c[1] && $c[1] == $c[2] ) { return 6;//'豹子' }else if( $t0 == $t1 && $t1 == $t2 && ( ( $c[0]+1 == $c[1] && $c[1]+1 == $c[2] ) || ( $c[0] == 1 && $c[1] == 12&& $c[2] == 13) ) ){ return 5;//'顺金'; }else if( $t0 == $t1 && $t1 == $t2 ){ return 4;//'金花'; }else if( ( $c[0]+1 == $c[1] && $c[1]+1 == $c[2] ) || ( $c[0] == 1 && $c[1] == 12&& $c[2] == 13) ){ return 3;//'顺子'; }else if( $c[0] == $c[1] || $c[1] == $c[2] || $c[0] == $c[2] ){ return 2;//'对子'; }else if( $c[0] == 2 && $c[1] == 3 && $c[2] == 5 && ( $t0 != $t1 || $t1 != $t2 )){ return 1;//'特殊'; }else{ return 0;//'单张'; } //返回牌型:0单张,1特殊,2对子,3顺子,4金花,5顺金,6豹子 } //得到获胜牌 function maxCard($cards){ if( ! is_array( $cards ) && count( $cards ) == 2 ) return; $maxCardType = 0; $maxCardNumber = 1; $specialCard = false; $cardType = array(); foreach( $cards as $key=>$value ){ //得到当前最大牌型 $cardType[$key] = cardName($value); //当前牌型数组 if( $maxCardType == $cardType[$key] ) { //统计最大牌型个数 $maxCardNumber++; } if( $maxCardType < $cardType[$key] ) { //出现更大的牌型时更新最大牌型 $maxCardType = $cardType[$key]; $maxCardNumber = 1; } if( $maxCardType == 1 ) { //是否有特殊牌 $specialKey = $key; $specialCard = true; } } if($maxCardNumber == 1 && $maxCardType == 6 && $specialCard ) return $specialKey; //有一手豹子,且和特殊牌并存的时候,返回特殊牌的KEY if( $maxCardNumber == 1 && $maxCardType != 6 && !$specialCard ) return array_search( $maxCardType, $cardType ); //最大牌型只有一手,且不是豹子,也没有特殊牌,就返回这手牌的在数组中的KEY if( $maxCardNumber == 1 && $maxCardType == 1 && $specialCard ) $maxCardType = 0; //最大牌型只有一手,且为特殊牌,返回0(o单牌) if( $maxCardNumber == 1 && $maxCardType != 1 ) return array_search( $maxCardType, $cardType ); //除以上几种特殊情况之外的只有一手最大牌时,直接返回key $currentMaxCard = array(); foreach( $cardType as $key=>$value ){ if( $value != $maxCardType ) continue; //过滤牌型,只比较最大牌型 if( ! $currentMaxCard ) { //得到第一手要比较的版面 $currentMaxCard = $cards[$key]; continue; } $card = $cards[$key]; $c[0] = fmod($card[0], 14); $c[1] = fmod($card[1], 14); $c[2] = fmod($card[2], 14); $cardCMC = $currentMaxCard; $cCMC[0] = fmod($cardCMC[0], 14); $cCMC[1] = fmod($cardCMC[1], 14); $cCMC[2] = fmod($cardCMC[2], 14); switch($maxCardType){ //0单张,1特殊,2对子,3顺子,4金花,5顺金,6豹子 case 6: if( $c[0] == 1 || $cCMC[0] < $c[0] ) $currentMaxCard = $cards[$key]; break; case 2: if( $c[0] == $c[1] ) { $pairs = $c[0]; $single = $c[2]; }else if ( $c[0] == $c[2] ) { $pairs = $c[0]; $single = $c[1]; }else{ $pairs = $c[1]; $single = $c[0]; } if( $cCMC[0] == $cCMC[1] ) { $pairs2 = $cCMC[0]; $single2 = $cCMC[2]; }else if ( $cCMC[0] == $cCMC[2] ) { $pairs2 = $cCMC[0]; $single2 = $cCMC[1]; }else{ $pairs2 = $cCMC[1]; $single2 = $cCMC[0]; } if( $pairs == 1 && $pairs2 == 1 && $single >= $single2 ) $currentMaxCard = $cards[$key]; else if( $pairs == 1 && $pairs2 != 1) $currentMaxCard = $cards[$key]; else if( $pairs != 1 && $pairs2 != 1) { if ( ( $pairs > $pairs2 ) || ( $pairs == $pairs2 && ( $single >= $single2 || $single == 1 ) ) ) $currentMaxCard = $cards[$key]; } break; default: //0,3,4,5全部在默认中进行比较 if( $c[0] == 1 && $cCMC[0] == 1 ) { if ( ( $c[2] > $cCMC[2] ) || ( $c[2] == $cCMC[2] && $c[1] > $cCMC[1] ) ) $currentMaxCard = $cards[$key]; }else if( $c[0] == 1 && $cCMC[0] != 1 ) $currentMaxCard = $cards[$key]; else if( $c[0] != 1 && $cCMC[0] != 1){ if ( ( $c[2] > $cCMC[2] ) || ( $c[2] == $cCMC[2] && $c[1] > $cCMC[1] ) || ( $c[1] == $cCMC[1] && $c[0] >= $cCMC[0] ) ) $currentMaxCard = $cards[$key]; } } } return array_search( $currentMaxCard, $cards ); } //echo cardName(array(21,8,23)); echo ''; $player = deal(6); //$player = array(array(8,21,29), array(2,3,19), array(1,15,43) ); $max = maxCard($player); foreach( $player as $key=>$cards){ echo '
'; foreach( $cards as $value ){ echo '
'; } echo cardName($cards); if( $max == $key ) echo ' Winner!'; echo ''; // print_r($cards); } //echo maxCard(array(array(30,44,15), array(2,16,1) )); ?>
0单张,1特殊,2对子,3顺子,4金花,5顺金,6豹子
炸金花 php算法,200行代码搞定炸金花游戏(PHP版)相关推荐
- 200行代码搞定一个购物网站+电影站+APP
以前有一个朋友问我,说想做一个购物网站 ,电影站 ,需要APP 形式提供 . 问我一个星期能不能搞定,听了他的奇葩需求后,有点被耍的感觉,在普通人眼里 一个程序可能就是半天就做出来的东西. 后来仔细想 ...
- html中如何制作星空背景,HTML5网页制作200行代码搞定canvas星空背景连线
{getUnitName} {getLessonName} 敬请期待 免费 {getTaskName} 剩余观看时长:{watchLimitRemaining} 回放 {activityStartTi ...
- python做事件研究法_35行代码搞定事件研究法(上)
作者简介: 祝小宇,个人公众号:大猫的R语言课堂 这期大猫课堂将会教大家如何用35行R代码写出最有效率的事件研究法. 注意,本代码主要使用data.table完成,关于data.table包的相应知识 ...
- 35行代码搞定事件研究法(下)
作者简介: 祝小宇,个人公众号:大猫的R语言课堂 前文推送: 35行代码搞定事件研究法(上) Hello亲爱的小伙伴们,上期已经讲到如何对单一事件日计算超额收益,本期将会教大家如何针对多个股票多个事件 ...
- 万万想不到 10行代码搞定一个决策树
01决策树模拟实验 文章目录 01决策树模拟实验 要求 决策树简单介绍 搭建环境 产生数据集 划分训练集和测试集 生成决策树 Cross-Validation法 可视化决策树 10行代码搞定决策树 要 ...
- 35行代码搞定事件研究法(上)
作者简介: 祝小宇,个人公众号:大猫的R语言课堂 这期大猫课堂将会教大家如何用35行R代码写出最有效率的事件研究法. 注意,本代码主要使用data.table完成,关于data.table包的相应知识 ...
- python修改文件名称唯美_5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了...
原创:小dull鸟 python数据分析之禅 原文链接: 5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了mp.weixin.qq.com 有时候我们做数据可视化并 ...
- resnet50代码_13、SOTA论文实践-学习ResNet(80行代码搞定残差backbone网络)
0.论文 Camera Distance-aware Top-down Approach for 3D Multi-person Pose Estimation from a Single RGB I ...
- 国外stripe支付,超简单几行代码搞定
国外stripe支付,超简单几行代码搞定 海外的项目 需要stripe支付 很简单 几行代码 先加入依赖: compile 'com.stripe:stripe-android:6.1.2' 总共两种 ...
最新文章
- 十七、生产者消费者问题
- linux syslogd 源码,syslogd 详解二
- java商城项目性能调优_javaWEB项目性能调优
- 跨域失败 过滤器_Spring Boot 跨域过滤器(过滤器跨域问题)
- java中定义一个栈容器_Java 容器之 Connection栈队列及一些常用
- 敏捷开发般若敏捷系列之五:如何推广敏捷(中)(无寿者,回报,破我执)...
- 不得不爱开源 Wijmo jQuery 插件集(13)-【Tooltip】(附页面展示和源码)
- 解决 IDEA导入Eclipse项目出现的中文注释乱码问题
- forms Build中的触发器
- 最近做一个新闻类项目,用到调用新浪微博接口,经过研究测试整理步骤如下:先根据此内容获取App Key和Secret Key
- python输入一个三位数、输出它的逆序数值_c语言 从键盘输入一个三位数,输出该数的逆序数。...
- HMI智能座舱自动化测试软件
- 刀剑神域:突破界限I
- python colorbar刻度_python-如何添加Matplotlib Colorbar刻度
- 光衰高怎么办_发光顶角线使用起来方便吗?维护成本高吗?
- autosar arxml文件配置(四)
- linux7开放svn,CentOS 7 下SVN的安装及基础配置介绍
- Vue2.x - Vue Router
- html/css/javascript-编辑器
- 计算机在一个指令中的过程中,为从内存读取指令操作码,首先要将()的内容送到地址总线上