Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
9
Cevap
903
Tıklama
0
Öne Çıkarma
C de Barbut Oyunu Hakkında?
V
15 yıl
Yüzbaşı
Konu Sahibi

//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 >

F
15 yıl
Yüzbaşı

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 >
Bu mesaja 1 cevap geldi.
V
15 yıl
Yüzbaşı
Konu Sahibi

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?


Bu mesaja 1 cevap geldi.
F
15 yıl
Yüzbaşı

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 >
Bu mesaja 2 cevap geldi.
G
15 yıl
Yarbay

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


Bu mesaja 1 cevap geldi.
F
15 yıl
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
V
15 yıl
Yüzbaşı
Konu Sahibi

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 >

V
15 yıl
Yüzbaşı
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.
G
15 yıl
Yarbay

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 mesaja 1 cevap geldi.
V
15 yıl
Yüzbaşı
Konu Sahibi

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.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.