Skip to main content

C ‘de Barbut Oyunu

Kaynak kitap olarak yararlandığım Deitel kardeşlerin yazmış olduğu How to Program C  kitabında   ele alınan örneklerden birini buradan paylaşmak istedim. Bu programın genel amacı Barbut oyunu yazmaktan ziyade rastgele değerlerin C  de nasıl üretiğidiğini  kavramak   ve  durum kontrol değişkenlerinin anlaşılmasını sağlamaktır.

Yapılmak istenen Barbut oyunun kuralları şu şekildedir.

  • Oyuncu iki adet zarı aynı anda atar.  Her bir zarda 1-6 arasında sayılar vardır.
  • Eğer oyuncu  zarı ilk attığında iki zarın toplamı  7 yada 11 ise oyun kazanılmış sayılır.
  • Eğer oyuncu ilk atışını yaptığında zarların toplamı  2,3,12  ‘den biriyse oyun kaybedilmiştir.
  • Eğer bu sayılardan biri atılamazsa oyuncun attığı sayi oyunu kazanma sayısı olur.  Yani diyelim ki 3 ve 2 zarı geldiyse.  Bu iki zarın toplamı 5 olduğundan oyuncunun attığı zarların toplamı  5  olana kadar devam edecektir. Ama bu süreçte eğer   7 sayisi gelirse oyun kaybedilmiş sayılır.

Oyunun kuralları bu şekildedir. Şimdi kaynak kodları  mümkün olduğunca açıklamalarla destekleyerek Paylasayım .

 
 
/** Bu Oyun Barbut Oyununun gerçekler. Barbut Oyununun Kuralları Açık ve Nettir
1-Oyunki İki adet zarı aynı anda atar. Zarın iki yüzü vardır ve bu zarlarda 1-6 arası sayılar vardır..
2-Eğer oyuncu ilk atısta 7 ydada 11 atarsa oyunu kazanır.  2,3,12 gelirse oyuncu kaybeder.
 Eğer bu sayılardan birini atamazsa attıgı sayı   oyunucunun kazanma sayısı olur. Misal oyuncu   3+2=5 attı diyelim
 oyuncu 5 sayisini atana kadar oyuna devam eder. Ama bu sürede eğer 7 atarsa oyunu kaybeder.
**/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int zarAt(void);
int main()
{
int toplam,oyunDurumu,oyuncuPuani;    
srand(time(NULL)); 
/* Srand kullanarak programın her defasında farklı sayılar
üretmesini sağladık.*/
 
toplam=zarAt();
/*Toplam değiskeni ZarAt isimli fonksiyomn cagrısının  sonucunu tutar. */
switch(toplam){
case 7: case 11 : 
 /* İlk atısta zarın 7 yada 11 gelme durumu */
      oyunDurumu=1;  // İlk atısta kazandı.
      break;
case 2: case 3 : case 12 :  
// ilk atısta kaybetti
      oyunDurumu=2;
      break;
default : 
/*eğer atılan ilk zar  7,11,2,3,12 değilse 
atılan zarların toplamı oyun sayısı olacaktır */
      oyunDurumu=0;
      oyuncuPuani=toplam; // Oyuncu Puanı zarların toplamı eşittir. 
      printf("Oyunun Kazanacagi Zar  %d :  \n",oyuncuPuani);
      break;
}
 
while(oyunDurumu==0)
{
  toplam=zarAt(); 
  /*Eğer oyun durumu 0 sa. Demekki ilk atısta gerekli sayilardan biri atılamamıs ve zarların toplamı oyun sayısı olmuştur. 
  Ve yeniden zar atma işlemi yapılması gerekemektedir. Oyun durumu 0 olduğu sürece bir döngü açtık. 
  */
   if (toplam==oyuncuPuani) // Eğer yeni toplam puana eşitse oyun kazaıldı.
     oyunDurumu=1;
   else
   if (toplam==7) //Eğer yeni toplam 7 ise oyun kaybedildi. 
     oyunDurumu=2;
}       
if(oyunDurumu==1)
printf("Oyuncu Kazandi...\n");
else 
printf("Oyuncu Kaybetti..\n");       
 
 
system("PAUSE");
return 0;
}
 
// Zar Atma Fonksiyonu Tanımlanır..
int zarAt(void)
{
    int zar1,zar2,toplamzar;
    zar1=1+rand()%6; // Birinci zar 1-6 arasında bir sayi .
    zar2=1+rand()%6;  // 2. Zar 1-6  arasında bir sayı üretir.
    toplamzar=zar1+zar2; // Zarların toplamı
    printf("Oyuncu %d + %d = %d atti. \n",zar1,zar2,toplamzar);
    return toplamzar;       
}

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Aytaç Cici

İstanbul Üniversitesi Bilgisayar Mühendisliği mezunu bir Yazılım Geliştirici. Çeşitli zamanlarda Java, PHP, C# ve Delphi gibi diller kullanarak yazılım geliştirmiştir. Bir dönem SEO alanında da çalışmalar yapmıştır.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Email
Print