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; } ~~~