Sayı Tutma İsimli MAntık Oyunu (Alıntı)

Bu başlık kilitlidir. Yeni mesajlar gönderilemez veya mevcut mesajlar düzenlenemez.
Banned
06-11-2004, 00:25   |  #1  
OP Banlandı
Teşekkür Sayısı: 0
366 mesaj
Kayıt Tarihi:Kayıt: Kas 2004

Geçen gün daha önce bir arkadaşımdan öğrendiğim sayı tahmin adlı mantık
oyununu oynamak istedim ama kimseyi bulamadım. Bende bu oyunu
bilgisayarda kodlayarak bana asla hayır diyemeyecek bir rakip elde
ettim.  
Bilgisayar 4 basamakli rakamlari farkli bir sayi tutuyor. Siz bu sayiyi
bilgisayarin verdiği ipuçlarından yararlanarak bilmeye çalışıyorsunuz.
Mesela +2 -1 derse 3 rakami bildiniz ama bunlardan 2 si doğru yerde 1 i
yanlış yerde anlamında...Kolay gelsin
Not 1:Oyun çok kısa sürede kodlandığı için içinde  daha iyi bir mantık
kurulabileceği ve düzenlemelerin yapılabileceği kısımlar olabilir.
Gerekiyorsa onarılmasını size bıraktım. Mesela Yazıları, menüleri
renklendirebilirsiniz. Daha iyi bir mantık geliştirebilirsiniz...
Not 2:Puanı tabloya ekleyen fonksiyonu yazmadım.Onu da size bıraktım.
Not 3:İyi eğlenceler...
Eleştiri+Öneri> Okan ÇEtin okancet@yahoo.com

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NULL -1

int tercih_oku(void), sayi_kontrol(int a), karsilastir(int *b, int a);
int puan_hesapla(int i), tabloya_ekle(int puan);
void puan_durumu(void),yeni_oyun(void),kural_oku(void);

main()
{
int secim;

   for(;;){
    secim=tercih_oku();
      switch(secim){
       case 1:
          yeni_oyun();
            break;
         case 2:
          puan_durumu();
            break;
         case 3:
          kural_oku();
            break;
         case 4:
          exit(0);
      }
   }

}
//Menüyü ekrana basar. Tercihi okur...
int tercih_oku(void)
{
register int a;

do{
    puts("\n\n\t\t***** MENU *****\n\n");
      puts("1. Yeni Oyun\n");
      puts("2. Puan Durumu\n");
      puts("3. Nasil Oynanir?\n");
      puts("4. Cikis\n\n");
      puts(" Tercihinizi Giriniz::\n");
    scanf("%d",&a);
   }while(a<1 || a>4);

   return a;
}


//Oyuncunun Puanini Hesaplar...
int puan_hesapla(int a)
{
float puan;
   puan=10000/a;

   return puan;
}
//Puan Durumu Tablosunu Ekrana Basar..
void puan_durumu(void)
{
FILE *di;
char *str;

      //puan.txt gibi bir dosya aç burada..
  puts("Puan durumunun saklandigi dosya bulunamadi.\n");
    exit(1);

while(!feof(di)){
  fgets(str,255,di);
    printf("%s",str);
}
}
// Nasil oynandigini ekrana basar...
void kural_oku(void)
{
FILE *di;
char *str;

      //nasil oynandigini anlatan bir txt dosyası hazırla ve burda ac
  puts("Nasil oynanirin saklandigi dosya bulunamadi.\n");
      exit(0);

while(!feof(di)){
  fgets(str,255,di);
    printf("%s",str);
}
}
// Yeni Oyun icinde kullanildi. Kullanicinin girdigi sayiyi kontrol

eder.
int sayi_kontrol(int a)
{
int S[4],i,k;

S[3]=a/1000;
S[2]=(a/100)-(S[3]*10);
S[1]=(a/10)-((S[3]*100)+(S[2]*10));
S[0]=a%10;
for(i=0;i<4;i++){
    for(k=0;k<4;k++){
       if(S==S && i!=k)
    return 1;
      }
   }
  return 0;
}
//Kullanici Tahmini ile Bilgisayarin sayisini karsilastirir...
int karsilastir(int D[4], int a)
{
int S[4],i,k,ipucu1,ipucu2;

   ipucu1=0;
   ipucu2=0;
S[3]=a/1000;
S[2]=(a/100)-(S[3]*10);
S[1]=(a/10)-((S[3]*100)+(S[2]*10));
S[0]=a%10;
   for(i=0;i<4;i++){
    for(k=0;k<4;k++){
       if(D==S && i==k)
          ipucu1++;
         if(D==S && i!=k)
          ipucu2++;
      }
   }
if(ipucu1==4){
    puts("Tebrikler Sayiyi Bildiniz...");
      return 1;
   }
    printf("%+d\t-%d",ipucu1,ipucu2);
      return 0;

}
// Yeni Oyun Acar...
void yeni_oyun(void)
{
register int i,k,n=0,s,puan=0;
   int A[4];
   int Secim[10]={0,1,2,3,4,5,6,7,8,9};

randomize();
for(k=0;k<4;k++){
  n=rand()%10;
      if(Secim[n]!=-1){
     A=Secim[n];
       Secim[n]=-1;
      }
    else k--;
}

for(i=0;i<10;i++){
    puts("\nTahminizi Giriniz:\n");
      scanf("%d",&s);
      if(s>9876){
       puts("Girdigin Sayi Hatali\n");
         puts("Dikkat Et.\n");
         continue;
      }
  if (sayi_kontrol(s)){
       puts("Girdiginiz Sayi hatali\n");
         puts("Hata: Rakamlari farkli olmali\n");
         continue;
      }
      if (karsilastir(A,s))
       break;

   }
   if(i==10)
    puan=0;
   else
    puan=puan_hesapla(i);
   printf("\nPuaniniz: %d\n",puan);
   printf("Iste tuttugum sayi : %d%d%d%d\n",A[3],A[2],A[1],A[0]);
puts("Puaniniz tabloya eklendi.\n");
   puts("iste tablodaki yeriniz:\n");
   puan_durumu();

}