永发信息网

扑克牌发牌游戏程序(用C语言)

答案:4  悬赏:40  手机版
解决时间 2021-04-01 17:18
扑克牌发牌游戏程序(用C语言)
最佳答案
#include #include #include int playerA[13],playerB[13],playerC[13],playerD[13]; // 定义四个玩家// void Initcard(int *); //用card来储存52张扑克牌,每个数组元素是一位3位整数,表示每张牌其中第一位表示牌花色后两位表示大小 //百位为4的为黑桃,为3的是红桃,2的是梅花,1的是方块 int card[] = {101,102,103,104,105,106,107,108,109,110,111,112,113, 201,202,203,204,205,206,207,208,209,210,211,212,213, 301,302,303,304,305,306,307,308,309,310,311,312,313, 401,402,403,404,405,406,407,408,409,410,411,412,413}; void Clear_card() //洗牌 { int i, r, temp ; srand ( time ( 0 ) ) ; for (i = 0; i < 52 ; i++ ) { r=rand () % (52 - i ) + i ; temp = card[i] ; card[i] = card[r] ; card[r] = temp ; } } void Send_card(int playerA[], int playerB[], int playerC[], int playerD[]) //发牌 参数为四个数组 { int l ; for(l = 0; l < 13; l ++) //发牌 { playerA[l] = card[l]; playerB[l] = card[l+13]; playerC[l] = card[l+26]; playerD[l] = card[l+39]; } } void sort(int *player)//按从小到大的顺序整理每个人的牌,利用冒泡排序法 { int i, j, t ; for ( i = 0 ; i < 12 ; i ++)//处理12次 { for (j = 0; j < 12 ; j++ ) { if( *(player + j) > *(player + j + 1)) { t = *(player + j + 1) ; *(player + j + 1 ) = *(player + j) ; *(player + j) = t ; } } } } void Show_Card (int *p_player) { int i ; for(i = 0; i < 13; i++) { switch ( *(p_player + i)/100) { case 4 : printf ("\6") ; break ; case 3 : printf ("\3"); break ; case 2 : printf ("\5") ; break ; case 1 : printf ("\4"); break ; default : break ; } if(*(p_player + i) % 20 == 1) printf(" A ") ; else if(*(p_player + i) % 20 == 11) printf(" J ") ; else if(*(p_player + i) % 20 == 12) printf(" Q ") ; else if(*(p_player + i) % 20 == 13) printf(" K ") ; else printf("%2d ", *(p_player + i) % 20) ; } } void main() { int playerA[13],playerB[13],playerC[13],playerD[13]; int *p_A = &playerA[0]; int *p_B = &playerB[0]; int *p_C = &playerC[0]; int *p_D = &playerD[0]; Clear_card () ; //洗牌 Send_card (playerA, playerB, playerC, playerD) ;//发牌 printf("洗牌后的牌为: \n") ; Show_Card( p_A) ; printf("\n") ; Show_Card( p_B) ; printf("\n") ; Show_Card( p_C) ; printf("\n") ; Show_Card( p_D) ; printf("\n") ; //排序 sort ( p_A) ; sort ( p_B) ; sort ( p_C) ; sort ( p_D) ; //显示 printf("玩家A的牌: \n") ; Show_Card( p_A) ; printf("\n") ; printf("玩家B的牌: \n") ; Show_Card( p_B) ; printf("\n") ; printf("玩家C的牌: \n") ; Show_Card( p_C) ; printf("\n") ; printf("玩家D的牌: \n") ; Show_Card( p_D) ; printf("\n") ; }
全部回答

怎么发给你

简单的实现四人发牌程序,具体的懒得做,没时间#include 
#include 
#include 
void InitCard(int a[], const int n);
void RandCard(int a[], int b[][13]);
void SortCard(int a[][13]);
void PrintCard(const int a[13], int low, int top, const char type[10]);
void PrintFinal(const int a[][13]);
int main()
{
    int initcards[52] = {0}; 
    int cards[4][13]  = {0};
    
    InitCard(initcards, 52);
    RandCard(initcards, cards);
    SortCard(cards);
    PrintFinal(cards);
    
    system("pause");
    return 0;
}

