Ana Menü
· Ana Sayfa
· Dosyalar
· Dökümanlar
· Forum
· Günün Resmi
· Haber Arşivi
· WWW Linkleri
· Üye Listesi

     Forumlar

 strncpy ve strncpy_s
 Konu adi : Borland c++ Builder ile Amiral Batti
 Rady10 - YerliOyun
 Kabusta Kaybolmak
 Konsol da programı bekletmek
 Oyun programlama icin hangi programlama dilli ?
 flash! şanlıurfa bilgisayar oyununda(no rapid)
 Sevgilim Olur musun?
 Directx'e başlamak isteyenler bi bakın
 PSP programlama
 Flash tan php
 Bilgisyr oyunu yapmam için üniverstde hangi bölüme girmeliym
 www.arshiv.gen.ms
 Cimg.h ilgilenenler icin
 müttefik oyunu

Konu Disi
 Emraah
 Yeni sitemiz açıldı
 Kalp krizi durumunda ne yapılmalı?
 Oyun sektöründe hangi görevde çalışmak isterdiniz?
 Takım arkadaşı sorunu
 msn de renklı nıck
 pc hata veriyor ! YARDIM!!
 Gülmek isteyenler Buraya
 İnanılmaz hl 2 modu görüntüsü
 Computer Languages History

[ Forumlara Git ]


C/C++ İle Kütük İşlemlerine Giriş

(694 kelime)
(662 okuma)   Yazdırılabilir Sayfa




C/C++ İle Kütük İşlemlerine Giriş

//    Bildiginiz gibi dosyalar oyunların ayrılmaz parcalarından biridir.
//    Oyunda kullanılan modeller,ortamlar,dokular, oyunla ilgili ayarlar vb.
//    birçok öğe dosyalarda bulunur.Dolayısıyla dosya işlemlerini iyi bilmemiz
//    gerekmektedir.

//    Dosya işlemleri şu şekilde gerçekleşir:
//    Önce dosya açılır.Sonra dosyadan veri okunur,veya dosyaya yazılır.
//    Bu arada dosya göstergeci de (ekrandaki imlecin yazdığımızda hareket etmesi gibi)
//    dosyaya yazıldıkça veya okundukça dosya üzerinde hareket eder.Mesela dosyanın
// başındayken 3 byte'lık bir veri yazdığımızda artık dosya gostergecinin degeri 3 olur.
//    Dosya ile işimiz bitince bir çırpıda dosyayı kapatırız.

//    Önce C'de dosya işlemlerinde sık kullanılan fonksiyonlara bir göz atalım.
//    Örneklerde de bu fonksiyonları kullanacağız.Aşağıdaki fonksiyonlar <stdio.h>
//    kütüphanesinde tanımlanmıştır..


// fopen() : FILE *fopen(char *filename,char *mode)
   
//    -> filename ile belirtilen dosyayi 2.parametrede verilen modda acar.
//        Eger fopen başarılı olursa geriye FILE tipinde bir adres döndürür.
//        Dosya acılamazsa geriye NULL gösterici döner.
//        Sık kullanılan modlar(ikinci parametre):
//        "r" : Sadece okuma.Dosya diskde bulunmalıdır.
//        "w" : Sadece yazma.Dosya yoksa oluşturulur.Var olan dosyanın icerigi silinir.
//        "a"    : Dosyaya ekleme yapmak icindir.
//        "r+" : Dosyadan hem okuma hem yazma icin.
//        "t"    : text dosyayı(örn: "rt" metin dosyasından okuma)Bu dosyaların herhangi bir text
//            exitoru ile içeriği elde edilebilir.

//        "b"    : binary dosya (binary dosyalarda veriler bilgisayarın belleğindeki saklandığı
//            gibi saklanır.Dolayısıyla bu tip dosyalari text editoruyle açtığınızda
//            acayip karakterlerle karşılaşırsınız.Çoğu dosya bu tipdedir.

//        Mesela 300.032102 sayısını text dosyasında saklarsanız her bir karakter 1 byte dan
//        10 byte tutar.Ama binary dosyada saklarsanız bu bir float sayı olduğundan ve de
//        float tipi bellekte 4 byte'la saklandığından dosyada da 4 byte yer kaplayacaktır.   


//    fclose() : int fclose(FILE *fp)
//        -> Açılmış olan bir dosyayi kapatmakta kullanılır.Açılan dosyalar
//        kapatılmazsa problemler çıkabilir(Özelliklede yazım yapıldıysa)

//    fprintf() : int fprintf(FILE *fp,const char *format,argumanlar)
//        -> Dosyaya formatlı yazım yapar.Aynı printf gibidir.Ama ekrana değil
//        dosyaya yazar.

//    fscanf() : int fscanf(FILE *fp,const char *format,argumanlar)
//        -> scanf gibidir.Dosyadan formatlı okumada kullanılır.
//        Geriye yapabildiği atama sayısını döndürür.

//    fputs()    : int fputs(char *str,FILE *fp)
//        -> puts()'a benzer.Dosyaya bir string yazmakta kullanılır.

