Skip to main content
Tweeted twitter.com/StackCodeReview/status/1477021763309551622
deleted 28 characters in body
Source Link
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h> 
#include <stdbool.h>

int *actValue(int values[][2]){     // function to create the array based on probability
    
    int len = 0;
    for (int i = 0; i<10;i++){
        len = len + values[i][1];
    }
    int *arr = (int*)malloc(len*(sizeof(int)));
    int count=0;
    for (int q = 0; q<10; q++){
        for (int w = 0; w < values[q][1]; w++){
            arr[count]=values[q][0];
            count++;
        }
    }
    return arr;

}

int lenOfArr(int values[][2]){  //based on the probability array returns the length of it (values_w_p)
    
    int len = 0;
    for (int i = 0; i<10;i++){
        len = len + values[i][1];
    }
    return len;
    }

    int drawacard(int *valuenow, int len, int values_w_p[][2]){      // picks a random value from the array generated with actValue and takes one from the probability 
    
    int yourcard = valuenow[rand() % (len - 0) + 0];
    int sec=1;
    values_w_p[yourcard-2][sec]2][1] -= 1;
    return yourcard;
}

    }
    void name(int card) {       //prints the name of the card baed on the value

    const char *color [] = {"Clubs", "Diamonds", "Hearts", "Spades" };
    const char *nev [] = {"2","3","4","5","6","7","8","9","10","Jack", "Queen", "King","Ace" };
 
    if(card < 10){
        printf("%s of %s\n", nev[card-2], color[rand()%4]);
    }
    else if (card == 10){
        printf("%s of %s\n", nev[rand() % (11 + 1 - 8) + 8], color[rand()%4]);
    }
    else if(card == 11){
        printf("%s of %s\n", nev[12], color[rand()%4]);
    }
    }
}

    int total(int total[]){         //it will calc the total value of a the cards based on the array(player or dealer) 

    int sum = 0;
    for (int j = 0; j<16;j++){
        sum = sum + total[j];
    }
    return sum;
    }

    int main(){

    srand((unsigned int)time(0));

    int values_w_p [][2] = {  
        {2,8},{3,8},{4,8},{5,8},{6,8},{7,8},{8,8},{9,8},{10,32},{11,8}
    };
    int *ptotal = (int*)calloc(16,sizeof(int));
    int *dtotal = (int*)calloc(16,sizeof(int));
    ptotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
 
    ptotal[1]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
 
    dtotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
 
    printf("\nyour card: ");
 
    name(ptotal[0]);
 
    printf("\nyour card: ");
 
    name(ptotal[1]);
 
    printf("\ndealers card: ");
 
    name(dtotal[0]);
 
    printf("\n------------------------------------------------\n");
 
    int inp=0;
    int count=0;
    while(inp==0){
        if (total(ptotal)==21){ 
            printf("\nYou have a blackjack, lets see the dealers hand");
            dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
            printf("\ndealers card: ");
            name(dtotal[count]);
            if (total(dtotal)!=21){ 
                printf("\nCongrats! You win!");
                break;
            }
            else{
                printf("\nSadly its a TIE");
                break;
            }
        }
        printf("Hit or stand?(0 for hit, 1 for stand): ");
        scanf("%d", &inp);
        if (inp == 1){
            while(total(dtotal)<17){
                count++;
                dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p),values_w_p);
                printf("\ndealers card: ");
                name(dtotal[count]);
                if (total(dtotal)==21){
                    printf("\nThe dealer has a blackjack, you lost");
                    break;
                }
                else if(total(dtotal)>21 && total(ptotal)<22){
                    printf("\nYou win");
                    break;
                }
                else if(total(dtotal)>21 && total(ptotal)>21){
                    printf("\n Its a TIE");
                    break;
                }
                else if(total(dtotal)>16 && total(dtotal)>total(ptotal)){
                    printf("You lost");
                    break;
                } 
                else if(total(dtotal)==total(ptotal) && total(dtotal)>16){
                    printf("its a TIE");
                    break;
                }
                else if(total(dtotal)<total(ptotal) && total(dtotal)>16){
                    printf("You win");
                    break;
                }
            }
        }
        else{
            count++;
            ptotal[count+1] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
            printf("\nyour card: ");
            name(ptotal[count+1]);
            if (total(ptotal)>21){
                printf("\nYou lost");
                break;
            }
        }
    }
    return 0;
}
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h> 
#include <stdbool.h>

