那个时候闲来无事,随手写了一个斗地主的逻辑

<?php/*** Created by JetBrains PhpStorm.* User: Administrator* Date: 14-7-30* Time: 下午3:49* To change this template use File | Settings | File Templates.*/class DemoAction extends Action{private $order = array();function _initialize(){$this->rule();}function index(){$array = $this->getAllCard();shuffle($array);$i = 0;//分牌foreach($array as $val){$j = ++$i%3;$result[$j][] = $val;}//三张底牌$other = array();$other[0] = array_pop($result[0]);$other[1] = array_pop($result[1]);$other[2] = array_pop($result[2]);//print_r($result[0]);$result2[0] = $this->sort($result[0]);$res = $this->insert_three($result2[0],$other);print_r($res);die;$result2[1] = $this->sort($result[1]);$result2[2] = $this->sort($result[2]);print_r($result2);print_r($other);}//排序function sort($cards){$temp = array();foreach($cards as $k=>$v){$temp[$v['num']][] = $k;}$temp2 = array();foreach($this->order as $val){$temp[$val] && $temp2[] = $temp[$val];}$temp3 = array();foreach($temp2 as $k2=>$v2){foreach($v2 as $k3=>$v3){$temp3[] = $cards[$v3];}}return $temp3;}//抢地主之后,将底牌插入序列function insert_three($array,$three){foreach($three as $val){$temp[$val['num']][] = $val['color'];}$nums = array_keys($temp);$new_array = array();$insert1 = true;$insert2 = true;$insert3 = true;foreach($array as $key2=>$val2){$new_array[] = $val2;$next_key = $key2+1;if($insert1){$begin_compare = $this->compare_num($val2['num'],$nums[0]);$end_compare = $this->compare_num($nums[0],$array[$next_key]['num']);if($begin_compare<=0 && $end_compare<=0){foreach($temp[$nums[0]] as $color){$new_array[] = array('num'=>$nums[0],'color'=>$color);}unset($nums[0]);$insert1 = false;}}if($nums[1] && $insert2){$begin_compare = $this->compare_num($val2['num'],$nums[1]);$end_compare = $this->compare_num($nums[1],$array[$next_key]['num']);if($begin_compare<=0 && $end_compare<=0){foreach($temp[$nums[1]] as $color){$new_array[] = array('num'=>$nums[1],'color'=>$color);}unset($nums[1]);$insert2 = false;}}if($nums[2] && $insert3){$begin_compare = $this->compare_num($val2['num'],$nums[2]);$end_compare = $this->compare_num($nums[2],$array[$next_key]['num']);if($begin_compare<=0 && $end_compare<=0){foreach($temp[$nums[2]] as $color){$new_array[] = array('num'=>$nums[2],'color'=>$color);}unset($nums[2]);$insert3 = false;}}}$last_count = count($nums);if($last_count!=0){if($last_count==1){$this_num = current($nums);foreach($temp[$this_num] as $color){$new_array[] = array('num'=>$this_num,'color'=>$color);}}else{sort($nums);foreach($nums as $k=>$v){foreach($temp[$v] as $color){$new_array[] = array('num'=>$v,'color'=>$color);}}}}return $new_array;}function getAllCard(){return array(array("num"=>1,"color"=>1),array("num"=>1,"color"=>2),array("num"=>1,"color"=>3),array("num"=>1,"color"=>4),array("num"=>2,"color"=>1),array("num"=>2,"color"=>2),array("num"=>2,"color"=>3),array("num"=>2,"color"=>4),array("num"=>3,"color"=>1),array("num"=>3,"color"=>2),array("num"=>3,"color"=>3),array("num"=>3,"color"=>4),array("num"=>4,"color"=>1),array("num"=>4,"color"=>2),array("num"=>4,"color"=>3),array("num"=>4,"color"=>4),array("num"=>5,"color"=>1),array("num"=>5,"color"=>2),array("num"=>5,"color"=>3),array("num"=>5,"color"=>4),array("num"=>6,"color"=>1),array("num"=>6,"color"=>2),array("num"=>6,"color"=>3),array("num"=>6,"color"=>4),array("num"=>7,"color"=>1),array("num"=>7,"color"=>2),array("num"=>7,"color"=>3),array("num"=>7,"color"=>4),array("num"=>8,"color"=>1),array("num"=>8,"color"=>2),array("num"=>8,"color"=>3),array("num"=>8,"color"=>4),array("num"=>9,"color"=>1),array("num"=>9,"color"=>2),array("num"=>9,"color"=>3),array("num"=>9,"color"=>4),array("num"=>10,"color"=>1),array("num"=>10,"color"=>2),array("num"=>10,"color"=>3),array("num"=>10,"color"=>4),array("num"=>11,"color"=>1),array("num"=>11,"color"=>2),array("num"=>11,"color"=>3),array("num"=>11,"color"=>4),array("num"=>12,"color"=>1),array("num"=>12,"color"=>2),array("num"=>12,"color"=>3),array("num"=>12,"color"=>4),array("num"=>13,"color"=>1),array("num"=>13,"color"=>2),array("num"=>13,"color"=>3),array("num"=>13,"color"=>4),array("num"=>14,"color"=>1),array("num"=>14,"color"=>2),);}function rule(){$this->order = array(3,4,5,6,7,8,9,10,11,12,13,1,2,14);}//根据规则比较牌的大小function compare_num($num1,$num2){if($num1===false)return false;$index1 = array_search($num1,$this->order);$index2 = array_search($num2,$this->order);if($index1>$index2)return 1;if($index1<$index2)return -1;return 0;}//炸弹function is_bomb($cards){$count = $cards[0]['num']==14?2:4;if(count($cards)!=$count) return false;if(!empty($cards[0]['num'])&& $cards[0]['num']==$cards[1]['num']&& $cards[0]['num']==$cards[2]['num']&& $cards[0]['num']==$cards[3]['num']){return true;}return false;}//炸弹KOfunction hit_bomb($initiative,$passive){if( $this->is_bomb($initiative)&& $this->is_bomb($passive)){if($this->compare_num($initiative[0]['num'],$passive[0]['num'])==1){return true;}else{return false;}}return null;}//单牌$cards = array([0]=array(....));function is_one($cards){if(count($cards)!=1)return false;return true;}//单牌KO $passive是单牌function hit_one($initiative,$passive){if($this->is_one($initiative)){if($this->compare_num($initiative[0]['num'],$passive[0]['num'])==1){return true;}}elseif($this->is_bomb($initiative))return true;}//对牌function is_twins($cards){if(count($cards)!=2)return false;return (!empty($cards[0]['num']) && $cards[0]['num']==$cards[1]['num'] && $cards[0]['num']!=14);}/*** 对牌KO,要求$passive必须是is_twins* @param $initiative主动* @param $passive被动*/function hit_twins($initiative,$passive){//if($this->is_twins($passive)){if($this->is_twins($initiative)){if($this->compare_num($initiative[0]['num'],$passive[0]['num'])==1){return true;}}elseif($this->is_bomb($initiative))return true;//}//return null;
}//三个Xfunction is_three($cards){if(count($cards)!=3)return false;return (!empty($cards[0]['num']) && $cards[0]['num']==$cards[1]['num'] && $cards[0]['num']==$cards[2]['num']);}//要求$passive必须是is_threefunction hit_three($initiative,$passive){//if($this->is_three($passive)){if($this->is_three($initiative)){if($this->compare_num($initiative[0]['num'],$passive[0]['num'])==1){return true;}}elseif($this->is_bomb($initiative))return true;//}//return null;
}//三带一function is_three_one($cards){if(count($cards)!=4)return false;$tongji = array();foreach($cards as $ca){++$tongji[$ca['num']];}if(count($tongji)!=2)return false;return array_search(3,$tongji);}//$passive_num 由is_three_one计算得来function hit_three_one($initiative,$passive_num){if($this->compare_num($this->is_three_one($initiative),$passive_num)==1){return true;}elseif($this->is_bomb($initiative))return true;}//三代二function is_three_two($cards){if(count($cards)!=5)return false;$tongji = array();foreach($cards as $ca){++$tongji[$ca['num']];}if(count($tongji)!=2)return false;if(array_search(2,$tongji)===false)return false;return array_search(3,$tongji);}//$passive_num 由is_three_two计算得来function hit_three_two($initiative,$passive_num){if($this->compare_num($this->is_three_two($initiative),$passive_num)==1){return true;}elseif($this->is_bomb($initiative))return true;}//四带二function is_four_two($cards){if(count($cards)!=6)return false;$tongji = array();foreach($cards as $ca){++$tongji[$ca['num']];}if(count($tongji)!=2)return false;if(array_search(2,$tongji)===false)return false;return array_search(4,$tongji);}//$passive_num 由is_four_two计算得来function hit_four_two($initiative,$passive_num){if($this->is_bomb($initiative))return true;if($this->compare_num($this->is_four_two($initiative),$passive_num)==1){return true;}}//顺子function is_sequence($cards){$count = count($cards);if($count<5)return false;$nums = array();foreach($cards as $ca){//小二,王都不算顺子牌if(in_array($ca['num'],array(2,14)))return false;$nums[] = $ca['num'];}$min = min($nums);if($min==1)return false;$index = array_search($min,$this->rule);for($i=1;$i<$count;++$i)if(!in_array($this->rule[++$index],$nums))return false;return $min;}//$passive_num 由is_sequence计算得来function hit_sequence($initiative,$passive_num){if($this->is_bomb($initiative))return true;if($this->compare_num($this->is_sequence($initiative),$passive_num)==1){return true;}}//多联对function is_more_twins($cards){$count = count($cards);if($count<6 || $count%2==1)return false;$nums = $tongji = array();foreach($cards as $ca){//小二,王都不算顺子牌if(in_array($ca['num'],array(2,14)))return false;$nums[] = $ca['num'];++$tongji[$ca['num']];}foreach($tongji as $v){if($v!=2)return false;}$min = min($nums);if($min==1)return false;$index = array_search($min,$this->rule);$count = $count/2;for($i=1;$i<$count;++$i)if(!in_array($this->rule[++$index],$nums))return false;return $min;}//$passive_num 由is_more_twins计算得来function hit_more_twins($initiative,$passive_num){if($this->is_bomb($initiative))return true;if($this->compare_num($this->is_more_twins($initiative),$passive_num)==1){return true;}}//飞机function is_plan($cards){$count = count($cards);if($count<6)return false;$nums = $tongji = array();foreach($cards as $ca){//王都不算飞机牌if(in_array($ca['num'],array(14)))return false;$nums[] = $ca['num'];++$tongji[$ca['num']];}$main = array();$append_count = 0;foreach($tongji as $k=>$v){if($v>3)return false;elseif($v==3)$main[] = $k;else++$append_count;}$main_count = count($main);if($main_count!=$append_count)return false;$min = min($main);$index = array_search($min,$this->rule);$count = $count/2;for($i=1;$i<$count;++$i)if(!in_array($this->rule[++$index],$nums))return false;return $min;}function hit_plan($initiative,$passive_num){if($this->is_bomb($initiative))return true;if($this->compare_num($this->is_plan($initiative),$passive_num)==1){return true;}}}

