PHP牛牛游戏算法
<?php namespace frontend\business; class NiuNiuGameHelper
{ /**
* @param $card
* @return int 结果 -1 每牛; 0 牛牛; 1 - 9 牛一 到 牛九
*/
public static function JudgeCowCow($card)
{
if(!is_array($card) || count($card) !== 5)
{
return -1;
}
$cow = -1;
//计算5张牌总值,cow计算牛几。
$cardall = 0;
$n=0;//存储10、J、Q、K张数。 for($i=0;$i<4;$i++)//对5张牌从大到小排序。
{
for($j=$i+1;$j<5;$j++)
if($card[$i] < $card[$j])
{
$a = $card[$i];
$card[$i] = $card[$j];
$card[$j]=$a;
}
}
for($i=0;$i<5;$i++)
{
if($card[$i] >= 10)
{
$n++;
$card[$i] = 10;
}
$cardall += $card[$i];
}
//10 10 6 5 3 牛牛时5张牌总和肯定是10的倍数,五张牌总和是10的倍数未必是牛牛,下面代码不成立
//if(cardall %10 == 0)
//{
// print(0);//牛牛
// exit(0);
//}
switch ($n)
{
case 0: //5张牌中没有一张10、J、Q、K。
{
for($i=0;$i<4;$i++)
{
for($j=$i + 1;$j<5;$j++)
if(($cardall - $card[$i]- $card[$j])%10==0)
{
$cow=($card[$i] + $card[$j])%10;
return $cow;
}
}
break;
}
case 1: //5张牌中有一张10、J、Q、K。
{
//先判断是否有牛牛,不能判断剩余四张相加为10倍数为牛牛,如 Q 8 5 4 3
//只能先判断两张是否是10的倍数,如果是再判断剩余是否是10的倍数;有限判断出牛牛;再来判断三张是否有10的倍数,有的话有牛,否则无牛
for($i =1; $i < 4; $i ++)
{
for($j = $i +1; $j < 5; $j++)
{
if(($card[$i] + $card[$j]) % 10 == 0)
{
$cow=($cardall - $card[0])%10;
return $cow;
}
}
}
//判断是否有牛
for($i=1; $i<5; $i++) //剩下四张牌有三张加起来等于10
{
if(($cardall - $card[0] - $card[$i])%10==0)
{
$cow=($cardall-$card[0])%10;
break;
}
}
break;
}
case 2: //5张牌中有两张10、J、Q、K。 三张是个牛就有问题,应该优先输出
{ if(($cardall - $card[0] - $card[1])%10 == 0)//优先牛牛输出 如 J Q 2 3 5;这里先检查剩余是否为牛牛,否则算法有漏洞
{
$cow = 0;
}
else
{
//10 10 6 5 3 n=2 i=3 j=4 cardall = 34
for($i=$n;$i<4;$i++)//剩下三(四)张牌有两张加起来等于10。
{
for($j=$i+1;$j<5;$j++)
{
if(($card[$i]+$card[$j])==10)
{
$temp = $cardall;
for($k=0;$k<$n;$k++)//总值减去10、J、Q、K的牌。
$temp -= $card[$k]; //
$cow = $temp%10; //
}
}
/*print_r('cardall:'.$cardall);
print_r("<br />");
print_r('cow'.$cow);
print_r("<br />");*/
} }
break;
} case 3: //5张牌中有三张10、J、Q、K。
case 4: //5张牌中有四张10、J、Q、K。
case 5: //5张牌中五张都是10、J、Q、K。
{
for($i=0;$i<$n;$i++)//总值减去10、J、Q、K的牌。
{
$cardall -= $card[$i];
}
$cow = $cardall%10;
break;
} } return $cow;
}
}
PHP牛牛游戏算法的更多相关文章
- 【Nodejs】“快算24”扑克牌游戏算法
算24是一款扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过四则运算得到结果24,四张牌必须仅用一次.这是一种挺好的锻炼孩子算数能力的扑克牌游戏. 各地玩法还有点差别,有的只算1-10,其它抽出来:有 ...
- php实现 24点游戏算法
php实现 24点游戏算法 一.总结 一句话总结:把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三个数进行运算,再把结果与第四个数进行运算.在求表达式的过程中,最难处理的 ...
- 基于Lua的清除类游戏算法
最近在开发游戏,用Lua语言.习惯了其它的语言,然后对Lua的一些语法很不习惯. 比如table的元素个数的取值,比switch语句等等. 不过没有办法,还是要运用Lua来写游戏的.看来学C++还真的 ...
- 使用Xamarin开发移动应用示例——数独游戏(四)产生新游戏算法改进
项目代码可以从Github下载:https://github.com/zhenl/ZL.Shudu .代码随项目进度更新. 前面我们使用一个数组保存预制的游戏,然后随机从中抽取一个游戏作为新游戏,如果 ...
- 【Nodejs】“快算24”扑克牌游戏算法 1.02
快算24是一种挺好的锻炼孩子算数能力的扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过有限四则运算得到结果24,四张牌必须仅用一次.各地玩法还有点差别,有的只算1-10,其它抽出来:有的地方把整幅牌都 ...
- 【C/C++】例题 4-2 刽子手游戏/算法竞赛入门经典/函数和递归
[题目] 猜单词游戏. 计算机想一个单词让你猜,你每次猜一个字母. 如果单词里有那个[字母],[所有该字母会显示出来]. 如果没有那个字母,算猜错一次.[最多只能猜错六次] 猜一个已经猜过的字母也算错 ...
- VC 类泡泡龙游戏算法
#include <stdio.h> #include <malloc.h> #include <string.h> /* 1 2 1 2 2 1 2 1 2 1 ...
- 游戏算法中lua脚本详解
此外,函数本身也是一个变量,比如: dp@dp:~ % cat test.lua local mylen={} mylen.len3=function (x,y,z) return math.sqrt ...
- 【Nodejs】“快算24”扑克牌游戏算法 1.01
考虑到1.00版本需要改源码变更四个数字,这版修改了一下变成控制台输入了. 先把两个数四则运算得到结果想清楚就是C2代码,三个数就是C3,四个数就是C4.简单的代码简单,却是复杂的基础:复杂的脱胎于简 ...
随机推荐
- hadoop 单机模式 伪分布式 完全分布式区别
1.单机(非分布式)模式 这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统,一般仅用于本地MR程序的调试 2.伪分布式运行模式 这种模式也是在一台单机上运行,但用不同的 ...
- yii2 Rbac实例 (做完以下这些 会有些小的报错,相信各位都能解决,大多数都是自己命名空间上的问题)。
首先我自己没有使用自带的user表 如果model层没有AuthItem.php 那就自建一个将下面这些内容写入 <?php namespace backend\models; use Yi ...
- java-IO流-字节流-概述及分类、FileInputStream、FileOutputStream、available()方法、定义小数组、BufferedInputStream、BufferedOutputStream、flush和close方法的区别、流的标准处理异常代码
1.IO流概述及其分类 * 1.概念 * IO流用来处理设备之间的数据传输 * Java对数据的操作是通过流的方式 * Java用于操作流的类都在IO包中 * ...
- java中int和String之间的转换
String 转为int int i = Integer.parseInt([String]); int i = Integer.valueOf(my_str).intValue(); int转为St ...
- cordova网络情况检测插件使用:cordova-plugin-network-information
1. 添加插件 : cordova plugin add cordova-plugin-network-information 2. 调用方法: document.addEventListener(' ...
- BEAM188简单应用
目录 BEAM188简介 APDL应用实例 显示梁三维图 BEAM188简介 BEAM188-3D线性有限应变梁 Beam188 单元适合于分析从细长到中等粗短的梁结构,该单元基于铁木辛哥梁结构理论, ...
- 【CH5104】I-country 线性dp+路径输出
pre:在网格中,凸多边形可以按行(row)分解成若干段连续的区间 [ l , r ] ,且左端点纵坐标的值(col)满足先减后增,右端点纵坐标先增后减. 阶段:根据这个小发现,可以将阶段设置成每一行 ...
- .Net MVC TextBoxFor 扩展 placeholder 与 class 属性
namespace System.Web.Mvc { public static class HtmlHelperExtensions { public static MvcHtmlString Bs ...
- git clone git@github.com:xxx.git Permission denied (publickey) 问题解决办法
From: https://www.cnblogs.com/restart/p/4633928.html 如果git无法通过普通的http去clone远程分支,可以选用ssh方式去连接.这时需要配置相 ...
- 廖雪峰Java6 IO编程-3Reader和Writer-2Writer
1.java.io.Writer和java.io.OutputStream的区别 OutputStream Writer 字节流,以byte为单位 字符流,以char为单位 写入字节(0-255):v ...