Şimdi Ara

C de Barbut Oyunu Hakkında?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
10
Cevap
0
Favori
902
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • //2. yerde status_e ve status_t yi enum olarak tanımladık. peki onun üstündeki yerde (//2) neden tekrar enum status_e dedik. sadece enum desek yada sadece status_e desek olmaz mı. ve neden status_e yi daha sonra tanımlamışız. Soruyu tam anlatamamış olabilirim. Eğer anlaşılmazsa daha detaylı sormaya çalışırım.

    Ayrıca //3. yerde 1+rand() %6 işlemini anlatabilir misiniz. Mesela 1 in manası nedir. rand() % 6 nın manası nedir tam olarak çözemedim. Bu işlemle zar atılımı gerçekleşiyor ama neye dayanarak bunu anlamadım tam olarak. [rand() ın rasgele sayı ürettiğini biliyorum buna göre anlatırsanız benim açımdan daha faydalı olabilir]

    -Bu kodlar kitaptan birebir geçirildi.-


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

    using namespace std;

    enum status_e { GAME_CONTINUES,PLAYER_WINS,PLAYER_LOSES }; //1
    typedef enum status_e status_t; //2

    int main(void)
    {
    int die1,die2,sum,point,a;
    status_t game_status = GAME_CONTINUES;

    srand(time(NULL));
    die1 = 1+rand() %6; //3
    die2 = 1+rand() %6;
    sum = die1 + die2;
    cout <<"Zarlar:" << die1<< "+" << die2 <<"="<<sum<<endl;
    switch (sum) {
    case 7:
    case 11: game_status=PLAYER_WINS;break ;
    case 2:
    case 3:
    case 12: game_status=PLAYER_LOSES;break;
    default: game_status=GAME_CONTINUES;
    point=sum;
    cout << "Sayi:"<<point<<endl;
    break;
    }
    while (game_status == GAME_CONTINUES) {
    die1=1+rand() %6;
    die2=1+rand() %6;
    sum=die1+die2;
    cout <<"Zarlar:" << die1<< "+" << die2 <<"="<<sum<<endl;
    if(sum==point)
    game_status=PLAYER_WINS;
    else {
    if (sum==7)
    game_status=PLAYER_LOSES;
    }
    }
    if(game_status=PLAYER_WINS)
    cout<<"Oyuncu kazanir."<<endl;
    else
    cout<<"Oyuncu kaybeder."<<endl;
    cin>>a;

    system("pause");

    return EXIT_SUCCESS;



    }



    < Bu mesaj bu kişi tarafından değiştirildi vüvüzela -- 16 Aralık 2010; 0:52:15 >







  • rand() %6 --->0 ile 5 arası rastgele tam sayı üret demek...

    Ama zarların üzerindeki sayıyasal simgeler 1-6 arasındadır.

    Bu yüzden üretilen rastgele sayıya 1 eklersek (0+1 ile 5+1) arası rastgele üretilen sayı elde etmiş oluruz.

    Edit:

    enum status_e { GAME_CONTINUES,PLAYER_WINS,PLAYER_LOSES }; //1
    typedef enum status_e status_t; //2

    Burada sadece typedef ne küçük bir örnek verilmiş.(typedef) konusunu araştır.Gayet kolay ,hatta kimi zaman program içinde kullanışlı olabiliyor.Birnevi kısayol olarak düşün.

    ör:

    typedef int tamsayi;

    şeklinde bir typedef tanımlaması yaparsak program içerisinde int k=10 yerine tamsayi k=10 şeklinde kullanabilriz.


     
    #include <iostream>
    using namespace std;

    typedef int tamsayi;
    typedef char karakter;

    int main()
    {

    tamsayi t=10;
    karakter k='A';
    cout<<t<<" "<<k<<endl;

    system("pause");

    return 0;
    }



    < Bu mesaj bu kişi tarafından değiştirildi fenasi44 -- 16 Aralık 2010; 11:30:08 >




  • quote:

    Orijinalden alıntı: fenasi44

    rand() %6 --->0 ile 5 arası rastgele tam sayı üret demek...

    Ama zarların üzerindeki sayıyasal simgeler 1-6 arasındadır.

    Bu yüzden üretilen rastgele sayıya 1 eklersek (0+1 ile 5+1) arası rastgele üretilen sayı elde etmiş oluruz.

    Edit:

    enum status_e { GAME_CONTINUES,PLAYER_WINS,PLAYER_LOSES }; //1
    typedef enum status_e status_t; //2

    Burada sadece typedef ne küçük bir örnek verilmiş.(typedef) konusunu araştır.Gayet kolay ,hatta kimi zaman program içinde kullanışlı olabiliyor.Birnevi kısayol olarak düşün.

    ör:

    typedef int tamsayi;

    şeklinde bir typedef tanımlaması yaparsak program içerisinde int k=10 yerine tamsayi k=10 şeklinde kullanabilriz.


     
    #include <iostream>
    using namespace std;

    typedef int tamsayi;
    typedef char karakter;

    int main()
    {

    tamsayi t=10;
    karakter k='A';
    cout<<t<<" "<<k<<endl;

    system("pause");

    return 0;
    }









    zar konusunu anladım. teşekkürler.

    İlk sorduğum soruyu tahmin ettiğim gibi tam olarak anlatamadım. Dediğinizi biliyorum typedef ile kendimiz tip oluşturabiliyoruz fakat burda ;

    typedef enum status_e status_t;

    oluşturduğumuz status_e tipini kod içinde nerde nasıl kullanmışız onu anlamadım tam olarak.

    madem status_e yi enum olarak tanımladık neden burada : enum status_e { GAME_CONTINUES,PLAYER_WINS,PLAYER_LOSES }; tekrar enum yazdık?




  • Yukardaki örnek kod'da

    status_t game_status = GAME_CONTINUES;

    yerine

    status_e game_status = GAME_CONTINUES;

    Şeklinde de yazabilirdi.Dediğim gibi typedef'e küçük bir örnek vermiş.

    Ben sorunuzu bu şekilde anladım.Yanlış anladıysam kusura bakmayın.


    Edit: Eğer sorunuz enum 'u program içerisinde nasıl kullanıldığını soruyorsanız.Programı trace etmeniz lazım.

     

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

    using namespace std;

    enum status_e { GAME_CONTINUES,PLAYER_WINS,PLAYER_LOSES }; //1
    typedef enum status_e status_t; //2

    int main(void)
    {
    int die1,die2,sum,point,a;
    status_e game_status = GAME_CONTINUES; //enum'a başlangıc degeri ver,enum değeri GAME_CONTINUES olduğu sürece oyun aşağıdaki while döngüsü devam eder.

    srand(time(NULL));
    die1 = 1+rand() %6; //rastegele 1-6 arası tam sayı üret
    die2 = 1+rand() %6; //rastegele 1-6 arası tam sayı üret
    sum = die1 + die2; //üretilen iki sayıyı topla
    cout <<"Zarlar:" << die1<< "+" << die2 <<"="<<sum<<endl; //toplanan iki sayıyı ekranda göster
    switch (sum)// sum degerini kontrol et
    {
    case 7:
    case 11: game_status=PLAYER_WINS;break ; //eger sum değeri 11 ise game_status değerini PLAYER_WINS olarak ayarla sonraki kısımda while döngüsünde bu degerlere göre işlem yapacağız
    case 2:
    case 3:
    case 12: game_status=PLAYER_LOSES;break;
    default: game_status=GAME_CONTINUES;
    point=sum;
    cout << "Sayi:"<<point<<endl;
    break;
    }
    while (game_status == GAME_CONTINUES) { //döngü başlangıcı
    die1=1+rand() %6;
    die2=1+rand() %6;
    sum=die1+die2;
    cout <<"Zarlar:" << die1<< "+" << die2 <<"="<<sum<<endl;
    if(sum==point) //daha önce atılan zar toplam sayısı,eğer tekrar atılan zarlar öncekine eşit ise oyuncu kazanır
    game_status=PLAYER_WINS;
    else {
    if (sum==7) //eger atılan zar sayı toplamı 7 ise oyuncu kaybeder
    game_status=PLAYER_LOSES;
    }
    }
    if(game_status=PLAYER_WINS)
    cout<<"Oyuncu kazanir."<<endl;
    else
    cout<<"Oyuncu kaybeder."<<endl;
    cin>>a;

    system("pause");

    return EXIT_SUCCESS;



    }






    < Bu mesaj bu kişi tarafından değiştirildi fenasi44 -- 16 Aralık 2010; 12:11:10 >




  • Birinci enum da sadece şeklini şemalini tarif etmiş olursun. İçerisindeki sembolik sabitler sırayla 0, 1, 2 değerlerini alır.
    Bu enum u kullanmak için tıpkı değişken gibi bir bildirim gerekir. Nasıl tamsayı için "int a;" demek zorunda isek enum için de "enum status_e a;" demek lazım. Fakat ikide bir bu şekilde yazmak yorabilir bu yüzden bunu biraz kısaltırız. Mesela:

    typedef enum status_e st;
    Şimdi enum bildirimi şimdi şu şekilde yapılabilir.

    st game_status = GAME_CONTINUES; // game_status == 0
    game_status = PLAYER_LOSES; // game_status == 2
  • Ayrıca programda küçük bir hata var.Aşağıdaki şekilde olması lazım.

    if(game_status=PLAYER_WINS) --> if(game_status==PLAYER_WINS)
    if(game_status=PLAYER_LOSES) --> if(game_status==PLAYER_LOSES) şeklinde olması lazım.
  • quote:

    Orijinalden alıntı: elektro_gadget

    Birinci enum da sadece şeklini şemalini tarif etmiş olursun. İçerisindeki sembolik sabitler sırayla 0, 1, 2 değerlerini alır.
    Bu enum u kullanmak için tıpkı değişken gibi bir bildirim gerekir. Nasıl tamsayı için "int a;" demek zorunda isek enum için de "enum status_e a;" demek lazım. Fakat ikide bir bu şekilde yazmak yorabilir bu yüzden bunu biraz kısaltırız. Mesela:

    typedef enum status_e st;
    Şimdi enum bildirimi şimdi şu şekilde yapılabilir.

    st game_status = GAME_CONTINUES; // game_status == 0
    game_status = PLAYER_LOSES; // game_status == 2



    teşekkürler.

    quote:

    Orijinalden alıntı: fenasi44

    Yukardaki örnek kod'da

    status_t game_status = GAME_CONTINUES;

    yerine

    status_e game_status = GAME_CONTINUES;

    Şeklinde de yazabilirdi.Dediğim gibi typedef'e küçük bir örnek vermiş.

    Ben sorunuzu bu şekilde anladım.Yanlış anladıysam kusura bakmayın.


    Edit: Eğer sorunuz enum 'u program içerisinde nasıl kullanıldığını soruyorsanız.Programı trace etmeniz lazım.

     

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

    using namespace std;

    enum status_e { GAME_CONTINUES,PLAYER_WINS,PLAYER_LOSES }; //1
    typedef enum status_e status_t; //2

    int main(void)
    {
    int die1,die2,sum,point,a;
    status_e game_status = GAME_CONTINUES; //enum'a başlangıc degeri ver,enum değeri GAME_CONTINUES olduğu sürece oyun aşağıdaki while döngüsü devam eder.

    srand(time(NULL));
    die1 = 1+rand() %6; //rastegele 1-6 arası tam sayı üret
    die2 = 1+rand() %6; //rastegele 1-6 arası tam sayı üret
    sum = die1 + die2; //üretilen iki sayıyı topla
    cout <<"Zarlar:" << die1<< "+" << die2 <<"="<<sum<<endl; //toplanan iki sayıyı ekranda göster
    switch (sum)// sum degerini kontrol et
    {
    case 7:
    case 11: game_status=PLAYER_WINS;break ; //eger sum değeri 11 ise game_status değerini PLAYER_WINS olarak ayarla sonraki kısımda while döngüsünde bu degerlere göre işlem yapacağız
    case 2:
    case 3:
    case 12: game_status=PLAYER_LOSES;break;
    default: game_status=GAME_CONTINUES;
    point=sum;
    cout << "Sayi:"<<point<<endl;
    break;
    }
    while (game_status == GAME_CONTINUES) { //döngü başlangıcı
    die1=1+rand() %6;
    die2=1+rand() %6;
    sum=die1+die2;
    cout <<"Zarlar:" << die1<< "+" << die2 <<"="<<sum<<endl;
    if(sum==point) //daha önce atılan zar toplam sayısı,eğer tekrar atılan zarlar öncekine eşit ise oyuncu kazanır
    game_status=PLAYER_WINS;
    else {
    if (sum==7) //eger atılan zar sayı toplamı 7 ise oyuncu kaybeder
    game_status=PLAYER_LOSES;
    }
    }
    if(game_status=PLAYER_WINS)
    cout<<"Oyuncu kazanir."<<endl;
    else
    cout<<"Oyuncu kaybeder."<<endl;
    cin>>a;

    system("pause");

    return EXIT_SUCCESS;



    }










    şimdi biraz daha yerleşti kafama mantığı ama küçük şeylere çok takılıyorum. Örneğin yazdığınız kodda status_t yi neden tanımladık. kodu programa kopyaladım status_t yi sildim program sorunsuz çalıştı. 1. mesajımda kopyaladığım kodda da aynı durum söz konusu.

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

    using namespace std;

    enum status_e { GAME_CONTINUES,PLAYER_WINS,PLAYER_LOSES };

    typedef enum status_e status_t;

    int main(void)
    {
    int die1,die2,sum,point,a;
    status_t game_status = GAME_CONTINUES;

    srand(time(NULL));
    die1 = 1+rand() %6;
    die2 = 1+rand() %6;
    sum = die1 + die2;
    cout <<"Zarlar:" << die1<< "+" << die2 <<"="<<sum<<endl;
    switch (sum) {
    case 7:
    case 11: game_status=PLAYER_WINS;break ;
    case 2:
    case 3:
    case 12: game_status=PLAYER_LOSES;break;
    default: game_status=GAME_CONTINUES;
    point=sum;
    cout << "Sayi:"<<point<<endl;
    break;
    }
    while (game_status == GAME_CONTINUES) {
    die1=1+rand() %6;
    die2=1+rand() %6;
    sum=die1+die2;
    cout <<"Zarlar:" << die1<< "+" << die2 <<"="<<sum<<endl;
    if(sum==point)
    game_status=PLAYER_WINS;
    else {
    if (sum==7)
    game_status=PLAYER_LOSES;
    }
    }
    if(game_status=PLAYER_WINS)
    cout<<"Oyuncu kazanir."<<endl;
    else
    cout<<"Oyuncu kaybeder."<<endl;
    cin>>a;

    system("pause");

    return EXIT_SUCCESS;
    }


    Burda (typedef enum status_e status_t;) status_t yi silip aşağıda (status_t game_status = GAME_CONTINUES;) de status_t yerine status_e yazarsak yine aynı şey çıkıyor ortaya. Anlamadığım nokta burası. Neden status_e ve status_t diye 2 seçenek var. 1 tane olsa ne olurdu.



    < Bu mesaj bu kişi tarafından değiştirildi vüvüzela -- 16 Aralık 2010; 12:55:16 >




  • Yapay Zeka’dan İlgili Konular
    Oyunları C veya D ye Kurmak
    14 yıl önce açıldı
    c'de yardım
    14 yıl önce açıldı
    Daha Fazla Göster
  • quote:

    Orijinalden alıntı: fenasi44

    Ayrıca programda küçük bir hata var.Aşağıdaki şekilde olması lazım.

    if(game_status=PLAYER_WINS) --> if(game_status==PLAYER_WINS)
    if(game_status=PLAYER_LOSES) --> if(game_status==PLAYER_LOSES) şeklinde olması lazım.





    gördüm teşekkürler. kodda sadece bu var ama :

    if(game_status==PLAYER_WINS)

    diğer seçenek yok.
  • Ben onu c kodu zannetmiştim, c++ mış. Bu durumda biraz düzenleme yapmak lazım.

    1- C++ ta eski stil başlık dosyası tavsiye edilmez. Yani <stdlib.h> ve <time.h> yerine <cstdlib> ve <ctime> yazmak lazım. Şimdilik bir fark olmasa da ileride durum değişebilir.

    2- C++ ta fonksiyonun parametre almadığını belirtmek için void yazmaya gerek yoktur. int main(void) yerine int main() yazılmalıdır.

    3- C++ ta struct, class, union ve enum tiplerini deklare ederken bu sözcükleri tekrar yazmaya gerek yoktur. Yani bir kere enum un şeklini bildirdikten sonra kullanmak için;

    status_e game_status;
    demek yeterlidir. typedef ile başka bir isim vermeye gerek yok. Oysa bu bir c kodu olmuş olsaydı;
    enum status_e game_status; yazmak gerekecekti.

    Sanırım kaynağın deitel ın kitabı. O kitabın yazıldığı sırada c++ standardı tam oturmamıştı. Bazı bilgiler değişmiş olabilir.
  • quote:

    Orijinalden alıntı: elektro_gadget

    Ben onu c kodu zannetmiştim, c++ mış. Bu durumda biraz düzenleme yapmak lazım.

    1- C++ ta eski stil başlık dosyası tavsiye edilmez. Yani <stdlib.h> ve <time.h> yerine <cstdlib> ve <ctime> yazmak lazım. Şimdilik bir fark olmasa da ileride durum değişebilir.

    2- C++ ta fonksiyonun parametre almadığını belirtmek için void yazmaya gerek yoktur. int main(void) yerine int main() yazılmalıdır.

    3- C++ ta struct, class, union ve enum tiplerini deklare ederken bu sözcükleri tekrar yazmaya gerek yoktur. Yani bir kere enum un şeklini bildirdikten sonra kullanmak için;

    status_e game_status;
    demek yeterlidir. typedef ile başka bir isim vermeye gerek yok. Oysa bu bir c kodu olmuş olsaydı;
    enum status_e game_status; yazmak gerekecekti.

    Sanırım kaynağın deitel ın kitabı. O kitabın yazıldığı sırada c++ standardı tam oturmamıştı. Bazı bilgiler değişmiş olabilir.



    bu kaynak hocanın derste işlediği bi kaynak. Üzerinde herhangi bir yayın veya kitap ismi yok. Fotokopi halinde aldık. Bu kodlarda C diline giriş başlığı altında Türetilmiş Veri Tipleri konusunda ye alıyor. Dietel de C ve C++ diye 2 ye ayrılmış. Bu gördüğümüz kodlar C++ da yer alıyor. Ama dediğim gibi hoca o kaynaktan işlediği için bizde mecburen bu kodlarla çalışıyoruz.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.