int *actValue(int values[][2]){     // function to create the array based on probability
    
    int len = 0;
    for (int i = 0; i<10;i++){
        len = len + values[i][1];
    }
    int *arr = (int*)malloc(len*(sizeof(int)));
    int count=0;
    for (int q = 0; q<10; q++){
        for (int w = 0; w < values[q][1]; w++){
            arr[count]=values[q][0];
            count++;
        }
    }
    return arr;

}

int lenOfArr(int values[][2]){  //based on the probability array returns the length of it (values_w_p)
    
    int len = 0;
    for (int i = 0; i<10;i++){
        len = len + values[i][1];
    }
    return len;
    }

    int drawacard(int *valuenow, int len, int values_w_p[][2]){      // picks a random value from the array generated with actValue and takes one from the probability 
    
    int yourcard = valuenow[rand() % (len - 0) + 0];
    int sec=1;
    values_w_p[yourcard-2][sec] -= 1;
    return yourcard;

    }
    void name(int card) {       //prints the name of the card baed on the value

    const char *color [] = {"Clubs", "Diamonds", "Hearts", "Spades" };
    const char *nev [] = {"2","3","4","5","6","7","8","9","10","Jack", "Queen", "King","Ace" };
    if(card < 10){
        printf("%s of %s\n", nev[card-2], color[rand()%4]);
    }
    else if (card == 10){
        printf("%s of %s\n", nev[rand() % (11 + 1 - 8) + 8], color[rand()%4]);
    }
    else if(card == 11){
        printf("%s of %s\n", nev[12], color[rand()%4]);
    }
    }

    int total(int total[]){         //it will calc the total value of a the cards based on the array(player or dealer) 

    int sum = 0;
    for (int j = 0; j<16;j++){
        sum = sum + total[j];
    }
    return sum;
    }

    int main(){

    srand((unsigned int)time(0));

    int values_w_p [][2] = {  
        {2,8},{3,8},{4,8},{5,8},{6,8},{7,8},{8,8},{9,8},{10,32},{11,8}
    };
    int *ptotal = (int*)calloc(16,sizeof(int));
    int *dtotal = (int*)calloc(16,sizeof(int));
    ptotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
    ptotal[1]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
    dtotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
    printf("\nyour card: ");
    name(ptotal[0]);
    printf("\nyour card: ");
    name(ptotal[1]);
    printf("\ndealers card: ");
    name(dtotal[0]);
    printf("\n------------------------------------------------\n");
    int inp=0;
    int count=0;
    while(inp==0){
        if (total(ptotal)==21){ 
            printf("\nYou have a blackjack, lets see the dealers hand");
            dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
            printf("\ndealers card: ");
            name(dtotal[count]);
            if (total(dtotal)!=21){ 
                printf("\nCongrats! You win!");
                break;
            }
            else{
                printf("\nSadly its a TIE");
                break;
            }
        }
        printf("Hit or stand?(0 for hit, 1 for stand): ");
        scanf("%d", &inp);
        if (inp == 1){
            while(total(dtotal)<17){
                count++;
                dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p),values_w_p);
                printf("\ndealers card: ");
                name(dtotal[count]);
                if (total(dtotal)==21){
                    printf("\nThe dealer has a blackjack, you lost");
                    break;
                }
                else if(total(dtotal)>21 && total(ptotal)<22){
                    printf("\nYou win");
                    break;
                }
                else if(total(dtotal)>21 && total(ptotal)>21){
                    printf("\n Its a TIE");
                    break;
                }
                else if(total(dtotal)>16 && total(dtotal)>total(ptotal)){
                    printf("You lost");
                    break;
                } 
                else if(total(dtotal)==total(ptotal) && total(dtotal)>16){
                    printf("its a TIE");
                    break;
                }
                else if(total(dtotal)<total(ptotal) && total(dtotal)>16){
                    printf("You win");
                    break;
                }
            }
        }
        else{
            count++;
            ptotal[count+1] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
            printf("\nyour card: ");
            name(ptotal[count+1]);
            if (total(ptotal)>21){
                printf("\nYou lost");
                break;
            }
        }
    }
    return 0;
}
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h> 
#include <stdbool.h>

