I have allready shuffled my deck and dealt it out and that works. However, when im about to make the user enter his/her input in my program and get two cards dealt out, i get the same cards, this is not what I want, i want different cards for both players and i dont want them duplicated. I can not see whats wrong with my code, spend some hours looking through it, but in my eyes i feel it should be fine.
Its when i call the function: player1();
and from there i call printcards(deck)
and here's where i have my problem.
Can any of you guys help me with a solution here so when i call my function printcards(deck)
i get different kinds of cards without them duplicated.
Heres how my code looks completely: (Its the last function where my problem is).
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIAMONDS 0
#define CLUBS 1
#define HEARTS 2
#define SPADES 3
#define COLOR_SIZE 13
#define NR_OF_SUITS 4
#define DECK_SIZE 52
#define JACK 11
#define QUEEN 12
#define KING 13
#define ACE 1
struct Card
{
int suit;
int value;
int *sum;
};
int test(struct Card *cardDeck);
int player2(struct Card* deck);
int player1(struct Card* deck);
int printCards(struct Card *cardDeck);
void swapCards(struct Card *cardA, struct Card *cardB);
void shuffleCards(struct Card *cardDeck);
int main()
{
srand((unsigned)time(NULL));
//struct Card deck[DECK_SIZE]; //Statiskt allokerad array
struct Card * deck; //Dynamiskt allokerad array
int index;
int suit_index;
int startAt = 0;
deck = (struct Card *)malloc(sizeof(struct Card) * DECK_SIZE);
for (suit_index = 0; suit_index < NR_OF_SUITS; suit_index++) /* Initiera kortleken */
for (index = 0; index < COLOR_SIZE; index++)
{
deck[suit_index*COLOR_SIZE + index].suit = suit_index;
deck[suit_index*COLOR_SIZE + index].value = index;
}
shuffleCards(deck);
printf("\n\n");
startAt = printCards(deck, startAt); //player 1
startAt = printCards(deck, startAt); //player 2
system("pause");
return 0;
}
int printCards(struct Card *cardDeck, int start_index)
{
int sum = 0;
int i = 0;
for (int i = start_index; i < start_index + 2; i++)
{
switch (cardDeck[i].value + 1)
{
case ACE: printf("Ace ");
cardDeck[i].value = 11;
break;
case JACK: printf("Jack ");
cardDeck[i].value = 10;
break;
case QUEEN: printf("Queen");
cardDeck[i].value = 10;
break;
case KING: printf("King ");
cardDeck[i].value = 10;
break;
default: printf("%d ", cardDeck[i].value + 1);
break;
}
printf("of ");
switch (cardDeck[i].suit)
{
case DIAMONDS: printf("Diamonds ");
break;
case HEARTS: printf("Hearts ");
break;
case CLUBS: printf("Clubs ");
break;
case SPADES: printf("Spades ");
break;
default: printf("Something went wrong!! ");
break;
}
printf("\n");
}
return i;
}
void swapCards(struct Card * cardA, struct Card *cardB)
{
struct Card temp;
temp = *cardA;
*cardA = *cardB;
*cardB = temp;
}
void shuffleCards(struct Card *cardDeck)
{
for (int i = 0; i < DECK_SIZE; i++)
swapCards(&cardDeck[i], &cardDeck[rand() % 52]);
}