现在看来,当时还是挺不规范的

转载于:https://www.cnblogs.com/tu6ge/p/5547654.html

2014年七月写过的代码,现在看来,还有待改进呀相关推荐

  1. JVM - 写了这么多年代码,你还不知道new对象背后的逻辑?

    文章目录 对象创建流程 [类加载检查] [分配内存] 内存划分的两种方式 解决分配内存并发问题的两种方式 [初始化] [设置对象头] 对象的组成 对象头的两部分组成 [执行init方法] 总结一下 对 ...

  2. 关于代理转发,代码如下具体还有待理解

    2019独角兽企业重金招聘Python工程师标准>>> URLConnection conn;// 使用代理InetSocketAddress addr = new InetSock ...

  3. 宁愿写两遍代码,也不用C++跨iOS、Android平台开发?

    作者丨赵钰莹.小智 Dropbox 最近宣布将放弃用 C++ 编写跨 iOS.Android 平台代码,转而使用各平台的原生框架(Swift/Kotlin),理由是代码共享相关的隐藏成本太高.有趣的是 ...

  4. 2014年华为上机题及代码

    http://blog.csdn.net/dalianmaoblog/article/details/11477997 题目来源于http://blog.csdn.net/hackbuteer1/ar ...

  5. 操作系统大作业 基于Linux的模拟进程调度算法 运用c++语言编程 在VMware虚拟机里 centos 亲自写亲自测试 代码 说明书

    发布文章 博文管理我的博客退出 Trash Temp 操作系统大作业 基于Linux的模拟进程调度算法 运用c++语言编程 在VMware虚拟机里 centos 亲自写亲自测试 代码 说明书 @[TO ...

  6. 写好 Python 代码的几条原则

    程序设计的好与坏,早在我们青葱岁月时就接触过了,只是那是并不知道这竟如此重要.能够立即改善程序设计.写出"好"代码的知识有以下几点: •面向对象五个基本原则: •常见的三种架构: ...

  7. 要写好业务代码,也没这么简单!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://blog.csdn.net/new_com/article/details/108399421 为什么要写好业 ...

  8. 哈哈哈,这个教人写出烂代码的项目在 GitHub 上火了...

    如果说到什么是好代码,我们肯定都能说出一堆规则,例如使用一致的格式和缩进.使用清晰的变量名和方法名.在必要时提供文档与注释.不要过度精简代码等等. 但是对于什么是烂代码,你有比较清晰的认识吗? 在 G ...

  9. 你只写了两行代码,为什么要花两天时间?

    原文 | https://www.mrlacey.com 作者 | Matt Lacey 我花了两天时间,写了两行代码. 对于真正的程序员来看,这可能是一个合理的事情,但背后不理解程序员的人,往往会做 ...

最新文章

  1. 在Paddle中利用AlexNet测试CIFAR10数据集合
  2. 真人3D Avatar
  3. Android N混合编译与对热补丁影响深度解析
  4. python伪装浏览器https_python伪造HTTP-REFERER
  5. JAVA基础加强笔记
  6. Perl BEGIN块和END块
  7. java 无名类做参数_说说你知道的几种主要的JVM参数
  8. 电热水器工作过程 c语言,热水器工作流程图
  9. 深入体验php项目开发.pdf,《深入体验PHP项目开发》.(谭贞军).[PDF]
  10. hive 修改cluster by算法_Hive基础之导出数据
  11. html文件在echarts中,老师,echarts中所有的案例都是.html属性的文件吗?
  12. System.Data.SQLite兼容32位和64位问题
  13. java 导出Excel 转图片地址为图片
  14. 软件测试DAY3-执行用例
  15. mysql左联和全等_Mysql7种join连接及mysql一些知识点-Go语言中文社区
  16. MBR“主引导记录”的局限性与GPT GUID分区表的优势
  17. 2020-10-23
  18. MySQL数据库简答题
  19. Windows11 输入法图标不见了
  20. React中input输入框中文输入的问题

热门文章

  1. JAVA实现链表中倒数第K个节点问题(《剑指offer》)
  2. News Break!沈向洋投资并出任美国版“今日头条”董事长
  3. 百度景鲲:AI交互正在吃掉旧产品边界,触达移动互联网盲区用户 | MEET2020
  4. GitHub热榜第一,标星近万:这个用Python做交互式图形的项目火了
  5. 回顾以前的线程安全的类
  6. JS编程建议——8:谨慎使用运算符(3)
  7. double free or corruption (fasttop)
  8. ASP.NET 2.0 - 如何把上传的文件保存到数据库字段 (转自章立民CnBlogs)
  9. python求三角形面积步骤_python算三角形面积
  10. 5G NGC — 关键技术 — MEC 边缘云