İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

C'de Zar Oyunu

mutluçocuk18.06.201312 cevap4.253 görüntüleme
#1
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:
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:
Cevaplar
#2
ve A.s

return ile döndürürsen erişebilirsin diye düşünüyorum??
mutluçocuk Konuyu açan
#3
Sanırım işaretçide kullanmam lazım.
#4
#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 Konuyu açan
#5
sinan60 dedi: ↑
#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.
#6
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.
#8
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 Konuyu açan
#9
serbayacar1 dedi: ↑
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. :(
#10
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.
#11
mutluçocuk dedi: ↑
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 Konuyu açan
#12
#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.
mutluçocuk Konuyu açan
#13
Bu konuda yardım eden herkese teşekkür ederim.

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.