怎么用C++设计程序 随机出牌

怎么用C++设计程序 随机出牌,第1张

给你提供一个思路

把牌和花色搭配好成为一种情况,总共的情况就是:花色*牌号=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个玩家。

最后出牌就是分别遍历自己的链表,利用循环取牌比较结构数值大小。(取出的牌要从链表断开和上面一样,你把取出节点写成独立函数就能反复使用)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12036020.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存