Crash_and_burn
Legacy Member
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:
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 */
