C'de Zar Oyunu

mutluçocuk

Asistan
Katılım
27 Haziran 2012
Mesajlar
253
Reaksiyon puanı
2
Puanları
18
S.A.
Bir zar oyunu yazmam gerekiyor.(Kendisi dönem ödevim).Takıldığım noktalarda bana yardımcı olabilir misiniz?

Mesela şu konuda ne yapablirim?:confused1:

Kod:
void zarAt(void){
	int zar[5],i;
        


	for( i = 0; i < 5; i++){
		zar[i] = 1 + rand() % 6;
		printf("%d. zar :%d\n", i + 1 , zar[i] );
	}
}

Bu fonksiyonla 5 zar sallayıp değerlerini zar dizisine atıyorum ama ben bu zar dizisine ana fonksiyon altında erişebilir miyim?:confused1:
 

ugurturhal

Asistan
Katılım
10 Mayıs 2010
Mesajlar
194
Reaksiyon puanı
1
Puanları
16
ve A.s

return ile döndürürsen erişebilirsin diye düşünüyorum??
 

sinan60

Öğrenci
Katılım
3 Eylül 2009
Mesajlar
81
Reaksiyon puanı
1
Puanları
8
Kod:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>


int *zarAt(void){
    int *zar,i;
    zar=(int*)calloc(5,sizeof(int));
    srand(time(NULL));
    for( i = 0; i < 5; i++){
        zar[i] = 1 + rand() % 6;
    }
return zar;
}
main()
{
 int i,*zar;
 zar=(int*)calloc(5,sizeof(int));
 zar=zarAt();
 for(i=0;i<5;i++)
 printf("%d. zar :%d\n", i + 1 , zar[i] );
 getch();
}
Bu şekilde yaparsan ana fonksiyona göndermiş olursun.
 

mutluçocuk

Asistan
Katılım
27 Haziran 2012
Mesajlar
253
Reaksiyon puanı
2
Puanları
18
Kod:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>


int *zarAt(void){
    int *zar,i;
    zar=(int*)calloc(5,sizeof(int));
    srand(time(NULL));
    for( i = 0; i < 5; i++){
        zar[i] = 1 + rand() % 6;
    }
return zar;
}
main()
{
 int i,*zar;
 zar=(int*)calloc(5,sizeof(int));
 zar=zarAt();
 for(i=0;i<5;i++)
 printf("%d. zar :%d\n", i + 1 , zar[i] );
 getch();
}
Bu şekilde yaparsan ana fonksiyona göndermiş olursun.

Abi senin kod üzerinden uğraştım ama istediğimi elde edemedim:(.

Bana fikir verebilir misiniz oyunu yazma konusunda.
Oyun şöyle:Elimizde 5 zar var.Bu zarları 3 kere sallayabiliyoruz.
Salladığımız zarlardan bir kısmını kenara ayırabilir,kalanları gene sallayabiliriz.
Benim takıldığım nokta burası,seçilenkeri kenara ayırmayı denedim,başaramadım.
Şimdi seçilenleri sallamayı deniycem.
Eğer daha farklı bir yaklaşımınız varsa o da kabulumdür.
 

serbayacar1

Öğrenci
Katılım
16 Haziran 2013
Mesajlar
10
Reaksiyon puanı
0
Puanları
0
Salladığımız zarlardan bir kısmını kenara ayırabilir,kalanları gene sallayabiliriz.

Bu kısmi anlatabilir misin daha ayrıntılı bir şekilde. Ya da hocanın size verdiği şekilde yazar mısın ? Yardımcı olmak isterim.
 

serbayacar1

Öğrenci
Katılım
16 Haziran 2013
Mesajlar
10
Reaksiyon puanı
0
Puanları
0
Teşekkür ederim. Şuan alabildim ve anlamak için birkaç kez okumam gerekti. Anladım sonunda :) Uğraşacağım mutlaka geri dönerim.
 

mutluçocuk

Asistan
Katılım
27 Haziran 2012
Mesajlar
253
Reaksiyon puanı
2
Puanları
18
Teşekkür ederim. Şuan alabildim ve anlamak için birkaç kez okumam gerekti. Anladım sonunda :) Uğraşacağım mutlaka geri dönerim.