void InitCard(int a[], const int n)
{
    int i;
    for(i=0; i        a[i] = i+1;
}

//    分配牌堆,a[]是初始化好的牌堆,b[4][]是待分配的牌堆
void RandCard(int a[], int b[][13])
{
    int i, j, index;
    srand((unsigned)time(NULL));    //  随机种子
    
    for(i=0; i<4; i++)              //  为 4个人分牌
    {
        for(j=0; j<13; )            //  每人 13张
        {
            index = rand() % 52;        //  初始牌堆随机下标
            if(a[index] != 0)           //  若这张牌没有被分配
            {
                b[i][j++] = a[index];   //  添加到分配牌堆中去
                a[index] = 0;           //  初始牌堆这张牌值归 0(不能再使用)
            }
        }
    }
}
//  为 4个人的牌从大到小排序,后面遍历输出时即从大到小输出
void SortCard(int a[][13])
{
    int i, j, k, tmp;
    for(i=0; i<4; i++)  //  第 i 个人
    {
        for(j=0; j<12; j++)
        {
            for(k=0; k<12-j; k++)
            {
                if(a[i][k] < a[i][k+1])
                {
                    tmp = a[i][k];
                    a[i][k] = a[i][k+1];
                    a[i][k+1] = tmp;
                }
            }
        }
    }
}
//  打印一种花色的牌型,low 和 top 是该种花色的下界值和上界值,type[]是花色名字
void PrintCard(const int a[13], int low, int top, const char type[10])
{
    int i, tmp;
    printf("%s:", type);
    for(i=0; i<13; i++)
    {
        if(a[i]top)    //  不在此范围,说明不是此花色牌
            continue;
        tmp = a[i] % 13 + 1;        //  1为 A,而10、11、12、13分别为T、J、Q、K
        if(tmp > 1 && tmp <= 9)
            printf("%d", tmp);
        else if(tmp == 10)
            putchar('T');
        else if(tmp == 11)
            putchar('J');
        else if(tmp == 12)
            putchar('Q');
        else if(tmp == 13)
            putchar('K');
        else
            putchar('A');
    }
    printf(" ");
}
//  打印四个人的牌型
void PrintFinal(const int a[][13])
{
    int i, j, tmp;
    for(i=0; i<4; i++)
    {
        printf("第%d位玩家的牌型如下: ", i+1);
        PrintCard(a[i], 40, 52, "黑桃牌");
        PrintCard(a[i], 27, 39, "红桃牌");
        PrintCard(a[i], 14, 26, "梅花牌");
        PrintCard(a[i],  1, 13, "方块牌");
    }
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大船开到沙滩上来是什么电影
电力通道和电力隧道的区别?
赣东机动车驾驶培训咨询服务部地址好找么,我
主角一出场就无敌的都市小说要百万字以上完结
莫说穷人操破逼,三十年河东,三十年河西。三
收到微信息怎么叫它没声音
青春期少女喝牛奶晚上好还是早上
海南新驾照最多能扣多少分
印尼购房可以移民吗
菊花(屁眼)处有一肉头突出,有疼痛感,这是
78月份适合去哪里旅游凉快温度不高
王道文中BE.HE.SE.都是什么意思?
sj2015年新综艺节目
《格桑尔》的简述,和桑格尔
谁能告诉我嫁衣这首歌背后真实的故事、
推荐资讯
关于夸人的词语
关于岁寒三友的对联
求推荐液体特规过滤袋?
速腾和昂克赛拉哪个好
中国人为什么有很多人喜欢特勒·希元首
闲鱼发布哪里违规了?
推荐几部关于西部牛仔的小说
什么样的车轮在凹凸不平的道路上能保持平衡?
为什么我脖子很黑
袁鹰简介100字
漳卅到广卅坐动车多少钱有多远
求希尔薇2.1.1 pc版资源
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?