int *actValue(int values[][2]){     // function to create the array based on probability
    
    int len = 0;
    for (int i = 0; i<10;i++){
        len = len + values[i][1];
    }
    int *arr = (int*)malloc(len*(sizeof(int)));
    int count=0;
    for (int q = 0; q<10; q++){
        for (int w = 0; w < values[q][1]; w++){
            arr[count]=values[q][0];
            count++;
        }
    }
    return arr;

}

int lenOfArr(int values[][2]){  //based on the probability array returns the length of it (values_w_p)
    
    int len = 0;
    for (int i = 0; i<10;i++){
        len = len + values[i][1];
    }
    return len;
}

int drawacard(int *valuenow, int len, int values_w_p[][2]){      // picks a random value from the array generated with actValue and takes one from the probability 
    
    int yourcard = valuenow[rand() % (len - 0) + 0];
    values_w_p[yourcard-2][1] -= 1;
    return yourcard;
}

void name(int card) {       //prints the name of the card baed on the value

    const char *color [] = {"Clubs", "Diamonds", "Hearts", "Spades" };
    const char *nev [] = {"2","3","4","5","6","7","8","9","10","Jack", "Queen", "King","Ace" };
 
    if(card < 10){
        printf("%s of %s\n", nev[card-2], color[rand()%4]);
    }
    else if (card == 10){
        printf("%s of %s\n", nev[rand() % (11 + 1 - 8) + 8], color[rand()%4]);
    }
    else if(card == 11){
        printf("%s of %s\n", nev[12], color[rand()%4]);
    }
}

int total(int total[]){         //it will calc the total value of a the cards based on the array(player or dealer) 

    int sum = 0;
    for (int j = 0; j<16;j++){
        sum = sum + total[j];
    }
    return sum;
}

int main(){

    srand((unsigned int)time(0));

    int values_w_p [][2] = {  
        {2,8},{3,8},{4,8},{5,8},{6,8},{7,8},{8,8},{9,8},{10,32},{11,8}
    };
    int *ptotal = (int*)calloc(16,sizeof(int));
    int *dtotal = (int*)calloc(16,sizeof(int));
    ptotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
 
    ptotal[1]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
 
    dtotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
 
    printf("\nyour card: ");
 
    name(ptotal[0]);
 
    printf("\nyour card: ");
 
    name(ptotal[1]);
 
    printf("\ndealers card: ");
 
    name(dtotal[0]);
 
    printf("\n------------------------------------------------\n");
 
    int inp=0;
    int count=0;
    while(inp==0){
        if (total(ptotal)==21){ 
            printf("\nYou have a blackjack, lets see the dealers hand");
            dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
            printf("\ndealers card: ");
            name(dtotal[count]);
            if (total(dtotal)!=21){ 
                printf("\nCongrats! You win!");
                break;
            }
            else{
                printf("\nSadly its a TIE");
                break;
            }
        }
        printf("Hit or stand?(0 for hit, 1 for stand): ");
        scanf("%d", &inp);
        if (inp == 1){
            while(total(dtotal)<17){
                count++;
                dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p),values_w_p);
                printf("\ndealers card: ");
                name(dtotal[count]);
                if (total(dtotal)==21){
                    printf("\nThe dealer has a blackjack, you lost");
                    break;
                }
                else if(total(dtotal)>21 && total(ptotal)<22){
                    printf("\nYou win");
                    break;
                }
                else if(total(dtotal)>21 && total(ptotal)>21){
                    printf("\n Its a TIE");
                    break;
                }
                else if(total(dtotal)>16 && total(dtotal)>total(ptotal)){
                    printf("You lost");
                    break;
                } 
                else if(total(dtotal)==total(ptotal) && total(dtotal)>16){
                    printf("its a TIE");
                    break;
                }
                else if(total(dtotal)<total(ptotal) && total(dtotal)>16){
                    printf("You win");
                    break;
                }
            }
        }
        else{
            count++;
            ptotal[count+1] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
            printf("\nyour card: ");
            name(ptotal[count+1]);
            if (total(ptotal)>21){
                printf("\nYou lost");
                break;
            }
        }
    }
    return 0;
}
fix code block, typos, shorten title
Source Link
greybeard
  • 6.6k
  • 3
  • 20
  • 52

