Aritmetik oyun // C

Başlatan sem, 21 Haziran 2010 - 00:25:02

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

sem

C ile yazıldı.
Amaç:  Seçilen oyunlardan (toplama, çıkartma, çarpma, bölme) 3 dakika içersinde en yüksek puan almak. 3 dakika sonra oyun sona eriyor. Çocuk amaçlı olduğu için, toplama çıkartma işlemleri en fazla iki basamak, çarpma işlemleri de 12'lere kadar ele alındı. Bölme işlemi üzerinde daha fazla durulması gerekiyor aslında, asal sayılar nedeni ile... Herhangi bir hata ile karşılaşmadım... Fakat deneme olarak sadece toplama işlemini ele aldım... Herhangi bir sorun ile geri dönüş olursa düzeltiriz beraber... 

Şunu demeyi unutmuşum bir soruyu bilmek için en fazla 10 saniye var gibi düşünebilirsiniz. Yoksa başka soruya geçiliyor.

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>

void toplama(void);
void carpma (void);
void cikartma(void);
void bolme(void);

int main()
{
   int secim;
   while(1)
   {
      system("clear");
      fprintf(stdout,"1-)Toplama\n2-)Çıkartma\n3-)Çarpma\n4-)Bölme\n5-)Çıkış\n\nSeçiminiz:");
      fscanf(stdin,"%d",&secim);

      switch(secim)
      {
         case 1:
           toplama();
           break;
         case 2:
           cikartma();
           break;
         case 3:
            carpma();
            break;
         case 4:
            bolme();
            break;
         case 5:
            exit(0);
         default:
            fprintf(stdout,"Yanlış seçim. 1 - 5 arasında bir seçim yapın. Menüye dönülüyor...\n");
            sleep(3);
      }
   }
}

void toplama (void)
{
   long baslangic, bitis, rand_cekirdek, sayi_gecisi,ilk_okuma,son_okuma;
   int puan,puan2,sayi_1,sayi_2, verilen_cevap, dogru_cevap,fark;
   struct timeval zaman_asimi;
   char cikis;
   fd_set okuma_seti;
   puan = 0;
   ilk_okuma = time(NULL);
   while(1)
   {
      zaman_asimi.tv_sec  = 11;
      zaman_asimi.tv_usec =  0;
      system("clear");
      rand_cekirdek = time(NULL);
      srand(rand_cekirdek);
      sayi_gecisi = rand();
      sayi_1 = rand() % 99 + 1;
      srand(sayi_gecisi);
      sayi_2 = rand() % 99  + 1;

      baslangic = time(NULL);

      fprintf(stdout,"%d + %d = ?\n\nCevap:",sayi_1, sayi_2);
      fflush(stdout);
      FD_ZERO(&okuma_seti);
      FD_SET(0,&okuma_seti);


      select(1,&okuma_seti,NULL,NULL,&zaman_asimi);
      if(FD_ISSET(0,&okuma_seti))
      {
         fscanf(stdin,"%d",&verilen_cevap);
         bitis = time(NULL);
         dogru_cevap = sayi_1 + sayi_2;
         fark = bitis - baslangic;
         puan2 = baslangic - bitis + 10;
         if(dogru_cevap == verilen_cevap)
         {
            puan += puan2;
            fprintf(stdout,"%d saniyede dogru cevabı verdiniz. Puanınız: %d.\n",fark,puan);
            fprintf(stdout,"Devam etmek için enter'a basın...\n");
            son_okuma = time(NULL);
            if(son_okuma - ilk_okuma > 180)
            {
               system("clear");
               fprintf(stdout,"Süre doldu. Toplam Puan = %d\n\n\n\nÇıkmak için enter'a basın\n",puan);
               getchar();
               getchar();
               exit(0);
            }
            getchar();
            getchar();
         }
         else
         {
            fprintf(stdout,"Yanlış Cevap. Puanınız:%d\n",puan);
            son_okuma = time(NULL);
            if(son_okuma - ilk_okuma > 180)
            {
               system("clear");
               fprintf(stdout,"Süre doldu. Toplam Puan = %d\n\n\n\nÇıkmak için enter'a basın\n",puan);
               getchar();
               getchar();
               exit(0);
            }
            getchar();
            getchar();
         }
      }
      else
      {
         fprintf(stdout,"Süreniz bitti...Başka soruya geçilecek\n");
         sleep(2);
      }
   }
}




