把牌和花色搭配好成为一种情况,总共的情况就是:花色*牌号=4*13=52;
1:红1
2:红2
3:红3
……
52:梅13
把这个组成一个首尾相连的链表。
然后再写个1—52的随机数生成器生成x
出牌号=上次位置向前数x个。然后删除这个牌号。成新的环链表。
继续直到表空。
#include<stdio.h>#include<string.h>
int isPokerVaild(char* str){
if(strlen(str)==1){
if((str[0]>='2' &&str[0]<='9')||str[0]=='0'||str[0]=='A'||str[0]=='J'||str[0]=='Q'||str[0]=='K') return 1
else return 0
}
else if(strlen(str)==2){
if(str[0]==str[1]) return 2
else return 0
}
else if(strlen(str)==3){
if(str[0]==str[1] && str[1]==str[2]) return 3
else return 0
}
else if(strlen(str)==4){
if(str[0]==str[1] && str[1]==str[2] && str[2]==str[3]) return 4
else return 0
}
else if(strlen(str)==5){
int s[5],n=0
bool flag=true
while(n<5){
switch(str[n]){
case '2':s[n]=1break
case '3':s[n]=3break
case '4':s[n]=4break
case '5':s[n]=5break
case '6':s[n]=6break
case '7':s[n]=7break
case '8':s[n]=8break
case '9':s[n]=9break
case '0':s[n]=10break
case 'J':s[n]=11break
case 'Q':s[n]=12break
case 'K':s[n]=13break
case 'A':s[n]=14break
}
n++
}
for(n=0n<4){
if(s[n+1]!=s[n]+1){
flag=false
break
}
else{
flag=true
n++
}
}
if(flag) return 5
else return 0
}
}
int main(){
int iRet = isPokerVaild("3") // iRet = 1
printf("%d\n",iRet)
iRet = isPokerVaild("n") // iRet = 0
printf("%d\n",iRet)
iRet = isPokerVaild("66") // iRet = 2
printf("%d\n",iRet)
iRet = isPokerVaild("36") // iRet = 0
printf("%d\n",iRet)
iRet = isPokerVaild("555") // iRet = 3
printf("%d\n",iRet)
iRet = isPokerVaild("366") // iRet = 0
printf("%d\n",iRet)
iRet = isPokerVaild("8888") // iRet = 4
printf("%d\n",iRet)
iRet = isPokerVaild("4666") // iRet = 0
printf("%d\n",iRet)
iRet = isPokerVaild("0JQKA") // iRet = 5
printf("%d\n",iRet)
iRet = isPokerVaild("56789") // iRet = 5
printf("%d\n",iRet)
iRet = isPokerVaild("45789") // iRet = 0
printf("%d\n",iRet)
}
定义一个结构类型表示一张牌,结构包含3个成员,第一个成员char:取值2,3~K,A表示牌名字,第二个成员int:取值2~14表示牌真实大小。第三个成员:结构链表指针。写一个初始化函数,定义52大小的结构数组,成员值初值分别和牌对应,遍历数组并将每个元素的链表指针依次指向下一个元素地址。这样得到一个初始链表。(相当于一盒新牌)
所有涉及随机数都用rand函数,洗牌分四份就是循环取随机数m=1~n,n是随循环自减,初值52,直到n变成0。每随一次循环就从初始链表中遍历取出对应第m个节点,并从初始链表中将这个节点断开(既前一个节点指针直接指向后一个节点指针)。每取13张就组成一个新的链表。这样获得4个新链表分别表示4个玩家。
最后出牌就是分别遍历自己的链表,利用循环取牌比较结构数值大小。(取出的牌要从链表断开和上面一样,你把取出节点写成独立函数就能反复使用)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)