急ごしらえですが、カードを準備してプレイヤー1に配り、
残ったカードをシャッフルしてプレイヤー2に配るプログラムです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct card_t{
int num, suit;
}CARD;
typedef struct stock_t{
CARD card[52];
int remain;
}STOCK;
void SetStock(STOCK *stock)
{
const char *suitch = "SCHD";
int i;
for(i = 0; i < 52; i ++){
stock->card.num = i % 13 + 1;
stock->card.suit = suitch[i / 13];
}
stock->remain = 52;
}
void Swap(CARD *a, CARD *b)
{
CARD c = *a;
*a = *b;
*b = c;
}
void Shuffle(STOCK *stock)
{
int rnd, n = stock->remain;
while(n --){
rnd = (int)((n + 1) * (rand() / (RAND_MAX + 1.0)));
Swap(&stock->card[n], &stock->card[rnd]);
}
}
int Deal(STOCK *stock, CARD *player, int n)
{
int i;
if(n > stock->remain) return 0;
for(i = 0; i < n; i ++) player = stock->card[-- stock->remain];
return 1;
}
void PrintCard(CARD *card, int n)
{
int i;
for(i = 0; i < n; i ++){
if(card.suit) printf("[%c%2d]", card.suit, card.num);
if(i % 13 == 12) putchar('\n');
}
if(i % 13) putchar('\n');
}
void Print(STOCK *stock, CARD *player1, CARD *player2)
{
printf("\nstock %d\n", stock->remain);
PrintCard(stock->card, stock->remain);
printf("player1 : ");
PrintCard(player1, 5);
printf("player2 : ");
PrintCard(player2, 5);
}
int main(void)
{
STOCK stock;
CARD player1[5] = {0}, player2[5] = {0};
srand((unsigned)time(NULL));
SetStock(&stock);
Print(&stock, player1, player2);
Deal(&stock, player1, 5);
Print(&stock, player1, player2);
Shuffle(&stock);
Deal(&stock, player2, 5);
Print(&stock, player1, player2);
return 0;
}