void carpma (void)
{
   long baslangic, bitis, rand_cekirdek, sayi_gecisi,ilk_okuma,son_okuma;
   int puan,puan2,sayi_1,sayi_2, verilen_cevap, dogru_cevap,fark;
   struct timeval zaman_asimi;
   fd_set okuma_seti;
   puan = 0;
   ilk_okuma = time(NULL);

   while(1)
   {
      zaman_asimi.tv_sec  = 11;
      zaman_asimi.tv_usec =  0;
      system("clear");
      rand_cekirdek = time(NULL);
      srand(rand_cekirdek);
      sayi_gecisi = rand();
      sayi_1 = rand()%12 + 1;
      srand(sayi_gecisi);
      sayi_2 = rand()%12 + 1;

      baslangic = time(NULL);

      fprintf(stdout,"%d * %d = ?\n\nCevap:",sayi_1, sayi_2);
      fflush(stdout);
      FD_ZERO(&okuma_seti);
      FD_SET(0,&okuma_seti);


      select(1,&okuma_seti,NULL,NULL,&zaman_asimi);
      if(FD_ISSET(0,&okuma_seti))
      {
         fscanf(stdin,"%d",&verilen_cevap);
         bitis = time(NULL);
         fark = bitis - baslangic;
         puan2 = baslangic - bitis + 10;
         dogru_cevap = sayi_1 * sayi_2;
         if(dogru_cevap == verilen_cevap)
         {
            puan += puan2;
            fprintf(stdout,"%d saniyede dogru cevabı verdiniz. Puanınız: %d.\n",fark,puan);
            fprintf(stdout,"Devam etmek için enter'a basın...\n");
            son_okuma = time(NULL);
            if(son_okuma - ilk_okuma > 180)
            {
               system("clear");
               fprintf(stdout,"Süre doldu. Toplam Puan = %d\n\n\n\nÇıkmak için enter'a basın\n",puan);
               getchar();
               getchar();
               exit(0);
            }
            getchar();
            getchar();
         }
         else
         {
            fprintf(stdout,"Yanlış Cevap. Puanınız:%d\n",puan);
            son_okuma = time(NULL);
            if(son_okuma - ilk_okuma > 180)
            {
               system("clear");
               fprintf(stdout,"Süre doldu. Toplam Puan = %d\n\n\n\nÇıkmak için enter'a basın\n",puan);
               getchar();
               getchar();
               exit(0);
            }
            getchar();
            getchar();
         }
      }
      else
      {
         fprintf(stdout,"Süreniz bitti...Başka soruya geçilecek\n");
         sleep(2);
      }
   }
}


void cikartma (void)
{
   long baslangic, bitis, rand_cekirdek, sayi_gecisi,ilk_okuma, son_okuma;
   int puan,puan2,sayi_1,sayi_2, verilen_cevap, dogru_cevap,fark;
   struct timeval zaman_asimi;
   fd_set okuma_seti;
   ilk_okuma = time(NULL);
   puan = 0;
   while(1)
   {
      zaman_asimi.tv_sec  = 11;
      zaman_asimi.tv_usec =  0;

      rand_cekirdek = time(NULL);
      srand(rand_cekirdek);
      sayi_gecisi = rand();
      sayi_1 = rand() % 99 + 1;
      srand(sayi_gecisi);
      sayi_2 = rand() % sayi_1  + 1;
      system("clear");
      baslangic = time(NULL);

      fprintf(stdout,"%d - %d = ?\n\nCevap:",sayi_1, sayi_2);
      fflush(stdout);
      FD_ZERO(&okuma_seti);
      FD_SET(0,&okuma_seti);


      select(1,&okuma_seti,NULL,NULL,&zaman_asimi);
      if(FD_ISSET(0,&okuma_seti))
      {
         fscanf(stdin,"%d",&verilen_cevap);
         bitis = time(NULL);
         dogru_cevap = sayi_1 - sayi_2;
         fark = bitis - baslangic;
         puan2 = baslangic - bitis + 10;
         if(dogru_cevap == verilen_cevap)
         {
            puan += puan2;
            fprintf(stdout,"%d saniyede dogru cevabı verdiniz. Puanınız: %d.\n",fark,puan);
            fprintf(stdout,"Devam etmek için enter'a basın...\n");
            son_okuma = time(NULL);
            if(son_okuma - ilk_okuma > 180)
            {
               system("clear");
               fprintf(stdout,"Süre doldu. Toplam Puan = %d\n\n\n\nÇıkmak için enter'a basın\n",puan);
               getchar();
               getchar();
               exit(0);
            }
            getchar();
            getchar();
         }
         else
         {
            fprintf(stdout,"Yanlış Cevap. Puanınız:%d\n",puan);
            son_okuma = time(NULL);
            if(son_okuma - ilk_okuma > 180)
            {
               system("clear");
               fprintf(stdout,"Süre doldu. Toplam Puan = %d\n\n\n\nÇıkmak için enter'a basın\n",puan);
               getchar();
               getchar();
               exit(0);
            }
            getchar();
            getchar();
         }
      }
      else
      {
         fprintf(stdout,"Süreniz bitti...Başka soruya geçilecek\n");
         sleep(2);
      }
   }
}


