C ile zar oyunu yapımı

Katılım
12 Aralık 2015
Mesajlar
6.692
Makaleler
9
Çözümler
11
Daha fazla  
Sistem Özellikleri
i7 10750H || GTX 1660 Ti 6 GB Mobile || 2x16 GB RAM || 512 GB NVMe M.2 SSD || 1080p 144 Hz IPS Panel || Windows 11-macOS Big Sur || Acer Nitro 5 AN515-55 2020 ||
Cinsiyet
Erkek
Meslek
Öğrenci
Kurallar:

1-İki zar atılır
2-Zarların toplamı hesaplanır
3-İlk atışta 7 veya 11 gelirse oyuncu kazanır
4-İlk atışta 2, 3 veya 12 gelirse oyuncu kaybeder
5-İlk atışta 4,5,6,8,9,10 gelirse bu oyuncunun puanı oluyor.
6-Oyuncu 7 atmadan önce kendi puanını tutturmalıdır.

Bu kuralları olan bir oyunun C kodunu yazmam gerekli. Bir yere kadar geldim ancak hatamı veya doğrularımı göremiyorum. Direkt cevaptan ziyade kendi kodum tamamen yanlış değilse üzerinden tavisye, öneri almak benim için çok iyi olur.

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


int main() {
   
    int zar1,zar2,toplam,puan,i=0;
   
   
    srand(time(NULL));
   
    zar1 = rand() % 6 + 1;
    zar2 = rand() % 6 + 1;
   
    toplam = zar1 + zar2;
   
    if(i==0) {
   
   
    switch(toplam) {
       
        case 7:
       
            printf("Tebrikler. Oyunu kazandiniz...\n");
            break;
           
           
        case 11:
           
            printf("Tebrikler. Oyunu kazandiniz...\n");
            break;
           
           
        case 2:
           
            printf("Oyunu kaybettiniz...\n");
            break;
           
        case 3:
           
            printf("Oyunu kaybettiniz...\n");
            break;
           
        case 12:
       
            printf("Oyunu kaybettiniz...\n");
            break;
           
           
        case 4:
           
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
           
        case 5:
           
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
           
        case 6:
           
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
           
        case 8:
           
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
           
        case 9:
           
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
           
        case 10:
           
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
    }
}

    if(i==1 && puan==toplam) {
        printf("Puan ve skorunuz ayni, bundan sonra 7 atarsaniz oyunu kazanabilirsiniz...\n");
        i++;
    }
   
    if(i==2 && toplam == 7) {
       
        printf("Oyunu puan esitligi ve sonrasinda 7 atarak kazandiniz...\n");
    }

   
   
    return 0;
}

Bu şekilde bir şey yaptım ancak 7. kural denk gelmedi ya da ben bir hata yaptım. Diğer kuralar çalışıyor, zaten basit idi.
 
Anladığım kadarıyla oyun bitmediği sürece zarların tekrar tekrar atılması gerekiyor. Bunun için programın çatısını sonsuz bir döngü ile kurun. Yani oyun bitmediği sürece sürekli zar atılsın.
Yazdığım kod zarların ilk atıldığı durum içindi. Diğer durumlar için de bir if-else yapısı kurabilirsiniz.
Biraz deneyeyim. Bir de bir şeyi merak ettim bu örneğin zorluğu nedir ortalama olarak ? Yani kolay kategorisine girer mi ? Yeni öğrenen birisi için soruyorum elbette yanlış anlaşılmasın bilen birisi için çerez bir şeydir. Zorlanıyorum ama benm eksikliğim ana etken mi bilmiyorum. Bu yazdığım kodu bile çok zaman harcayarak oluşturdum ve hepsi yanlış sanırım, değil mi ?
 
Son düzenleme:
Biraz deneyeyim. Bir de bir şeyi merak ettim bu örneğin zorluğu nedir ortalama olarak ? Yani kolay kategorisine girer mi ? Yeni öğrenen birisi için soruyorum elbette yanlış anlaşılmasın bilen birisi için çerez bir şeydir. Zorlanıyorum ama benm eksikliğim ana etken mi bilmiyorum. Bu yazdığım kodu bile çok zaman harcayarak oluşturdum ve hepsi yanlış sanırım, değil mi ?
Hepsi yanlış demek yanlış olur :) Sonuçta kodunuz çalışıyor ve bir sonuç üretiyor. Önemli olan sizin istediğiniz kriterlere göre sonuç üretecek hale gelmesi. İlk defa programlama öğrenen biri için elbette çok kolay değil.
 
[CODE lang="c" title="Bu da var:"]// kutuphaneler
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// onceden belirlenmis sayi araligi 1-50
#define MAX 50
#define MIN 1

// fonksiyon giris
int main() {

int SakliSayi = 0, GirilenSayi = 0;
srand(time(NULL));
SakliSayi = (rand() % (MAX - MIN + 1)) + MIN;

// while dongusu
while (SakliSayi != GirilenSayi) {
// sayi nedir sorusu
printf("Sayi nedir ?:");
scanf("%d", &GirilenSayi);

// eger girilen sayi dogru ise bu if dongusu calistir
if (GirilenSayi == SakliSayi)
printf("Sayi dogru, kazandiniz!\n");

// yoksa if den cik, ekrana biraz in yazdir
else {
if (GirilenSayi > SakliSayi)
printf("Biraz in...\n");
// yoksa ekrana biraz cik yazdir
else printf("Biraz cik...\n");
}
}
return EXIT_SUCCESS;
}[/CODE]
Switch case gereksiz oluyor, çünkü switch case genelde menü tarzı GUI olunca kullanıyoruz yani sendeki kodun içerisinde görünmüyor ama var orda, gereksiz bence. Burda kaybetme yok ama if (GirilenSayi != SakliSayi) dan degisik ise, printf("kaybettin"); kodu editleyip kendine uydurabilirsin.
 
