C语言 模拟扑克牌新牌洗牌与发牌

题目:

都已经这样了,斗地主还会远吗

计导课群里大佬发了PPT,就忍不住点开看,看了就觉得很有道理,但是我们不能抄作业,于是我就尝试不用二维数组

改了一次,指针也不用了

很多东西还是不懂,比如写随机数不知道遇到重复的怎么办,看了大佬的PPT,第一次见到把循环倒回去,我直接惊为天人


 正文:

主要的思路就是先把牌定义出来,定义大小,后面0给他+10就行,因为有这个♠啥的,花色就不用定义了

 然后进行随机,把0~5152个数字的顺序打乱,存入一个数组,之后我们用这52个数,一个数表示一张牌,具体方法类似于天干地支纪年法表示120个数一样

就这个按时间重选种子和随机数可以自行百度,我也不会哈哈哈哈哈


这是代码

#include<iostream>
#include<string>
#include<stdlib.h>
#include<time.h>
#include<windows.h>

int main()
{
    char numb[13] = { 'A','2','3','4','5','6','7','8','9','0','J','Q','K'};
    int i, j,under;
    printf("这里有一副新扑克牌\n");//展示一下新扑克
    for (i = 0; i < 4; i++)
    {
        for (under = 0; under < 13; under++)
        {
            printf(" -- ");
        }
        printf("\n");
        for (j = 0; j < 13; j++)
        {
            printf("|%c |", i + 3);
        }
        printf("\n");
        for (j = 0; j < 13; j++)
        {
            if(numb[j]=='0')
            printf("|10|");
            else
            printf("| %c|", numb[j] );
        }
        printf("\n");
        for (under = 0; under < 13; under++)
        {
            printf(" -- ");
        }
        printf("\n");
    }

    int k, p;//洗牌
    int step1[52] = { 0 };
    srand((unsigned)time(NULL));//按秒重新播种,不然随机数都取一样
    for (k = 0; k < 52; k++)//在step1里储存了0~51的不重复的随机数
    {
        i = rand() % 52;
        step1[k] = i;
        for (p = 0; p < k; p++)
        {
            if (i == step1[p])//遇到有重复的,就把循环倒回去
            {
                k--;
                break;
            }
        }
    }

    int suit_fa, numb_fa;//发牌 ;
    int pl,m;
    printf("\n发牌\n");
    for (pl = 1; pl <= 4; pl++)
    {
        printf("player%d:\n", pl);
        for (under = 0; under < 13; under++)
        {
            printf(" -- ");
        }
        printf("\n");
        for (j = 13 * (pl - 1); j < 13 * pl; j++)
        {
            suit_fa = (step1[j] + 1) % 4;//1~52对4取模会得到13组0~3
            numb_fa = (step1[j] + 1) % 13;//1~52对13取模会得到4组0~12
            printf("|%c |", suit_fa + 3);
        }
        printf("\n");
        for (j = 13 * (pl - 1); j < 13 * pl; j++)
        {
            suit_fa = (step1[j] + 1) % 4;//1~52对4取模会得到13组0~3
            numb_fa = (step1[j] + 1) % 13;//1~52对13取模会得到4组0~12
            if (numb[numb_fa] == '0')
                printf("|10|");
            else
                printf("| %c|", numb[numb_fa]);
        }
        printf("\n");
        for (under = 0; under < 13; under++)
        {
            printf(" -- ");
        }
        printf("\n");

        printf("\n");
    }

    return 0;
}

 (用的是C++,因为老师在群里发的输出花色♥♦♠♣的方法是C++实现的)


然后为了把输出的样子搞得更像扑克,我已经快吐了

这是效果


最后,胡建伟牛逼

  • 14
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值