void bolme (void)
{
   long baslangic, bitis, rand_cekirdek, sayi_gecisi,ilk_okuma,son_okuma;
   int puan,puan2,sayi_1,sayi_2, verilen_cevap, dogru_cevap,fark;
   struct timeval zaman_asimi;
   fd_set okuma_seti;
   puan = 0;
   ilk_okuma = time(NULL);
   while(1)
   {
      zaman_asimi.tv_sec  = 11;
      zaman_asimi.tv_usec =  0;
      system("clear");
      rand_cekirdek = time(NULL);
      srand(rand_cekirdek);
      sayi_gecisi = rand();
      sayi_1 = rand() % 99 + 1;
      srand(sayi_gecisi);
      sayi_2 = rand() % sayi_1  + 1;

      for(;sayi_1 % sayi_2 != 0; --sayi_2){;}

      baslangic = time(NULL);

      fprintf(stdout,"%d / %d = ?\n\nCevap:",sayi_1, sayi_2);
      fflush(stdout);
      FD_ZERO(&okuma_seti);
      FD_SET(0,&okuma_seti);


      select(1,&okuma_seti,NULL,NULL,&zaman_asimi);
      if(FD_ISSET(0,&okuma_seti))
      {
         fscanf(stdin,"%d",&verilen_cevap);
         bitis = time(NULL);
         dogru_cevap = sayi_1 / sayi_2;
         fark = bitis - baslangic;
         puan2 = baslangic - bitis + 10;
         if(dogru_cevap == verilen_cevap)
         {
            puan += puan2;
            fprintf(stdout,"%d saniyede dogru cevabı verdiniz. Puanınız: %d.\n",fark,puan);
            fprintf(stdout,"Devam etmek için enter'a basın...\n");
            son_okuma = time(NULL);
            if(son_okuma - ilk_okuma > 180)
            {
               system("clear");
               fprintf(stdout,"Süre doldu. Toplam Puan = %d\n\n\n\nÇıkmak için enter'a basın\n",puan);
               getchar();
               getchar();
               exit(0);
            }
            getchar();
            getchar();
         }
         else
         {
            fprintf(stdout,"Yanlış Cevap. Puanınız:%d\n",puan);
            son_okuma = time(NULL);
            if(son_okuma - ilk_okuma > 180)
            {
               system("clear");
               fprintf(stdout,"Süre doldu. Toplam Puan = %d\n\n\n\nÇıkmak için enter'a basın\n",puan);
               getchar();
               getchar();
               exit(0);
            }
            getchar();
            getchar();
         }
      }
      else
      {
         fprintf(stdout,"Süreniz bitti...Başka soruya geçilecek\n");
         sleep(2);
      }
   }
}
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

ironic

@sem, eline sağlık. Çok eğlenceli olmuş.  :)

sem

Teşekkürler @ironic, yolunuzdayız =) İlerde öğrendikçe biz de daha yararlı şeyler yazacağız umarım...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hitokiri

Alıntı Yapİlerde öğrendikçe biz de daha yararlı şeyler yazacağız umarım...
hep mi sıfır puan alır bi insan :D
ellerine sağlık çok güzel olmuş :))

ytgn

Forumda arayarak ulaştığım bilgiye göre, verdiğiniz kodları başlangıç klasörü içindeki deneme.c dosyası içine kaydettim. uçbirimden:

gcc -o kullanıcıdım deneme.c

yazdım. Fakat bir hareket yok.  Acaba, yanlış bir şekilde arama yapıp yanlış bilgiye mi ulaştım?
Gelecek için ubuntu ile yeni bir adım..

ironic

gcc deneme.c -o çıktı_adı

şeklinde ver komutu.

empax

Forumda gözle görülür bir hareketlenme var :)

Eline sağlık @sem0900.
بسم الله الرحمن الرحيم
|ACEMİLER İÇİN İLK DURAK|Çözüldü|Kod etiketi|

ytgn

Alıntı yapılan: ironic - 21 Haziran 2010 - 21:36:06
gcc deneme.c -o çıktı_adı

şeklinde ver komutu.

gcc deneme.c -o denek

yazdım. denek isminde bir dosya oluşturdu ama, o bana ben ona bakıyoruz :) o da tepki vermiyor 8)
Gelecek için ubuntu ile yeni bir adım..

ironic

./denek

şeklinde komutu vererek çalıştırabilirsin.  :)

