Hi there.
I am trying to write a blackjack game and I am running into a few teething problems. My main() function currently outputs what values are stored for certain variables, just to see if I'm doing things properly. Here is the code:
Let me explain a few things. The card_t type represents with the following attributes: card( 1-13 for ace-king), suit(1-4 for hearts, clubs etc), value( ace=1, jack=10, queen=10 and so on). The generate_card function is supposed to generate a random card to simulate the dealer dealing unkown cards to the participants of the game. The program compiles but outputs rather absurd data:Code:#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX 10 typedef struct { int card; int suit; int value; } card_t; void generate_card(card_t *crd, int *num, int *score); int main(void) { /* current scores for dealer and player */ int p_score = 0; int d_score = 0; /* number of cards in their hand */ int p_numofcards = 0; int d_numofcards = 0; /* initialise hands */ card_t p_hand[MAX]; card_t d_hand[MAX]; srand((unsigned int)time(NULL)); int i; for(i=0;i<2;i++) { /*loop twice because at the start of blackjack, each player is given two cards*/ generate_card(&p_hand[i], &p_numofcards, &p_score); generate_card(&d_hand[i], &d_numofcards, &d_score); } /* test */ printf("p_score=%d, p_numofcards=%d\n", p_score, p_numofcards); printf("d_score=%d, d_numofcards=%d\n", d_score, d_numofcards); int k; for(k=0;k<2;k++) { printf("p_hand[%d].card=%d," " p_hand[%d].suit=%d, " " p_hand[%d].value=%d\n", k,p_hand[i].card, k,p_hand[i].suit, k,p_hand[i].value ); printf("d_hand[%d].card=%d," " d_hand[%d].suit=%d," " d_hand[%d].value=%d\n", k,d_hand[i].card, k,d_hand[i].suit, k,d_hand[i].value ); } return 0; } void generate_card(card_t *crd, int *num, int *score) { /* crd = (card_t *)malloc(MAX*sizeof(card_t)); */ crd->card = (rand() % 13) + 1; crd->suit = (rand() % 4) + 1; int c; for(c=1;c<11;c++) { if(crd->card == c) { /*if card is 1-10 (ace- 10) then let the value of the card be whatever it is*/ crd->value = c; (*score)+=c; /*adds to the score (eg. 10 of hearts would add a 10) */ (*num)++; /*increments the number of cards in the players' hand*/ } } switch(crd->card) { case 11: case 12: case 13: /* if card is jack, queen or king...*/ crd->value = 10; (*score)+=10; (*num)++; break; } /*free(crd);*/ }
Another run to show it is producing random cards correctly:Code:$ gcc -o bjack bjack.c $ ./bjack p_score=8, p_numofcards=2 d_score=8, d_numofcards=2 p_hand[0].card=0, p_hand[0].suit=0, p_hand[0].value=0 d_hand[0].card=0, d_hand[0].suit=134513052, d_hand[0].value=24641422 p_hand[1].card=0, p_hand[1].suit=0, p_hand[1].value=0 d_hand[1].card=0, d_hand[1].suit=134513052, d_hand[1].value=24641422
Any help would be much appreciated, thanks.Code:$ ./bjack p_score=11, p_numofcards=2 d_score=6, d_numofcards=2 p_hand[0].card=0, p_hand[0].suit=0, p_hand[0].value=0 d_hand[0].card=0, d_hand[0].suit=134513052, d_hand[0].value=24641422 p_hand[1].card=0, p_hand[1].suit=0, p_hand[1].value=0 d_hand[1].card=0, d_hand[1].suit=134513052, d_hand[1].value=24641422



LinkBack URL
About LinkBacks


