Translate

7 Temmuz 2014 Pazartesi

My First Game: Blackjack in C Programming


     C’deki ilk oyun deneyimim olması ve bu nedenle benim için manevi değeri yüksek olmasından dolayı blog’umda paylaşmak istedim. Oyun multiplayer olarak da sunulabilir ben aynı kodları tekrar yazmak zorunda kalmamak için single olarak tasarladım.

     Blackjack genelde ülkemizde 21 olarak bilinen bir kart oyunudur. Yirmibir hakkında bilgiye buradan ulaşabilirsiniz. Oyunu yazarken parça parça birçok algoritma çıkardım. Parça parça olmasının sebebi Blackjack'te birçok kuralın olması, bu kuralları konu sonunda belirteceğim. Bu nedenle benim kodlarım 200-300 satır tuttu. Az ya da çok bu görecelidir. Hiçbir yerden yardım almadan, kendi programlama tekniğimi kullanmamdan dolayı birçok döngü kullandım. Bu döngüler fonksiyon kullanılarak daha aza indirilebilir.

     Oyunu Code::Blocks ve DEV-C geliştirme ortamlarında denedim herhangi bir sorunla karşılaşmadım, uyumlulukta bir sorun yok.


     Bu oyunu yazarken dikkat edilmesi gereken başlıca Blackjack kuralları:

  • Dağıtıcı elindeki kartların sayı toplamı 16 ve daha az ise 16'yı geçinceye kadar mecburen kart çekmeye devam eder.
  • Dağıtıcı ya da  oyuncunun eline as gelirse 1 ya da 11 puan olmak üzere kişinin insiyatifine göre hareket edebilme olanağı 
  • Dağıtıcı ya da oyuncunun elindeki kartların sayı toplamı 21'i geçme durumu ve sonuçları
  • Dağıtıcının bir kartını açık dağıtması

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

int cardpull( void );
int cardpull( void ){
int card;

  card = rand( ) % 52;
  return card;
}