Son düzenleme:
[CODE lang="c" title="Bu da var:"]// kutuphaneler
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// onceden belirlenmis sayi araligi 1-50
#define MAX 50
#define MIN 1

// fonksiyon giris
int main() {

int SakliSayi = 0, GirilenSayi = 0;
srand(time(NULL));
SakliSayi = (rand() % (MAX - MIN + 1)) + MIN;

// while dongusu
while (SakliSayi != GirilenSayi) {
// sayi nedir sorusu
printf("Sayi nedir ?:");
scanf("%d", &GirilenSayi);

// eger girilen sayi dogru ise bu if dongusu calistir
if (GirilenSayi == SakliSayi)
printf("Sayi dogru, kazandiniz!\n");

// yoksa if den cik, ekrana biraz in yazdir
else {
if (GirilenSayi > SakliSayi)
printf("Biraz in...\n");
// yoksa ekrana biraz cik yazdir
else printf("Biraz cik...\n");
}
}
return EXIT_SUCCESS;
}[/CODE]
Switch case gereksiz oluyor, çünkü switch case genelde menü tarzı GUI olunca kullanıyoruz yani sendeki kodun içerisinde görünmüyor ama var orda, gereksiz bence. Burda kaybetme yok ama if (GirilenSayi != SakliSayi) dan degisik ise, printf("kaybettin"); kodu editleyip kendine uydurabilirsin.
Gerekli düzenlemeleri yapıp deneyeceğim.
 
Gerekli düzenlemeleri yapıp deneyeceğim.

Bir de şunu ekleyeyim, şaşkınlık yaşıyorum şu anda, ben bunu öğrencilik zamanlarımda yapmıştım, okulda, 3 sene oldu, sakladım öyle dedim belki lazım olur, baktım senin konu hemen gönderdim yararı olursa ne mutlu bize b-).
 
Son düzenleyen: Moderatör:
Kurallar:

1-İki zar atılır
2-Zarların toplamı hesaplanır
3-İlk atışta 7 veya 11 gelirse oyuncu kazanır
4-İlk atışta 2, 3 veya 12 gelirse oyuncu kaybeder
5-İlk atışta 4,5,6,8,9,10 gelirse bu oyuncunun puanı oluyor.
6-Oyuncu 7 atmadan önce kendi puanını tutturmalıdır.

Bu kuralları olan bir oyunun C kodunu yazmam gerekli. Bir yere kadar geldim ancak hatamı veya doğrularımı göremiyorum. Direkt cevaptan ziyade kendi kodum tamamen yanlış değilse üzerinden tavisye, öneri almak benim için çok iyi olur.

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


int main() {
  
    int zar1,zar2,toplam,puan,i=0;
  
  
    srand(time(NULL));
  
    zar1 = rand() % 6 + 1;
    zar2 = rand() % 6 + 1;
  
    toplam = zar1 + zar2;
  
    if(i==0) {
  
  
    switch(toplam) {
      
        case 7:
      
            printf("Tebrikler. Oyunu kazandiniz...\n");
            break;
          
          
        case 11:
          
            printf("Tebrikler. Oyunu kazandiniz...\n");
            break;
          
          
        case 2:
          
            printf("Oyunu kaybettiniz...\n");
            break;
          
        case 3:
          
            printf("Oyunu kaybettiniz...\n");
            break;
          
        case 12:
      
            printf("Oyunu kaybettiniz...\n");
            break;
          
          
        case 4:
          
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
          
        case 5:
          
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
          
        case 6:
          
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
          
        case 8:
          
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
          
        case 9:
          
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
          
        case 10:
          
            puan= toplam;
            printf("Puaniniz: %d\n",puan);
            i++;
            break;
    }
}

    if(i==1 && puan==toplam) {
        printf("Puan ve skorunuz ayni, bundan sonra 7 atarsaniz oyunu kazanabilirsiniz...\n");
        i++;
    }
  
    if(i==2 && toplam == 7) {
      
        printf("Oyunu puan esitligi ve sonrasinda 7 atarak kazandiniz...\n");
    }

  
  
    return 0;
}

Bu şekilde bir şey yaptım ancak 7. kural denk gelmedi ya da ben bir hata yaptım. Diğer kuralar çalışıyor, zaten basit idi.
Aynı ödevi yapmam gerekiyor ve bende sıkıntı yaşıyorum. Acaba çözebildiniz mi ? Ödevi yapabildiyseniz yardımcı olabilir misiniz ?
 
Aynı ödevi yapmam gerekiyor ve bende sıkıntı yaşıyorum. Acaba çözebildiniz mi ? Ödevi yapabildiyseniz yardımcı olabilir misiniz ?
Maalesef hocam bir yerden sonra bıraktım ve uzun zamandır C programlaya bakmadığım için unuttum çoğu şeyi.
 

Yeni konular

Geri
Yukarı