一个简单的C代码,模拟洗牌发牌

本文介绍了一个使用C语言实现的高效洗牌发牌程序。该程序利用结构体、数组和指针技术来模拟真实世界的扑克牌,并通过随机数生成器实现洗牌效果。最后,程序将洗好的牌按特定格式输出。

一个用指针、结构体,数组实现的高效的模拟洗牌发牌程序:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//card structure definition//
struct card
{
        const char *face;
        const char *suit;
};//end structure card

typedef struct card Card;//new type name for struct card

//prototypes
void fillDeck( Card * const wDeck, const char * wFace[], const char * wSuit[] );
void shuffle( Card * const wDeck );
void deal( const Card * const wDeck );

int main( void )
{
        Card deck[ 52 ];//define array of Cards
        
        //initialize array of pointers
        const char *face[] = {"A", "2", "3", "4", "5",
                "6", "7", "8", "9", "10", "J", "Q", "K" };
        //initialize array of pointers
        const char *suit[] = { "红桃", "方块", "黑桃", "梅花" };

        srand( time( NULL ) );        //randomize

        fillDeck( deck, face, suit );//load the deck with Cards
        shuffle( deck );//put Cards in random order
        deal( deck );//deal all 52 Cards

        return 0;
}//end main

//place strings into Card structures
void fillDeck( Card * const wDeck, const char * wFace[], const char * wSuit[] )
{
        int i;

        for ( i = 0; i<=51; i++ )
        {
                wDeck[ i ].face = wFace[ i % 13 ];
                wDeck[ i ].suit = wSuit[ i / 13 ];
        }
}//end function fillDeck

//shuffle cards
void shuffle( Card * const wDeck )
{
        int i;
        int j;//variable to hold random value between 0 - 51
        Card temp;//define temporary structure for swapping Cards

        for ( i = 0; i <=51; i++ )
        {
                j = rand() % 52;
                temp = wDeck[ i ];
                wDeck[ i ] = wDeck[ j ];
                wDeck[ j ] = temp;
        }
}//end function shuffle

//deal cards
void deal( const Card * const wDeck )
{
        int i;

        for ( i = 0; i <= 51; i++ )
        {
                printf( "%5s %-8s%c", wDeck[ i ].face, wDeck[ i ].suit, ( i + 1 ) % 2 ? '\t' : '\n' );

        }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值