A very basic black jackBlack Jack program, which just lets you play one round of black jack without any balance or betting

I just wanted to make a fun project for practise and as far as I know the program runs just fine without any flaws, but I would like to add an option to it, if a round ends to ask the user if he wants to play another round. Maybe I should put the whole thing in a while loop or something but everything I tried failed. And I should reset the first array int values_w_p[][2], but I dontdon't know what would be the best method for that. Another thing would be of course the betting and balance, but for that I have atleastat least some ideas which I will try. Tips are welcome too! Here is the code:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h> 
#include <stdbool.h>

int *actValue(int values[][2]){     // function to create the array based on probability

int len = 0;
for (int i = 0; i<10;i++){
    len = len + values[i][1];
}
int *arr = (int*)malloc(len*(sizeof(int)));
int count=0;
for (int qlen = 0; q<10; q++){
    for (int wi = 0; w < values[q][1]; w++i<10;i++){
        arr[count]=values[q][0];
    len = len + count++;values[i][1];
    }
    int *arr = (int*)malloc(len*(sizeof(int)));
    int count=0;
    for (int q = 0; q<10; q++){
        for (int w = 0; w < values[q][1]; w++){
            arr[count]=values[q][0];
            count++;
        }
    }
    return arr;

}

int lenOfArr(int values[][2]){  //based on the probability array returns the length of it (values_w_p)
    
    int len = 0;
    for (int i = 0; i<10;i++){
        len = len + values[i][1];
}
return len;
}

int drawacard(int *valuenow, int len, int values_w_p[][2]){      // picks a random value from the array generated}
 with actValue and takesreturn onelen;
 from the probability }

    int drawacard(int *valuenow, int len, int values_w_p[][2]){      // picks a random value from the array generated with actValue and takes one from the probability 
    
    int yourcard = valuenow[rand() % (len - 0) + 0];
    int sec=1;
    values_w_p[yourcard-2][sec] -= 1;
    return yourcard;

    }
    void name(int card) {       //prints the name of the card baed on the value

    const char *color [] = {"Clubs", "Diamonds", "Hearts", "Spades" };
    const char *nev [] = {"2","3","4","5","6","7","8","9","10","Jack", "Queen", "King","Ace" };
    if(card < 10){
        printf("%s of %s\n", nev[card-2], color[rand()%4]);
    }
    else if (card == 10){
        printf("%s of %s\n", nev[rand() % (11 + 1 - 8) + 8], color[rand()%4]);
    }
    else if(card == 11){
        printf("%s of %s\n", nev[12], color[rand()%4]);
    }
    }

    int total(int total[]){         //it will calc the total value of a the cards based on the array(player or dealer) 

    int sum = 0;
    for (int j = 0; j<16;j++){
        sum = sum + total[j];
    }
    return sum;
    }

    int main(){

    srand((unsigned int)time(0));

    int values_w_p [][2] = {  
        {2,8},{3,8},{4,8},{5,8},{6,8},{7,8},{8,8},{9,8},{10,32},{11,8}
    };
    int *ptotal = (int*)calloc(16,sizeof(int));
    int *dtotal = (int*)calloc(16,sizeof(int));
    ptotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
    ptotal[1]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
    dtotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
    printf("\nyour card: ");
    name(ptotal[0]);
    printf("\nyour card: ");
    name(ptotal[1]);
    printf("\ndealers card: ");
    name(dtotal[0]);
    printf("\n------------------------------------------------\n");
int inp=0;
int count=0;
while(inp==0){
    if (total(ptotal)==21){ 
        printf("\nYou have a blackjack, lets see the dealers hand");
        dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p),int values_w_p);inp=0;
        printf("\ndealers card:int ");count=0;
        namewhile(dtotal[count]inp==0);{
        if (total(dtotalptotal)!=21==21){ 
            printf("\nCongrats! You win!");
            break;
        }
        else{
            printf("\nSadly"\nYou itshave a TIE");
            break;
        }
    }
    printf("Hit or stand?(0 for hitblackjack, 1 for stand): ");
 lets see the scanf("%d",dealers &inphand");
    if (inp == 1){
        while(total(dtotal)<17){
            count++;
            dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
            printf("\ndealers card: ");
            name(dtotal[count]);
            if (total(dtotal)==21!=21){
                printf("\nThe dealer has a blackjack, you lost");
                break;
            }
            else if(total(dtotal)>21 && total(ptotal)<22){
                printf("\nYou"\nCongrats! win"You win!");
                break;
            }
            else if(total(dtotal)>21 && total(ptotal)>21){
                printf("\n"\nSadly Itsits a TIE");
                break;
            }
        }
        printf("Hit or stand?(0 for hit, 1 for stand): ");
        scanf("%d", &inp);
        if (inp == 1){
            while(total(dtotal)<17){
                count++;
                dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p),values_w_p);
                printf("\ndealers card: ");
                name(dtotal[count]);
                if (total(dtotal)==21){
                    printf("\nThe dealer has a blackjack, you lost");
                    break;
                }
                else if(total(dtotal)>21 && total(ptotal)<22){
                    printf("\nYou win");
                    break;
                }
                else if(total(dtotal)>21 && total(ptotal)>21){
                    printf("\n Its a TIE");
                    break;
                }
                else if(total(dtotal)>16 && total(dtotal)>total(ptotal)){
                    printf("You lost");
                    break;
                } 
                else if(total(dtotal)==total(ptotal) && total(dtotal)>16){
                    printf("its a TIE");
                    break;
                }
                else if(total(dtotal)<total(ptotal) && total(dtotal)>16){
                    printf("You win");
                    break;
                }
            }
        }
        else{
 if           count++;
            ptotal[count+1] = drawacard(totalactValue(dtotalvalues_w_p)<total, lenOfArr(ptotalvalues_w_p), &&values_w_p);
            printf("\nyour card: ");
            name(ptotal[count+1]);
            if (total(dtotalptotal)>16>21){
                printf("You"\nYou win"lost");
                break;
            }
        }
    }
    else{
        count++;
        ptotal[count+1] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
        printf("\nyour card: ");
        name(ptotal[count+1]);
        if (total(ptotal)>21){
            printf("\nYou lost");
            break;
        }
    }
}
    return 0;
}

A very basic black jack program, which just lets you play one round of black jack without any balance or betting

I just wanted to make a fun project for practise and as far as I know the program runs just fine without any flaws, but I would like to add an option to it, if a round ends to ask the user if he wants to play another round. Maybe I should put the whole thing in a while loop or something but everything I tried failed. And I should reset the first array int values_w_p[][2], but I dont know what would be the best method for that. Another thing would be of course the betting and balance, but for that I have atleast some ideas which I will try. Tips are welcome too! Here is the code:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h> 
#include <stdbool.h>

int *actValue(int values[][2]){     // function to create the array based on probability

int len = 0;
for (int i = 0; i<10;i++){
    len = len + values[i][1];
}
int *arr = (int*)malloc(len*(sizeof(int)));
int count=0;
for (int q = 0; q<10; q++){
    for (int w = 0; w < values[q][1]; w++){
        arr[count]=values[q][0];
        count++;
    }
}
return arr;

}

int lenOfArr(int values[][2]){  //based on the probability array returns the length of it (values_w_p)

int len = 0;
for (int i = 0; i<10;i++){
    len = len + values[i][1];
}
return len;
}

int drawacard(int *valuenow, int len, int values_w_p[][2]){      // picks a random value from the array generated with actValue and takes one from the probability 

int yourcard = valuenow[rand() % (len - 0) + 0];
int sec=1;
values_w_p[yourcard-2][sec] -= 1;
return yourcard;

}
void name(int card) {       //prints the name of the card baed on the value

const char *color [] = {"Clubs", "Diamonds", "Hearts", "Spades" };
const char *nev [] = {"2","3","4","5","6","7","8","9","10","Jack", "Queen", "King","Ace" };
if(card < 10){
    printf("%s of %s\n", nev[card-2], color[rand()%4]);
}
else if (card == 10){
    printf("%s of %s\n", nev[rand() % (11 + 1 - 8) + 8], color[rand()%4]);
}
else if(card == 11){
    printf("%s of %s\n", nev[12], color[rand()%4]);
}
}

int total(int total[]){         //it will calc the total value of a the cards based on the array(player or dealer) 

int sum = 0;
for (int j = 0; j<16;j++){
    sum = sum + total[j];
}
return sum;
}

int main(){

srand((unsigned int)time(0));

int values_w_p [][2] = {  
    {2,8},{3,8},{4,8},{5,8},{6,8},{7,8},{8,8},{9,8},{10,32},{11,8}
};
int *ptotal = (int*)calloc(16,sizeof(int));
int *dtotal = (int*)calloc(16,sizeof(int));
ptotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
ptotal[1]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
dtotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
printf("\nyour card: ");
name(ptotal[0]);
printf("\nyour card: ");
name(ptotal[1]);
printf("\ndealers card: ");
name(dtotal[0]);
printf("\n------------------------------------------------\n");
int inp=0;
int count=0;
while(inp==0){
    if (total(ptotal)==21){ 
        printf("\nYou have a blackjack, lets see the dealers hand");
        dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
        printf("\ndealers card: ");
        name(dtotal[count]);
        if (total(dtotal)!=21){ 
            printf("\nCongrats! You win!");
            break;
        }
        else{
            printf("\nSadly its a TIE");
            break;
        }
    }
    printf("Hit or stand?(0 for hit, 1 for stand): ");
    scanf("%d", &inp);
    if (inp == 1){
        while(total(dtotal)<17){
            count++;
            dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p),values_w_p);
            printf("\ndealers card: ");
            name(dtotal[count]);
            if (total(dtotal)==21){
                printf("\nThe dealer has a blackjack, you lost");
                break;
            }
            else if(total(dtotal)>21 && total(ptotal)<22){
                printf("\nYou win");
                break;
            }
            else if(total(dtotal)>21 && total(ptotal)>21){
                printf("\n Its a TIE");
                break;
            }
            else if(total(dtotal)>16 && total(dtotal)>total(ptotal)){
                printf("You lost");
                break;
            } 
            else if(total(dtotal)==total(ptotal) && total(dtotal)>16){
                printf("its a TIE");
                break;
            }
            else if(total(dtotal)<total(ptotal) && total(dtotal)>16){
                printf("You win");
                break;
            }
        }
    }
    else{
        count++;
        ptotal[count+1] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
        printf("\nyour card: ");
        name(ptotal[count+1]);
        if (total(ptotal)>21){
            printf("\nYou lost");
            break;
        }
    }
}
return 0;
}