Ben ugraşıyorum ama stres hızlı bir şekilde ilerlememi engelliyor.
Ama bırakmak gibi niyetimde yok.
Yarın çok fazla şey katamayabilirim pc min basinda uzun sure yokum. lütfen yanlis anlamayin,ödevi yapmayıp kacti zannetmeyin. :(
 

UgurABA

Müdavim
Müdavim
Katılım
28 Eylül 2007
Mesajlar
5,147
Reaksiyon puanı
15
Puanları
218
Bunun için çift boyutlu dizi kullanman mantıken işlerin daha kolay olmasını sağlar. Örneğin ilk boyutta zarın yüzünde ne geldiyse onu tutar, ikinci boyutta zarın seçilip seçilmediğini kontrol eder. Bunları 3 kez for döngüsünde, zarın seçili olup olmadığını if kontrolü ile kontrol edip, seçiliyse durmasını seçilmediyse onun yerine tekrar zarın atılmasını sağlayabilir ve sonucunda (bildiğim kadarıyla oyunun sonunda) zarları toplatıp örneğin 15ten büyükse kazandın, değilse kaybettin şeklinde bir algoritma uygulayabilirsin.
 

serbayacar1

Öğrenci
Katılım
16 Haziran 2013
Mesajlar
10
Reaksiyon puanı
0
Puanları
0
Ben ugraşıyorum ama stres hızlı bir şekilde ilerlememi engelliyor.
Ama bırakmak gibi niyetimde yok.
Yarın çok fazla şey katamayabilirim pc min basinda uzun sure yokum. lütfen yanlis anlamayin,ödevi yapmayıp kacti zannetmeyin. :(

[/CODE]
#include <stdio.h>
#include <time.h>
void zarAt(int zar[],int adet);
void yaz(int zar[]);
void yazSonuc(int tmp[]);

int main()
{
srand(time(NULL));
int zar[5]={0};
int tmp[5]={0};
int adet=5;
int adet2=0;
int devam=1;
int sec;
char sec2;
int sakla;
int i=0;

printf("Yathzee oyununa hosgeldiniz !\n");

do{

printf ("Zarları atmak icin 1 \n");
printf ("Sonuclari gormek icin 2\n");
printf ("Seciminiz :");
scanf ("%d", &sec);

switch (sec)
{
case 1 :
zarAt(zar,adet);
yaz(zar);
printf("Saklamak istiyor musunuz ? (E/H) :");
scanf ("%c ",&sec2);
if (sec2 == 'E')
{
do{
printf("Kacinci zari saklamak istiyorsunuz ? (0 cikis):");
scanf ("%d ",&sakla);
tmp[sakla]=zar[sakla];
adet2++;

}while(sakla!=0);
}
else
{
for(i=0; i<adet; i++)
{
tmp=zar;
}
}


case 2:
devam=0;
break;
}




}while(devam!=0);

yazSonuc(tmp);

system("PAUSE");
return 0;
}

void zarAt(int zar[],int adet)
{
int i;
for( i=0; i<adet; i++)
{
zar= rand()%6+1;
}
printf ("\n");
}

void yaz(int zar[])
{
int i;
for(i=0; i<5; i++)
{
printf("%d ", zar);
}
printf ("\n");
}

void yazSonuc(int tmp[])
{
int i;
for(i=0; i<5; i++)
{
printf("%d ",tmp);
}
}


[/CODE]
Önemli değil bende birşeyler yapmaya çalıştım. Madem yarın bilgisayarın başında değilsinki kendi kodumu sana yolluyorum. Konsol açılıyor ama hataları var . Sende bakarak çözümleyebilirsin ya da forumdaki arkadaşlar da alıp kontrol edebilirlerki bende kontrollerini yapmaya devam edicem. Eğer sonuca ulaşan biri olursa haber verirse sevinirim. Yardımcı olabildiysem mutluluk duyarım. Kod yukarıdadır.
 

mutluçocuk

Asistan
Katılım
27 Haziran 2012
Mesajlar
253
Reaksiyon puanı
2
Puanları
18
Kod:
#include<stdio.h>#include<stdlib.h>
#include<conio.h>
#include<stdarg.h>
#include<time.h>


#define ZAR 5


int *ilkZarAt(void);
int *secilmis(int,...);


int main(){
	int *zar,i,k;
	char sec[5];


	zar=(int*)malloc(sizeof(int) * ZAR);
	zar=ilkZarAt();


	for(i=0;i<ZAR;i++){
		printf("%d. zar : %d\n", ( i + 1 ),zar[i]);
	}


	printf("Zar seçiniz\nSallamak istedikleriniz için S\nTutmak istedikleriniz için T yazınız\n");
	for(k=0;k<ZAR;k++){
		printf("%d. Zar için",k + 1);
		fflush(stdout);
		scanf("%c",&sec[k]);
	}


	if ((sec[k] == 's')||(sec[k] == 'S')){


	}


	if((sec[k] == 't')||(sec[k] == 'T')){


	}


















	return 0;
}


int *secilmis(int n, ...){
	int *secilmis,j;
	va_list secilen;
	va_start(secilen,n);


	secilmis=(int*)malloc(sizeof(int) * 5);


	for(j=0;j<n;j++){
		secilmis[j]=va_arg(secilen,int);
	}


	return secilmis;




}




int *ilkZarAt(void){
	int *zar,i;


	zar=(int*)malloc(sizeof(int) * ZAR);


	srand( time( NULL ) );


	for( i = 0; i < 5; i++){
		zar[i] = 1 + rand() % 6;
	}


	return zar;
}

Benim uğraştığım bu.Şu an yarım yamalak ve sanırım saçma yanları var.O kısımları düzelticem.
 
Üst