永发信息网

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

答案:4  悬赏:40  手机版
解决时间 2021-04-01 17:18
  • 提问者网友:最爱你的唇
  • 2021-04-01 09:33
扑克牌发牌游戏程序(用C语言)
最佳答案
  • 五星知识达人网友:怀裏藏嬌
  • 2021-04-01 10:28
#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") ; }
全部回答
  • 1楼网友:低音帝王
  • 2021-04-01 14:23

  • 2楼网友:由着我着迷
  • 2021-04-01 12:59
怎么发给你
  • 3楼网友:酒者煙囻
  • 2021-04-01 11:58

简单的实现四人发牌程序,具体的懒得做,没时间#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, "方块牌");
    }
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