A very basic Black Jack program, which just lets you play one round without any balance or betting

I just wanted to make a fun project for practise and as far as I know the program runs just fine without any flaws, but I would like to add an option to it, if a round ends to ask the user if he wants to play another round. Maybe I should put the whole thing in a while loop or something but everything I tried failed. And I should reset the first array int values_w_p[][2], but I don't know what would be the best method for that. Another thing would be of course the betting and balance, but for that I have at least some ideas which I will try. Tips are welcome too! Here is the code:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h> 
#include <stdbool.h>

int *actValue(int values[][2]){     // function to create the array based on probability
    
    int len = 0;
    for (int i = 0; i<10;i++){
        len = len + values[i][1];
    }
    int *arr = (int*)malloc(len*(sizeof(int)));
    int count=0;
    for (int q = 0; q<10; q++){
        for (int w = 0; w < values[q][1]; w++){
            arr[count]=values[q][0];
            count++;
        }
    }
    return arr;

}

int lenOfArr(int values[][2]){  //based on the probability array returns the length of it (values_w_p)
    
    int len = 0;
    for (int i = 0; i<10;i++){
        len = len + values[i][1];
    }
    return len;
    }

    int drawacard(int *valuenow, int len, int values_w_p[][2]){      // picks a random value from the array generated with actValue and takes one from the probability 
    
    int yourcard = valuenow[rand() % (len - 0) + 0];
    int sec=1;
    values_w_p[yourcard-2][sec] -= 1;
    return yourcard;

    }
    void name(int card) {       //prints the name of the card baed on the value

    const char *color [] = {"Clubs", "Diamonds", "Hearts", "Spades" };
    const char *nev [] = {"2","3","4","5","6","7","8","9","10","Jack", "Queen", "King","Ace" };
    if(card < 10){
        printf("%s of %s\n", nev[card-2], color[rand()%4]);
    }
    else if (card == 10){
        printf("%s of %s\n", nev[rand() % (11 + 1 - 8) + 8], color[rand()%4]);
    }
    else if(card == 11){
        printf("%s of %s\n", nev[12], color[rand()%4]);
    }
    }

    int total(int total[]){         //it will calc the total value of a the cards based on the array(player or dealer) 

    int sum = 0;
    for (int j = 0; j<16;j++){
        sum = sum + total[j];
    }
    return sum;
    }

    int main(){

    srand((unsigned int)time(0));

    int values_w_p [][2] = {  
        {2,8},{3,8},{4,8},{5,8},{6,8},{7,8},{8,8},{9,8},{10,32},{11,8}
    };
    int *ptotal = (int*)calloc(16,sizeof(int));
    int *dtotal = (int*)calloc(16,sizeof(int));
    ptotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
    ptotal[1]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
    dtotal[0]= drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
    printf("\nyour card: ");
    name(ptotal[0]);
    printf("\nyour card: ");
    name(ptotal[1]);
    printf("\ndealers card: ");
    name(dtotal[0]);
    printf("\n------------------------------------------------\n");
    int inp=0;
    int count=0;
    while(inp==0){
        if (total(ptotal)==21){ 
            printf("\nYou have a blackjack, lets see the dealers hand");
            dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
            printf("\ndealers card: ");
            name(dtotal[count]);
            if (total(dtotal)!=21){ 
                printf("\nCongrats! You win!");
                break;
            }
            else{
                printf("\nSadly its a TIE");
                break;
            }
        }
        printf("Hit or stand?(0 for hit, 1 for stand): ");
        scanf("%d", &inp);
        if (inp == 1){
            while(total(dtotal)<17){
                count++;
                dtotal[count] = drawacard(actValue(values_w_p), lenOfArr(values_w_p),values_w_p);
                printf("\ndealers card: ");
                name(dtotal[count]);
                if (total(dtotal)==21){
                    printf("\nThe dealer has a blackjack, you lost");
                    break;
                }
                else if(total(dtotal)>21 && total(ptotal)<22){
                    printf("\nYou win");
                    break;
                }
                else if(total(dtotal)>21 && total(ptotal)>21){
                    printf("\n Its a TIE");
                    break;
                }
                else if(total(dtotal)>16 && total(dtotal)>total(ptotal)){
                    printf("You lost");
                    break;
                } 
                else if(total(dtotal)==total(ptotal) && total(dtotal)>16){
                    printf("its a TIE");
                    break;
                }
                else if(total(dtotal)<total(ptotal) && total(dtotal)>16){
                    printf("You win");
                    break;
                }
            }
        }
        else{
            count++;
            ptotal[count+1] = drawacard(actValue(values_w_p), lenOfArr(values_w_p), values_w_p);
            printf("\nyour card: ");
            name(ptotal[count+1]);
            if (total(ptotal)>21){
                printf("\nYou lost");
                break;
            }
        }
    }
    return 0;
}
edited tags
Link
Source Link
Loading