C'de Adam Asmaca Oyunu

Konu, 'Genel Konular' kısmında saika tarafından paylaşıldı.

Etiketler:
  1. saika

    saika MB Üyesi

    Kayıt:
    2 Eylül 2015
    Mesajlar:
    5
    Beğeniler:
    1
    En İyi Cevap:
    0
    Değerlendiriler:
    +1 / 0 / -0
    Üniversite:
    İstanbul Medipol Üniversitesi
    Arkadaşlar cuma akşamına kadar yazmam gereken bir adam asmaca oyunu var. Oyunda üç kelime yer alacak kelimeler random seçilecek. Yanlış girilen harfler her seferinde gösterilecek ve yanlış bilme hakkı 5 olacak. C programlamaya giriş dersi ödevi. Şunları kullan şöyle başla devamı gelir gibi her türlü yardıma ihtiyacım var. Şimdiden teşekkür ederim.
     

    Ekli Dosyalar:

  2. Atakan Akbulut

    Atakan Akbulut Yetkili Kişi Moderatör

    Kayıt:
    28 Nisan 2016
    Mesajlar:
    143
    Beğeniler:
    42
    Meslek:
    R&D Embedded Systems Software Engineer
    En İyi Cevap:
    5
    Değerlendiriler:
    +63 / 0 / -0
    Öncelikle kocaman fonksiyon ve kocaman bir for döngüsü düşün . bu for döngüsünün içine tercihine göre dosya okuma yazma komutlarıyla .txt dosyalarındaki bir karakterleri string döngüsüne atasın.Ne oldu n rakamlı dizimiz oldu degil mi

    a= int length(char s[]) ile txt dosyasında kaç karakter oldugunu okuyabiliriz.
    sonra büyük for döngümüzün kaça gidecegini a ya eşitlersin. Ne oldu ? n karakterli bir for döngüsü. önerim n+ hata yapma sayısıdır.

    sonra bu for döngüsünün içinde kendi halinde 1 adet for 2 adet if döngüsü düşünelim
    for döngüsünün kaç basamaklı oldugunun önemi yok .for komutunda bir giris isteyelim scan f ile herhangibi bir şeye atasın buda x olsun
    if(eger) (s[a]==girilen sayi) {printf("%d . sayimiz %d"a,x)} olsun

    hata sayimiz için bir int tanımlarız. int error=0;
    hemen altına else yazıp parantez açıp {error=error+1 printf("%d hataniz tekrar rakam giriniz",error)}
    yaparsınız.ayrıca bu satırın hemen altına if(error>=4); break ; komutu ile 3 hatada döngülerden çıkabilir ve 4. hatada programı kapatabilirsiniz.

    kolay gelsin . iyi geceler :)
     
    • Beğen Beğen x 1
    • Yardımcı Yardımcı x 1
  3. saika

    saika MB Üyesi

    Kayıt:
    2 Eylül 2015
    Mesajlar:
    5
    Beğeniler:
    1
    En İyi Cevap:
    0
    Değerlendiriler:
    +1 / 0 / -0
    Üniversite:
    İstanbul Medipol Üniversitesi
    Cevabınız için çok teşekkür ederim. Ancak programlama konusunda oldukça yetersizim. Bu ödev sayesinde bir şeyler öğrenmeye çalışıyorum. Youtube yardımıyla aşağıdaki gibi bir kod yazabildim. Fakat hâlâ istediğim programı elde edemedim. Program çalışıyor ama doğru harfi girdikçe kelimenin içinde yer almıyor o harf. Bir de girilen tüm harfleri hafızada tutup outputta göstermem gerekiyor. Ne eklemeliyim nasıl yapmalıyım tam olarak bulamadım. Tekrardan teşekkür ederim.


    Kod:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int main () {
    srand (time (NULL));
    char words [] [20] = {
    "LABORATORY",
    "COMPUTER",
    "PROGRAMMING"
    };
    int randomIndex =rand () & 3 ;
    int numLives = 5;
    int numCorrect= 0;
    int oldCorrect = 0;
    int lengthOfWord = strlen ( words [randomIndex]);
    
    // c o m p u t e r
    int letterGuessed [15] = {0,0,0,0,0,0,0,0,0,0,0};
    int quit= 0;
    int i = 0;
    char guess [20] ;
    char letterEntered ;
    //game loop
    while ( numCorrect< lengthOfWord ){
    printf ("\n\nNEw turn..\nHangman Word: ");
    for (i =0 ; i < lengthOfWord ; i++ ){
    if (letterGuessed == 1 ) {
    printf ("%c",words [randomIndex] );
    }else {
    printf ("-");
    }
    } // first for loop
    printf ("\n");
    printf ("Number correct so far : %d : \n",numCorrect);
    printf ("Enter a guess letter : ");
    fgets ( guess , 20, stdin );
    if (strncmp (guess, "quit" , 4 )== 0 ){
    quit =1;
    break;
    }
    letterEntered = guess [0];
    printf ("letterEntered : %c",letterEntered );
    oldCorrect=numCorrect;
    for (i =0 ; i < lengthOfWord ; i++ ){
    if (letterGuessed == 1 ) {
    continue ;
    }
    if (letterEntered == words [randomIndex] ){
    letterGuessed = 1;
    numCorrect++;
    } // second if loop
    } // first for loop
    if (oldCorrect == numCorrect ){
    numLives--;
    printf ("Sorry, wrong guess \n");
    if (numLives==0){
    break;
    }
    }
    else{
    printf ("Great, correct guess \n");
    }
    } // end of the while loop
    if (quit == 1 ){
    printf ("\nthe user quit early\n");
    } else if (numLives==0) {
    printf ("\nSorry, GAME OVER. The word was %s \n",words [randomIndex]);
    }
    else {
    printf ("\nYOU WIN :) \n ");
    }
    return 0;
    }
     
    Son düzenleme yönetici tarafından yapıldı: 29 Aralık 2016
  4. Atakan Akbulut

    Atakan Akbulut Yetkili Kişi Moderatör

    Kayıt:
    28 Nisan 2016
    Mesajlar:
    143
    Beğeniler:
    42
    Meslek:
    R&D Embedded Systems Software Engineer
    En İyi Cevap:
    5
    Değerlendiriler:
    +63 / 0 / -0
    Merhabalar
    Asagidaki kodlari duzgun bir compiler ile derlemeden sonra istediginizi elde edebilirsiniz. Bazi programlarin uyusmamasi sebebi ile sizde belki calismayabilir. Ben gcc compiler ile duzenledim.
    kolay gelsin

    Kod:
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #include<string.h>
    int main()
    {
       char arr[91][20]={"kelime1","kelime2"};
       char harf;
       char toplam[15]={'&','&','&','&','&','&','&','&','&','&','&','&', '&','&','&'};
       int i,size=0,x,y=0,d=0,t=0;
       srand(time(NULL));
       printf("kelimeyi  tahmin ediniz ?\n");
       x=0+rand()%50;
       size=strlen(arr[x]);
       for(i=0;i<size;i++)
       {
          printf("__ ");
       }
       printf("\n");
       while(y<5)
       {
          printf("\nbir harf gir ");
          fflush(stdin);
          scanf("%c",&harf);
          for(i=0;i<size;i++)
          {
             if(harf==arr[x][i])
             {
                toplam[i]=harf;
                d++;
                t++;
             }
          }
          if(d==0)
          {
             printf("\a");
             y++;
          }
          if(d!=0)
          {
             for(i=0;i<size;i++)
             {
                if(toplam[i]!='&')
                {
                   printf("%c ",toplam[i]);
                }else{
                   printf("__ ");
                }
             }
          }else{
             printf("%d. hakkinizi doldurdunuz\n",y);
             if(y!=5)
             {
                printf("%d hakkiniz kaldi\n",5-y);
             }
             if(y==5)
             {
                printf("GAME OVER!!!\n");
                printf("dogru cevap '%s' olacakti\n\n",arr[x]);
             }
          }
          if(t==size)
          {
             printf("\n\nTEBRIKLER !!!\n");
             break;
          }
          d=0;
          printf("\n");
       }
       printf("\n");
       system("pause");
       return(0);
    }
     
  5. saika

    saika MB Üyesi

    Kayıt:
    2 Eylül 2015
    Mesajlar:
    5
    Beğeniler:
    1
    En İyi Cevap:
    0
    Değerlendiriler:
    +1 / 0 / -0
    Üniversite:
    İstanbul Medipol Üniversitesi



    Gerçekten çok teşekkür ederim yardımlarınız mutlu etti :) iyi akşamlar
     
  6. Atakan Akbulut

    Atakan Akbulut Yetkili Kişi Moderatör

    Kayıt:
    28 Nisan 2016
    Mesajlar:
    143
    Beğeniler:
    42
    Meslek:
    R&D Embedded Systems Software Engineer
    En İyi Cevap:
    5
    Değerlendiriler:
    +63 / 0 / -0
    iyi calismalar..