Thread: Making Black Jack

  1. #1
    Registered User
    Join Date
    Dec 2008
    Posts
    2

    Making Black Jack

    Hi all,

    I'm making Black Jack in C in the compiler Borland. I have allready a lot but I have a problem. When I start playing my game the Computer (Dealer) and me (Player) get both 2 cards, but they are always the same card: Hearts Ace. Also I can choose that the computer will hit or wil stay. And that's not what I want. Can someone help me please?
    The code maintain dutch words so if you don't understand what I mean, pls do send me a message.

    Thank you very much,
    X.

    Code:
    /******************************************************************
    Basisstructeren:
    *******************************************************************/
    #include <stdio.h>	
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
    #include <time.h> /* Tijd weergeven */
    
    #define  GESCHIEDENIS_FILE  "bjges.txt" /* Geschiedenis file oproepen */
    #define  MAX 80
    #define  size_array  52 /* 52 Kaarten in één spel */
    
    /******************************************************************
    Structuren:
    *******************************************************************/
    const char *kaart_naam[] =
    {
    "Aas", "Twee", "Drie", "Vier", "Vijf", "Zes", "Zeven",
    "Acht", "Negen", "Tien", "Boer", "Koningin", "Koning"
    }; /* Gebruik voor het tonen van de kaarten op naam! */
    
    const char *soort_naam[] =
    {
    "Harten", "Klaveren", "Koeken", "Schoppen"
    };/*Gebruik voor het tonen van de kaarten op soort!*/
    
    /* Globale Variabelen */
    int deck[size_array];
    char soort[size_array];
    int spelercredit;
    int delercredit;
    /* Deck is globaal! */
    
    void verwissel (int *n1, int *n2)
    {
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
    } /* Verwisselen */
    
    void schud_array(int *array)
    {
    int ctr;
    int n1,n2;
    /*Verwisselt de kaarten 1000 keer!*/
    /*Schudden */
    for (ctr=0;ctr<1000;ctr++)
    	 {
    	 n1 = rand()%size_array;
    	 n2 = rand()%size_array;
    	 verwissel((array + n1), (array+n2));
    	 }
    } /* Schud_Array */
    
    void nieuw_spel(void)
    {
    int ctr;
    
    for (ctr=0;ctr<size_array;ctr++)
    	 {
    	 deck[ctr]=ctr/4; //kaarten 0-12
    	 soort[ctr]=ctr%4; //soort 0-3
    	 }
    schud_array(deck); //Schud deck.
    } /* Nieuw_spel */
    
    void toon_computer(char *hand, char many)
    {
    int ctr;
    gotoxy(1,1);
    /* Ga naar de eerste box op het scherm om af te printen! */
    printf("Computer heft één kaart die je niet kan zien en:\n");
    for (ctr=1;ctr<many;ctr++) /*Op één starten om eerste kaart niet weer te geven!*/
    	 printf("%s of %s\n", kaart_naam[deck[hand[ctr]]],
    			soort_naam[soort[hand[ctr]]]);
    } /* Toon_Computer */
    
    
    void toon_computer2(char *hand, char many, int totaal)
    {
    int ctr;
    
    gotoxy(1,1);
    printf("Computer heeft:");
    for (ctr=0;ctr<many;ctr++)
    	 printf("%s of %s\n", kaart_naam[deck[hand[ctr]]],
    		  soort_naam[soort[hand[ctr]]]);
    printf("\ntotaal %i\n", totaal);
    } /* Toon_Computer2 */
    
    
    void toon_speler(char *hand, char many, int totaal)
    {
    int ctr;
    
    printf("\n\n\n\n\n\nU heeft:\n");
    for (ctr=0;ctr<many;ctr++)
    	 printf("%s of %s\n", kaart_naam[deck[hand[ctr]]],
    		  soort_naam[soort[hand[ctr]]]);
    printf("totaal %i\n", totaal);
    } /* toon_speler */
    
    
    void comp_wint(void)
    {
    printf("Computer wint!");
    delercredit++;
    spelercredit--;
    } /* comp_wint */
    
    void speler_wint(void)
    {
    printf("U wint!");
    spelercredit++;
    delercredit--;
    } /* speler_wint */
    
    void niemand_wint(void)
    {
    printf("ex aequo!");
    } /* niemand_wint*/
    
    int get_totaal(char *hand, char many)
    {
    int ctr;
    int totaal=0;
    int azen=0;
    int temp;
    
    for (ctr=0;ctr<many;ctr++)
    	 {
    	 temp = deck[hand[ctr]]+1;
    	 if (temp>10) temp=10; //Alle beeldjes (Koning, Koningin, Boer) word gelijk aan 10
    		totaal+=temp;
    	 if (deck[hand[ctr]]==0)
    		{
    		azen++;
    		totaal+=10;
    		}
    	 } /* Einde van de loop */
    
    while (totaal>21 && azen>0)
    	 {
    	 totaal-=10;
    	 azen--;
    	 }
    return totaal;
    } /* get_totaal */
    
    
    
    
    
    
    int main (void)
    {
    char s_kaarten[7],c_kaarten[7]; // Kan niet meer dan 7 kaarten hebben zonder kapot te raken
    int s_credits, c_credits;
    int s_totaal;
    int c_totaal;
    int slot_in_deck;
    char done=0;
    char key;
    FILE* geschiedenis;
    char aLine[MAX];
    char *ptr;
    int errFlag;
    struct tm t;
    struct tm* tp;
    time_t zijntijd;
    
    srand (time(NULL));
    
    clrscr();
    spelercredit = delercredit = 100; /* Tenzij geschiedenisbestand is opgestart */
    
    printf("\tMenu Black Jack\n\n");
    printf("1. Nieuw Spel\n2. Laad Geschiedenis\n3. High Scores\n4. Instructies\n5. Opties\n6. Extra's\n\n\n\nWat is uw keuze?: ");
    
    for (; ; )
    	 {
    	 if ( (key = getch()) == '1' )
    		break;
    	 if ( key == '2' )
    		{
    		/* Toon de geschiedenis file */
    		clrscr();
    		errFlag = 0;
    		if ( (geschiedenis = fopen(GESCHIEDENIS_FILE, "r")) == NULL )
    			 errFlag = 1;
    		else
    			 {
    			 fgets(aLine, MAX, geschiedenis);
    			 fclose(geschiedenis);
    			 if ( (ptr = strtok(aLine, " ")) == NULL )
    				 errFlag = 1;    /* ERROR */
    				else
    				{
    				zijntijd = (time_t)atol(ptr);
    				if ( (ptr = strtok(NULL, " ")) == NULL )
    					 errFlag = 1;    /* ERROR */
    				else
    					 {
    					 spelercredit = atoi(ptr);
    					 if ( (ptr = strtok(NULL, " ")) == NULL )
    						errFlag = 1;    /* ERROR */
    					 else
    						delercredit = atoi(ptr);
    					 }
    				}
    			 }
    		if ( errFlag )
    			 {
    			 zijntijd = 0;
    			 printf("Geen of slechte geschiedenis File. Spel start met 100 credits elk\n");
    			 }
    		else
    			 {
    			 tp = localtime(&zijntijd);
    			 t = *tp;
    			 strftime(aLine, MAX-1, "%A, %B %d, %I:%M %p", &t);
    			 printf("Laatst gespeeld: %s\n", aLine);
    			 printf("Beschikbare credits speler: %i\n", spelercredit);
    			 printf("Beschikbare credits deler: %i\n", delercredit);
    			 }
    		printf("Druk op een toets om het spel te starten...\n");
    		(void)getch();
    		break;
    		} /*Eindigen van geschiedenis file*/
    	 else if ( key == '3' )
    		return 0;
    	 } /*Einde van de loop - negeren van andere toetsen die ingegeven zijn*/
    
    while (!done)
    	 {
    	 nieuw_spel;/*"Installeren" van de kaarten*/
    	 s_kaarten[0]=0;
    	 c_kaarten[0]=1;
    	 s_kaarten[1]=2;
    	 c_kaarten[1]=3;
    	  /*Delen van de eerste 4 kaarten*/
    
    	 s_credits=2;
    	 c_credits=2;
    	  /*Speler en computer hebben 2 kaarten*/
    
    	 slot_in_deck = 4; /*4 kaarten gedeelt*/
    
    	 clrscr(); //Het scherm leegmaken om het spel te tonen
    
    	 /*Get totalen*/
    	 c_totaal = get_totaal(c_kaarten,c_credits);
    	 s_totaal = get_totaal(s_kaarten,s_credits);
    
    	 toon_computer(c_kaarten,c_credits);
    	 toon_speler(s_kaarten, s_credits, s_totaal);
    
    	 if (c_totaal!=21 && s_totaal!=21)
    		{
    		while (s_totaal <21)
    			 {
    			 printf("\n\n\n(H)it of (S)tay?");
    			 key = getch();
    			 if (key=='h' || key=='H')
    				{
    				s_kaarten[s_credits]=slot_in_deck;
    				s_credits++;
    				slot_in_deck++;
    				}
    			 else
    				break;
    				 /*Get totaal*/
    				 c_totaal = get_totaal(c_kaarten,c_credits);
    				 s_totaal = get_totaal(s_kaarten,s_credits);
    
    			 clrscr();
    
    			 toon_computer(c_kaarten,c_credits);
    			 toon_speler(s_kaarten, s_credits, s_totaal);
              }
    		while (c_totaal<16 && s_totaal<22)
              {
              c_kaarten[c_credits]=slot_in_deck;
              c_credits++;
              slot_in_deck++;
    
              /*Get totalen*/
              c_totaal = get_totaal(c_kaarten,c_credits);
              s_totaal = get_totaal(s_kaarten,s_credits);
    
              clrscr();
    
              toon_computer2(c_kaarten,c_credits,c_totaal);
    			 toon_speler(s_kaarten,s_credits,s_totaal);
              printf("\n\n\nComputer hits");
              (void)getch();
              }
          }
    else
          {
          if (c_totaal == 21 && s_totaal<21) //Zeker zijn dat het geen gelijkspel is
    			 printf("Computer heeft Black Jack!");
          else if (c_totaal == 21) //Als c_totaal 21 is en s_totaal ook 21 is
              printf("Jullie hebben beide Black Jack!");
          else
              printf("U heeft Black Jack!");
          }
        clrscr();
        toon_computer2(c_kaarten, c_credits, c_totaal);
    	 toon_speler(s_kaarten, s_credits, s_totaal);
        printf("\n\n\n\n");
        if (s_totaal<22)
          {
          if (s_totaal>c_totaal)
    			 speler_wint();
          else if (c_totaal<22)
    			 comp_wint();
    		else
    			 speler_wint();
          }
        else
    		 comp_wint();
        printf(" Speler Credits: %i     Deler Credits: %i\n", spelercredit,
             delercredit);
    	 printf(" Speel opnieuw? (J)a of (N)ee");
        key=getch();
        if (key=='n' || key=='N')
          done=1;
        }
    
    if ( (geschiedenis = fopen(GESCHIEDENIS_FILE, "w" )) == NULL )
        printf("ERROR: Kan spelgeschiedenis niet opslaan!\n");
    else
        {
    	 fprintf(geschiedenis, "%ld %i %i\n", (long)time(NULL), spelercredit,
    			 delercredit);
        fclose(geschiedenis);
    	 }
    
    return 0;
    } /* Return naar begin */

  2. #2
    Registered User
    Join Date
    Mar 2007
    Posts
    416
    I was able to read most of your code, but what I think is happening in nieuw_spel() the cards are not being chosen at random. Try to make a random card function so every hand is different. Also, about being able to hit or stay for the dealer, you just have something switched. Switch the function of where the computer hits or stays with the speler. It might have to do with calling toon_computer and toon_speler at the same time when asked to hit or stay.

  3. #3
    Registered User
    Join Date
    Dec 2008
    Posts
    2
    Quote Originally Posted by scwizzo View Post
    I was able to read most of your code, but what I think is happening in nieuw_spel() the cards are not being chosen at random. Try to make a random card function so every hand is different. Also, about being able to hit or stay for the dealer, you just have something switched. Switch the function of where the computer hits or stays with the speler. It might have to do with calling toon_computer and toon_speler at the same time when asked to hit or stay.
    Yeah, that would be logical but I've tried changing it and it didn't worked. So I checked it all and I found it. It was a small mistake. I have forgotten the () after nieuw_spel and when I saw your quote, I realised it. Thx. (sry for my bad english).

    Grts,
    X.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. can u fix this black jack code
    By onlinegeek in forum C++ Programming
    Replies: 2
    Last Post: 01-18-2006, 09:15 PM
  2. Binary Search Trees Part III
    By Prelude in forum A Brief History of Cprogramming.com
    Replies: 16
    Last Post: 10-02-2004, 03:00 PM
  3. I need some ideas please>>
    By Unregistered in forum C Programming
    Replies: 3
    Last Post: 08-23-2002, 01:55 PM
  4. structure with 2-dim array
    By sballew in forum C Programming
    Replies: 8
    Last Post: 10-27-2001, 04:30 PM