//    fgets()    : char *fgets(char *str,int n,FILE *fp)
//        -> gets()'e benzer.Dosyadan string okumakta kullanılır.
//        yeni satır karakteriyle("\n") karşılaşıncaya kadar okuma yapar.

//    feof()    : int feof(FILE *fp)
//        -> Dosya sonuna gelindiyse 1,aksi takdirde 0 değeri geri döner.

//    Henüz pek bir anlam ifade etmeyen bu fonksiyonlar aşağıdaki örnekler anlaşılabilir.

//    Sıklıkla kullanılan fread(),fwrite(),fseek() fonksiyonlarını ikili dosyalarda
//    kullanmak üzere ilgili dökümana saklıyorum.
//                        
//    Bu örnekte önce bir y=x2 parabol(bir çeşit eğri)'unun koordinatlarını oluşturup bu
// veriyi dosyaya yazacağız.
//    Sonra bu dosyadan koordinatları alıyoruz.

//    Olmazsa olmaz, her derde deva kütüphanemiz stdio.h
#include <stdio.h>
#include <stdlib.h>
//exit() fonksiyonu için

void main(void)
{

    // Dosya ile bir takım bilgileri saklamak için FILE tipinde bir pointer tanımlamalıyız.
    // Tüm dosyalarla ilgili fonksiyonlarda, yukarıda da gördüğünüz gibi,bu değişken
    // mutlaka parametrelerde geciyor.
   
 
  FILE *fp;

    // Oluşturacağımız parabolun koordinatlarını tutacak değişkenler.
  
float x,y;
   
    // "dosya.dat" isimli dosyayi "wt":text modunda,ve yazmak için açıyoruz.
    // Dosya yoksa oluşturuluyor.Ve dosya işaretcisi dosyanın başına hareket ediyor.
 
  fp=fopen("dosya.dat","wt");
   
    // Eger herhangi bir sebepten dolayı dosya acılamadıysa programı sonlandırıyoruz.
 
  if(fp==NULL) {
        puts("Dosya açılamadı");
        exit(0);
    }

   
    // x'e -5 den 5 e kadar 0.25 birim arayla değer verip buna karşı gelen y degerini hesaplayıp
    // parabol koordinatlarımızı dosyaya yazıyoruz.
    // dikkat ettiyseniz %f %f arasına virgul koydum.Ne de olsa formatlı yazıyoruz.
  
for(x=-5 ; x<=5 ; x+=0.25){
        y=x*x;
        fprintf(fp,"%f,%f\n",x,y);
    }

   
    // dosyayı kapatmayı unutmuyoruz
    fclose(fp);

    // Artık dosyaya istedigimiz bilgileri yazdık.İsterseniz herhangi bir metin
    // editöru(wordpad,notepad,vs...) yardımıyla dosyanın içini görebilirsiniz.
    // Dosyayı tekrar acalım fakat bu sefer okuma amacıyla "rt" modunda acalım.
  
fp=fopen("dosya.dat","rt");
   
    // Eger herhangi bir sebepten dolayı dosya acılamadıysa programı sonlandırıyoruz.
   
if(fp==NULL) {
        puts("Dosya açılamadı");
        exit(0);
    }
   

    // fscanf() 'in okuma yapabildiği yere kadar okuyoruz.Yani aşağıda fscanf
    // 2 (x ve y) değişkene atama yapıyor.Dosya sonuna geldiğinde atama yapamaz ve
    // döngüden çıkar.Dosyamızda veri örneğin "-5.000000,25.000000" şeklinde saklandığından
    // dolayı bizde %f %f arasına virgün koyduk.Yani formatlı okuduk.
   
    // fgets() ile dosyayın satırlarını stringler şeklinde okuyabilir ve bu stringlerden
    // istediğimiz değerleri sscanf yardımıyla alabilirdik.Mesela bir satırdaki x ve y'i
    // char str[255]
    // fgets(str,255,fp)
    // sscanf(str,"%f %f",&x,&y);
    // ile okuyabilirdik.
    while(fscanf(fp,"%f,%f\n",&x,&y)>0){
   
    // burda printf ile koordinatları ekrana yazmanın pek bir anlamı yok ama siz basit bir
    // GLUT veya SDL uygulamasıyla bu koordinatları dosyadan alıp, ekrana çizip,
    // hatta parabol denkleminde değişikler yapıp evde, işyerinde, okulda eğlenceli
    // dakikalar geçirebilirsiniz:)
   
   
    printf("%f,%f\n",x,y);

    }

   
    // dosyayı kapatalım.
   fclose(fp);
}


// Sonraki dökümanda Wavefront'un *.obj dosya tipini ele alıp, ilgili bir GLUT
// uygulması hazırlayacağız.İyi çalışmalar

UzMaN :: 2003 :: www.oyunyapimi.org
  

[ Geri Dön: Oyun Yapımı (Genel) | Bölümler İndeksi ]




Web site powered by PHP-Nuke
Web site engine\'s code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Sayfa Üretimi: 0.042 Saniye