刚看到这题目时我心理活动是,这太特么简单了好吗 这题拿来考人?
结果后面做的乱七八糟的,有些问题也没考虑到。回家之后想了想,还是决定再写一遍。
使用的方法是最土的,过程如下: 先把牌拼出来,随机生成5张,再让正序排列,
使用字符串函数检查是否存在于2345678910JQKA,然后输出。
<?php
/*拼出52张牌*/
$pk = [
"红"=>[2,3,4,5,6,7,8,9,10,'J','Q','K','A'],
"黑"=>[2,3,4,5,6,7,8,9,10,'J','Q','K','A'],
"方"=>[2,3,4,5,6,7,8,9,10,'J','Q','K','A'],
"梅"=>[2,3,4,5,6,7,8,9,10,'J','Q','K','A'],
];
foreach ($pk as $key => $value) {
foreach ($value as $k => $v) {
$array[]= $key.'-'.$v;
}
}
/*抽出五张*/
for($i=0;$i<5;$i++){
$rand_number2[] = $array[array_rand($array)];
}
// $rand_number2=["黑-K","红-J","梅-9","红-10","方-Q"]; //顺子测试案例
foreach ($rand_number2 as $key => $value) {
$string = explode('-', $value);
$str_color[] =$string[0];
$str_num[] = $string[1];
$color_num .= $string[0].' '.$string[1].' , ';
}
/*判断扑克数量*/
if(count($str_num)!=5){
echo '发牌数量错误';
die;
}
/*检查是否顺子*/
sort($str_num);
$arr_to_str2 = intval(implode('', $str_num));
$sort_pk = ["J"=>"","Q"=>"","K"=>"","A"=>""];
foreach ($str_num as $value) {
if($value=='J' || $value=='Q' || $value=='K' || $value=='A' ){
$sort_pk[$value]=$value;
}
}
foreach ($sort_pk as $value) {
$arr_to_str2 .= $value;
}
print_r($arr_to_str2);
$pk = '2345678910JQKA';
$pos = strpos($pk,$arr_to_str2);
print_r($color_num);
echo "<br>";
if($pos===false && $arr_to_str2!='2345A'){
echo "不是顺子";
}else{
echo '是顺子';
}
输出结果:
红 6 , 红 Q , 梅 1 , 梅 J , 黑 5 ,
不是顺子
-------分割线-2018/11/20 添加-----
解法二: 使用Javascript
函数1输出N张扑克牌
<script type="text/javascript">
var playingcard = function(n) {
var card=[
2,3,4,5,6,7,8,9,10,'J','Q','K','A',
2,3,4,5,6,7,8,9,10,'J','Q','K','A',
2,3,4,5,6,7,8,9,10,'J','Q','K','A',
2,3,4,5,6,7,8,9,10,'J','Q','K','A'
];
var colors=['黑','红','梅','方'],rand_card={}
for(var i=0;i<n;i++){
var x=Math.floor(Math.random()*52)
if(x<13){
rand_card[colors[0]+card[x]]=card[x]
}else if(x<26){
rand_card[colors[1]+card[x]]=card[x]
}else if(x<39){
rand_card[colors[2]+card[x]]=card[x]
}else{
rand_card[colors[3]+card[x]]=card[x]
}
// 出牌数量是否准确
if(i==n-1){
var count=0
for(var x in rand_card){
count+=1
}
if(count<n) i-=1;
}
}
return rand_card
};
函数2 输出是否顺子
var numcard = function(n){
var cards=playingcard(n)
// var cards={"方9": 9, "黑10": 10, "方8": 8, "红J": "J", "黑Q": 'Q'}
// var cards={"方3": 3, "方A": 'A', "黑2": 2, "红4": 4, "黑5": 5}
var arr=[],arr2=[],arr3=[],j=0
var array = [1,2,3,4,5,6,7,8,9,10,'J','Q','K','A']
var string = '12345678910111213,123413'
// cards拆分成两个数组 arr,arr2
for(var i in cards){
arr[j]=cards[i]
arr2[j]=i
j++
}
if(arr.length!=n) return arr2+'<br>拆克牌数量不够';
//arr3获取扑克在array数组中的索引
for(var i=0;i<n;i++){
arr3[i]=array.indexOf(arr[i])
}
//arr3 排序
var length = arr3.length;
for(var i=length-1;i>0;i--) { //缩小范围
for(var j=0;j<i;j++) { //在范围内冒泡,最大的一个到最后面
if(arr3[j]>arr3[j+1]) {
var temp=arr3[j];
arr3[j]=arr3[j+1];
arr3[j+1]=temp;
}
}
}
arr2=arr2.join(" , ")
arr3=arr3.join("")
// 检查是不是顺子
if(string.indexOf(arr3)>-1){
return arr2+'<br>'+'顺子';
}
return arr2+'<br>'+'不是顺子';
}
var z= numcard(5)
document.write(z)
</script>
梅3 , 方9 , 方3 , 红10 , 梅5
不是顺子
方3 , 方A , 黑2 , 红4 , 黑5
顺子