int main()
{

    int dizi[52]={1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10};
int cost=5000;
    printf("Welcome to Blackjack (This game prepared by Berkay SAYDAM)\n");
    printf("\nYou have 5000$.");
    do{
            int card=0,number=0,comhit=0,number2=0,comhit2=0,user=0,computer=0,output=0,comoutput=0,casino=0,comhit3=0,menu=0,result=0,value=0,stand=1;
    do{
    printf("How much money do you put on?");
    scanf("%d",&value);
    }while(value>cost);

    do{
        srand ( time ( NULL ) );
        card = cardpull(  );
        number=dizi[card];
        dizi[card]=0;
        }while(number==0);
        printf("Your first card is %d point.\n",number);
    do{
        srand ( time ( NULL ) );
        card = cardpull(  );
        comhit=dizi[card];
        dizi[card]=0;
        }while(comhit==0);
        printf("Computer's first card is %d point.\n",comhit);
    do{
        srand ( time ( NULL ) );
        card = cardpull(  );
        number2=dizi[card];
        dizi[card]=0;
        }while(number2==0);
        printf("Your second card is %d point.\n",number2);
    do{
        srand ( time ( NULL ) );
        card = cardpull(  );
        comhit2=dizi[card];
        dizi[card]=0;
        }while(comhit2==0);
    user=number+number2;
    computer=comhit+comhit2;
    if(number==1 && number2==1){
        user=2;
        printf("Your total is 2 \n");
    }
    else if(number==1 || number2==1){
        if(number==1){
            output=11+number2;
        }
        else{
            output=11+number;
        }
        printf("Your total is %d/%d\n",user,output);
    }
    else{
        printf("Your total is %d\n",user);
    }
    if(comhit==1 && comhit2==1){
        computer=2;
    }
    else if(comhit==1 || comhit2==1){
        if(comhit==1){
            comoutput=11+comhit2;
        }
        else{
            comoutput=11+comhit;
        }
    }
    else{
        comoutput=0;
    }
if(comoutput!=0){
    if(computer>16 || comoutput>16){
        if(computer>comoutput){
            casino=computer;
        }
        else{
            casino=comoutput;
        }
    }
   else if(computer>16 && comoutput<16){
    casino=computer;
   }
   else if(computer<16 && comoutput>16){
    casino=comoutput;
   }
   else{
        do{
        do{
        srand ( time ( NULL ) );
        card = cardpull(  );
        comhit3=dizi[card];
        dizi[card]=0;
        }while(comhit3==0);
        computer=computer+comhit3;
        comoutput=comoutput+comhit3;
        if(comhit3==1){
    comoutput=10+comhit3;
        }
        else{}
if(comoutput>21){
            comoutput=0;
        }
        else{}
if(computer>21){
    computer=45;
}
else{}
        }while(computer<16 && comoutput<16);
        if(computer==45){
            computer=0;
        }
        if(computer>comoutput){
            casino=computer;
        }
        else{
            casino=comoutput;
        }
   }
}
   if(comoutput==0){
    if(computer>16){
        casino=computer;
    }
    else{
            do{
        do{
        srand ( time ( NULL ) );
        card = cardpull(  );
        comhit3=dizi[card];
        dizi[card]=0;
        }while(comhit3==0);
        computer=computer+comhit3;
        if(comhit3==1){
    comoutput=computer;
    comoutput=comoutput+11;
    ++computer;
        if(comoutput>21){
            comoutput=0;
        }
        else{}
        }
        else{}
if(comoutput>21){
            comoutput=0;
        }
        else{}
if(computer>21){
    computer=45;
}
        }while(computer<16 && comoutput<16);
        if(computer==45){
            computer=0;
        }
        if(computer>comoutput){
            casino=computer;
        }
        else{
            casino=comoutput;
        }
    }
   }
do
    {
printf("\n(1)Hit\n(2)Stand\n(3)Double");
scanf("%d",&menu);
switch(menu){
case 1:
    do{
        srand ( time ( NULL ) );
        card = cardpull(  );
        comhit3=dizi[card];
        dizi[card]=0;
        }while(comhit3==0);
        if(comhit3==1){
        ++user;
    output=10+comhit3;
        }
       else if(output!=0){
        user=user+comhit3;
        output=output+comhit3;
       }
       else{
        user=user+comhit3;
       }
        if(output>21 || output==0){
            output=45;
        }
        else{}
if(user<22 && output!=45){
printf("Your total is %d/%d",user,output);}
else if(user<22 && output==45){
printf("Your total is %d",user);
}
else{
    printf("You passed 21 , sorry GAME OVER!");
    cost=cost-value;
    stand=0;
}
break;
case 2:
    stand=0;
if(output>21 || output==0){
            output=45;
        }
        else{}
    break;
case 3:
    value=value*2;
    printf("Your value be increased to %d (Double) ",value);
    break;
default:
    printf("Please enter number of menu");
    stand=1;
    break;
}
    }while(stand!=0);
if(casino==0){
    printf("Casino passed to 21, So Casino Loser You Win.");
    cost=cost+value;
}
else if(user<22 && output!=45){
    if(user<output){
        result=output;
    }
    else{
        result=user;
    }
 printf("Casino: %d \n You: %d \n",casino,result);
 if(casino<result){
    printf("You are winner.");
    cost=cost+value;
    printf("Now,you have %d$.",cost);
 }
 else if(casino>result){
    printf("You are loser.");
    cost=cost-value;
    printf("Now,you have %d$.",cost);
 }
 else{
    printf("There isn't winner.");
       printf("Now,you have %d$.",cost);
 }
}
else if(user<22 && output==45){
    result=user;
    printf("Casino: %d \n You: %d \n",casino,result);
 if(casino<result){
    printf("You are winner.");
     cost=cost+value;
    printf("Now,you have %d$.",cost);
 }
 else if(casino>result){
    printf("You are loser.");
    cost=cost-value;
    printf("Now,you have %d$.",cost);
 }
 else{
    printf("There isn't winner.");
     printf("Now,you have %d$.",cost);
 }
}
}while(cost>0);
    return 0;
}