ytgn

Alıntı yapılan: ironic - 21 Haziran 2010 - 22:04:47
./denek

şeklinde komutu vererek çalıştırabilirsin.  :)

teşekkürler ironic. Yalnız habire soruyor ne zaman duracak :)

Alıntı yapılan: hitokiri - 21 Haziran 2010 - 08:43:34
hep mi sıfır puan alır bi insan :D
ellerine sağlık çok güzel olmuş :))

çarpma gayet kolay, onu dene :)
Gelecek için ubuntu ile yeni bir adım..

ironic

Alıntı yapılan: ytgn - 21 Haziran 2010 - 22:13:28
Alıntı yapılan: ironic - 21 Haziran 2010 - 22:04:47
./denek

şeklinde komutu vererek çalıştırabilirsin.  :)

teşekkürler ironic. Yalnız habire soruyor ne zaman duracak :)



Girişte belirtilmişti aslında 3 dk içinde en yüksek puanı almaya çalışıyoruz.  :)

sem

@ytgn , kodlardan aslında istediğin süreye ayarlayabilirsin... Ben 3 dakika olduğu için bir çıkış kontrolü uygulamadım, nasılsa az diye. Ama ctrl+c kombinasyonu ile süreci sonlandırabilirsiniz. 3 dakika beklemek istemiyorsanız.

Teşekkürler @empax
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

alquirel

Alıntı yapılan: hitokiri - 21 Haziran 2010 - 08:43:34
hep mi sıfır puan alır bi insan :D
ellerine sağlık çok güzel olmuş :))

sabırla 3 dakikanın bitimini beklediğim çarpma kısmında 700 puan almış bulunmaktayım :P
hadi bakayım, beni rezil edecek kişiyi bekliyorum :D

ilk mesajda o kareli include'lu satırları görünce nostalji oldum, lisedeyken durmadan c de kod yazardık. yazdığım bütün kodlar benim usb girişi bile olmayan 1,8 GB kapasiteli tarih öncesi bilgisayarımla birlikte toprağa gömülmüş oldu :D. bi de o zamanlar bilgisayara (windowsa) c compiler yükleyeceğiz diye atmadığımız takla kalmazdı. 4,5 MB lık kurulumu 3 parça disketle taşıyıp yükler idik. şimdi gedit'e yaz, terminalde derle...

yaşasın özgürlük

sem

gedit'e bile gerek yok... Ben doğrudan terminalde yazıp terminalde derliyorum =)
700 puan için "numpad" gerekli sanırım =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

alquirel

Alıntı yapılan: sem0900 - 22 Haziran 2010 - 03:53:04
gedit'e bile gerek yok... Ben doğrudan terminalde yazıp terminalde derliyorum =)
700 puan için "numpad" gerekli sanırım =)

henüz gedit dışına çıkamadım, o da yakında inşallah :)

bu arada laptopda oynamıştım, numpadi de açmadım :D
ama parmaklarım acayip acıdı yetiştireceğim diye :)

sem

"numpad" (Bunun Türkçesi nedir?) olmadan iyi almışsınız  o zaman. Ortalama 7 puandan 100 soru, 180 saniyede.


anektod: 10.04 ile pico'da da kod ile alakalı bölümleri farklı renklerde görebiliyorsunuz gedit'de olduğu gibi. Yabancılık çekmezsiniz =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

ozdemir08

@sem0900 aşağıdaki kütüphaneler hakkında yeni bir konu olarak daha ayrıntılı bilgi verebilir misin?
sys/time.h
sys/types.h
unistd.h
time.h


sem

#17
Alıntı yapılan: ozdemir08 - 10 Ağustos 2010 - 13:59:05
@sem0900 aşağıdaki kütüphaneler hakkında yeni bir konu olarak daha ayrıntılı bilgi verebilir misin?
sys/time.h
sys/types.h
unistd.h
time.h

Tabii ki... En kısa zamanda boş bir an bulup bildiklermi aktarırım...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

sem

Alıntı yapılan: ozdemir08 - 10 Ağustos 2010 - 13:59:05
@sem0900 aşağıdaki kütüphaneler hakkında yeni bir konu olarak daha ayrıntılı bilgi verebilir misin?
sys/time.h
sys/types.h
unistd.h
time.h
Buyrun:
http://forum.ubuntu-tr.net/index.php/topic,21683.msg261201.html#msg261201

Dediği gibi biraz zaman sıkıntısı içersinde hazırladım. Eğer sorunuz olursa verdiğim link altında sorarsınız hep beraber yanıtını bulmaya çalışırız. Kolay gelsin... Umarım açıklayıcı olmuştur, biraz da olsa...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?