Hoşgeldiniz: OyunYapimi.org
 
Ara
Konular
  Üye Olun!    
Ana Menü
 Ana Sayfa
 Anketler
 Dosyalar
 Dökümanlar
 Forum
 Haber Arşivi
 WWW Linkleri
 Üye Listesi

Forumlar
Forumlarda Arama
 
[ Ara ]
Son yazilanlar

free ebooks - 2004-05-16 14:47 free ebooks...
oyun yazmak için - 2004-05-15 11:13 oyun yazmak için...
Sinus dalgası - 2004-05-14 19:21 Sinus dalgası...
Demosu yakında... - 2004-05-06 15:11 Demosu yakında......
Depth Test - 2004-05-03 20:55 Depth Test...
forum mesajlarini duzenlemek - 2004-05-03 19:34 forum mesajlarini ...
Başka Programlara Erişmek - 2004-05-03 17:44 Başka Programlara ...
Güzel bir e-book bağlantısı.. - 2004-05-03 16:06 Güzel bir e-book b...
Okyanus Dalgasi - 2004-05-03 16:00 Okyanus Dalgasi...
3d Shoot em up - 2004-05-03 15:57 3d Shoot em up...
Esnek Güç - 2004-05-03 13:32 Esnek Güç...
UltimateGameProgramming.com - 2004-05-03 12:29 UltimateGameProgra...
Function Pointer Nedir ne ise yarar - 2004-05-03 01:35 Function Pointer N...


Konu Disi


LAMER - 2004-05-10 01:58 LAMER...
anasafa yok forum var - 2004-05-08 16:01 anasafa yok forum ...
Anasayfa Kapali  Fakat.. - 2004-05-06 15:05 Anasayfa Kapali F...
Texture Arşivi - 2004-05-03 01:39 Texture Arşivi...
Yeni Kitap: Elektronik Hobi - 2004-05-03 00:29 Yeni Kitap: Elektr...
3DTURK - 2004-05-02 23:27 3DTURK...
Online Oyun - 2004-05-02 19:27 Online Oyun...


Splatt Forum

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

(694 kelime)
(334 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) | Dökümanlar İndeksi ]





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.