C语言:斗地主发牌程序

题目来源仍然是小学期,就当娱乐

运行示例

贴代码:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//函数声明
void sortCards(int *, int);
void showCards(int *, int);
void changeCard(int);
int getOneCard();

int Cards[55] = { 0 };//用于记录每张牌是否被用过( 丢弃cards[0]
int main() //rand()%m+1,产生0- m-1的随机数
{
    int i, iCount = 0;
    int Player_A[18] = { NULL };
    int Player_B[18] = { NULL };
    int Player_C[18] = { NULL };
    int Ground[4] = { NULL };//Abandon all [0]

    for (i = 1; i <= 3; i++)//获取底牌
    {
        Ground[i] = getOneCard();
    }
    sortCards(Ground, 4);//按牌大小排序
    for (i = 1; i <= 17; i++)//为三个玩家分别发牌
    {
        Player_A[i] = getOneCard();
        Player_B[i] = getOneCard();
        Player_C[i] = getOneCard();
    }
    puts("Player's Cards");
        sortCards(Player_A, 18);
        sortCards(Player_B, 18);
        sortCards(Player_C, 18);
    puts("Player_A:");//打印A的牌
        showCards(Player_A, 17);
    puts("\n\nPlayer_B:");//打印B的牌
        showCards(Player_B, 17);
    puts("\n\nPlayer_C:");//打印C的牌
        showCards(Player_C, 17);
    puts("\n\nCards on the Ground:");
        showCards(Ground, 3);//打印底牌
    puts("");

    system("pause");
    return 0;
}
int getOneCard()//通过随机数取得一张没用过的牌
{
    int iRandNum;
    srand(time(0));//取时间随机数
    iRandNum = rand() % 54 + 1;
    while (Cards[iRandNum] == 1)//被用过的牌会重新取随机数
    {
        iRandNum = rand() % 54 + 1;
    }
    Cards[iRandNum] = 1;
    return iRandNum;
}
void showCards(int *Player, int Count)//打印玩家的牌
{
    int i;
    for (i = 1; i <= Count; i++)
    {
        if (Player[i] == 53)
        {
            printf(" 小王", Player[i]);
        }
        else if (Player[i] == 54)
        {
            printf(" 大王", Player[i]);
        }
        else if (Player[i] % 4 == 0)
        {
            printf(" 黑");
            changeCard(Player[i]);
        }
        else if ((Player[i] + 1) % 4 == 0)
        {
            printf(" 方");
            changeCard(Player[i]);
        }
        else if (Player[i] % 2 == 0)
        {
            printf(" 红");
            changeCard(Player[i]);
        }
        else
        {
            printf(" 梅");
            changeCard(Player[i]);
        }
    }
}
void changeCard(int Card)//将数字和纸牌进行对换
{
    Card /= 4.001;
    switch (Card)
    {
    case 0:printf("3 "); break;
    case 1:printf("4 "); break;
    case 2:printf("5 "); break;
    case 3:printf("6 "); break;
    case 4:printf("7 "); break;
    case 5:printf("8 "); break;
    case 6:printf("9 "); break;;
    case 7:printf("10 "); break;
    case 8:printf("J"); break;
    case 9:printf("Q"); break;
    case 10:printf("K"); break;
    case 11:printf("A"); break;
    case 12:printf("2"); break;
    }
}
void sortCards(int *Nums, int Length)//排序手中的牌
{
    int i, j, iTemp;
    for (i = 1; i <= Length - 1; i++)
    {
        for (j = 1; j <= Length - 2; j++)
        {
            if (Nums[j]>Nums[j + 1])
            {
                iTemp = Nums[j];
                Nums[j] = Nums[j + 1];
                Nums[j + 1] = iTemp;
            }
        }
    }
}

程序有错麻烦告诉我^_^

  • 21
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值