[Çözüldü] C diliyle yazılacak basit bir oyun...

Başlatan Sh4oTT, 12 Temmuz 2015 - 02:44:50

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Sh4oTT

Arkadaslar C diline calısıyorumda asagıdakı programı nasıl yazabılırım ben bı tane yazdım fakat cok zor tahmın edıyor program yardımcı olabılırmısınız?





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



int main() //D-1 B-2 K-3
{

int sayi;
int deger;
int cvb;
printf("*-*-*OYUN BASLIYOR*-*-*\n\n");
printf("Lutfen 1-1000 arasinda bir sayi giriniz=> "); scanf("%d",&sayi);
srand(time(NULL));
deger=1+rand()%1000;
printf("Girdiginiz sayi=> %d olabilirmi?\n",deger);
printf("(D=1-B=2-K=3)=>"); scanf("%d", &cvb);


if (cvb==1)
bas1: printf("*-*-*Oyun Bitmistir.*-*-*\n");


else if (cvb==2)
{
bas2: srand(time(NULL));
deger=deger+rand()%1000;
printf("Girdiginiz sayi=> %d olabilirmi?\n",deger);
bas: printf("(D=1-B=2-K=3)=>"); scanf("%d", &cvb);
if (cvb==1)
goto bas1;
else if (cvb==2)
goto bas2;
else if (cvb==3)
goto bas3;
}


else if (cvb==3)
{
bas3: srand(time(NULL));
deger=1+rand()%deger;
printf("Girdiginiz sayi=> %d olabilirmi?\n",deger);
printf("(D=1-B=2-K=3)=>"); scanf("%d", &cvb);
if (cvb==1)
goto bas1;
else if (cvb==2)
goto bas2;
else if (cvb==3)
goto bas3;
}


else
{
printf("Lutfen (D=1-B=2-K=3) seceneklerinden birini seciniz!...\n");
goto bas;
}











}

Amenofis

En fazla 10 tahminde bulur ama böyle yaparsan da oyun olmaktan çıkar. Oyuna benzemesi için biraz rastgelelik katman gerekecek. Senin yazdığın kod ise tamamen rastgele olduğu için aptal bir yapay zeka olmuş. Hiç bulamama ihtimali oldukça yüksek.

Sh4oTT

 :) Aynen sacma yazmısım ama bu kadar yapabıldım.  :-\
Bıde bazı orneklerde windows.h kutuphanesı goruyorum o kodlar lınuxda calısırmı? Yoksa ayrı bıseylermı yapmam gerek?

travego0403

Matematikte bir yöntem vardır adı "İkiye Bölme Yöntemi" idi sanırım. İstediğini bununla yapabilirsin zaten verdiğin örnekte de o kullanılmış. Mantık şu şekilde 0-100 arası bir sayıyı arıyorsun. Diyelim ki sayı 30 olsun. Senin alt ve üst limitlerin ilk başta 0 ve 100 Tahminde söylemen gereken sayı (0+100)/2 = 50. Aradığın sayı bu sayıdan küçük bu yüzden yeni limitlerin 0 ve 50. Yeni tahminin (0+50)/2 =25. Bu sefer tahminin sayıdan küçük bu durumda yeni limitlerin 25 ve 50. Şimdiki tahminin (25+50)/2 =37.5 yeni limitlerin 25 ve 37.5 v.s

Bu şekilde gidiyor.Tabi sen tam sayı aradığın için virgülden sonraki kısımlar için bir şeyler düşünmelisin. Yukarı veya aşağı yuvarlayabilirsin. Tabi bu durumda sınır değerlerinde durum ne oluyor diye bakmak lazım. Şimdi tam kestiremiyorum bir etkisi olur mu diye.

Bu bilimsel bir yöntem sen şöyle bir şey yapabilirsin oyunu, alt ve üst sınır arasında rastgele bir sayı seçtirebilirsin. Ama galiba soruda senden istenen bilimsel bir yöntem kullanman.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

blacksnow

Ben de aynı kitabı okuyorum.Bu oyunu yazmıştım daha önce fakat öyle yapay zeka, bilimsel teknik yok.İkiye bölme yöntemiyle en fazla 10 denemede bulabiliyor.Oyuna rastgelelik ekleme gereği duymamıştım.İsterseniz paylaşabilirim ama kendiniz yapmanız her zaman daha iyidir.

Reverser


XFCE ROCKS !
Powered by Thunar & XFWM4



blacksnow


Reverser


XFCE ROCKS !
Powered by Thunar & XFWM4



91011

Şöyle bir algoritma olabilir:

GLOBAL B, sayi,C
Sayı_bulmaFonksiyonu(){
if (B>sayi)
{
     Random 1-B arası sayı üret bu da C sayısı
     return(Sayı_bulmaFonksiyonu);
}
İf  (C<sayi)
{
     Random değer üret C ile B arasında
     return(Sayı_bulmaFonksiyonu);
}
if (sayi == tutulan sayi)
{
printf("sayını buldum");   
}
return;
}
Tanrı konuşmaz, şeytan fısıldar...

Sh4oTT