1. #1
    Crash_and_burn's Avatar
    Registered
    16/08/06
    Posts
    110
    iTrader
    0
    Mentioned
    0 Post(s)

    Exclamation BlackJack maken in C

    Dag iedereen,

    Ik ben bezig met het spel Black Jack te maken in C met compiler Borland.
    Ondertussen heb ik al redelijk wat maar als ik de code run en op 1 druk (spel starten) verschijnt er 3 kaarten en 1 onzichtbare (wat de bedoeling is). Spijtig genoeg zijn al mijn kaarten gelijk aan harten azen. Ook kan ik als speler de kaarten van de computer opvragen en zeggen of hij extra kaarten moet nemen of niet (wat zeker niet de bedoeling is). Kan iemand mij helpen?

    Mvg,
    X.

    Hieronder mijn code:

    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 */
    no votes  

  2. #2
    Crash_and_burn's Avatar
    Registered
    16/08/06
    Posts
    110
    iTrader
    0
    Mentioned
    0 Post(s)
    Quote Originally Posted by Nocturn View Post
    This quote is hidden because you are ignoring this member. Show
    Je bent de haakjes vergeten van de function call nieuw_spel
    dus
    nieuw_spel;/*"Installeren" van de kaarten*/
    moet worden nieuw_spel();

    Misschien dat er nog andere problemen zijn maar ik heb de borland compiler niet dus kan ik het niet nakijken.
    Thx man, dit is het gewoon
    Nu werkt het perfect, schitterend gewoon
    Thx, Thx, Thx!!!

    Grts,
    X.
    no votes  

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in