Forum: Projeler Genel RSS
D projeleri(miz)
Sayfa:  önceki  1  2  3  4  5  sonraki 
acehreli (Moderatör) #16
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 373
erdem, hayır, C++ doğrudan çağrılamıyor. Bunu yapmamalarının iyi nedenleri olduğunu okuduğumu hatırlıyorum. C++'ı çağırabilmek için bir kaç yol var:

  http://digitalmars.com/d/2.0/cpp_interface.html

Ali
erdem (Moderatör) #17
Üye Tem 2009 tarihinden beri · 910 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
erdem, hayır, C++ doğrudan çağrılamıyor. Bunu yapmamalarının iyi nedenleri olduğunu okuduğumu hatırlıyorum. C++'ı çağırabilmek için bir kaç yol var:

  http://digitalmars.com/d/2.0/cpp_interface.html

Peki bu C++ ile yazılmış bir kütüphaneyi (clanlib gibi) kullanamayıp, C ile yazılmış bir grafik kütüphanesini kullanabileceğimiz anlamına mı geliyor.  Umarım doğru anlamışımdır.
acehreli (Moderatör) #18
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
C++ kütüphaneleri için o sayfada gösterilen üç seçenek var. Zor değil ama ek bir ara işlem...

Ali
canalpay (Moderatör) #19
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 373
ceviz.netteki python forumlarında python için kodbankası yazılmasından bahsediliyordu bizde bunu Ddili için olanını yapabiliriz.link : http://forum.ceviz.net/python-zope/75660-python-kod-bankas…  Projenin ayrıntıları hazır ve bu proje hemde d dili için de yararlı olacaktır. Ama bunu d dili ile yazmak oyun yazmaktan daha zor olabilir. Hatta çok zor olabilir.

İnşallah bu  oyun yada başka bir şey yazarken benim gibi bir çok kişi bu olaya yabancı kalmaz. Yada proje bitmeden sonlandırılmaz. Çünkü zor bir projede fikir ne kadar iyi olsada kodları anlayamadıktan sonra insanlar projeyi takip etseler bile katılamayacaktırlar. Hatta bir süre sonra bu olaydan bıkıp d dilini bile bırakacaklardır. Bunu nereden mi biliyorum ? Ben de olsam bunu yapardım.
acehreli (Moderatör) #20
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
İnşallah ... bir çok kişi bu olaya yabancı kalmaz

Hiç sanmıyorum. Amaçlardan biri öğrenmek olunca ve projenin arkasında böyle bir forum olunca her türlü soru yanıtlanır ve bence çok güzel öğrenilir.

D.ershane'de ilerledikçe, gerekirse oradaki sayfalara gönderme de yaparız...

Ali
canalpay (Moderatör) #21
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
En başta dediğim gibi proje için ayrı bir forum kategorisi olsa çok iyi olur. Çünkü soracağımız soruların en azından benimkinin arkası gelmeyecek gibi. Şimdi ise tek olarak proje kalıyor.
erdem (Moderatör) #22
Üye Tem 2009 tarihinden beri · 910 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu proje için clanlib kullanma konusunda biraz acele etmişim. Çünkü görünüşe göre clanlib uygulamalarında basit bir uygulama da aslında bir c++ sınıfından devralıyor. Bu nedenle clanlib'i d ile kullanmak zor gibi gözüküyor.

Bu yüzden başka bir alternatif aramaya başladım ve sdl kütüphanesini kullanmaya karar verdim. Bunun için eski adıyla build (yeni adıyla bud) isimli bir araç kullanmak gerekiyormuş. Bildik şekilde

make -f Makefile.unix

şeklinde kurmaya çalıştım. Ama bir sürü hata aldım.

make -f Makefile.unix
dmd -op -release -inline -ofbuild build.d util/pathex_bn.d util/pathex.d source_bn.d util/str.d build_bn.d util/booltype.d util/fdt_bn.d util/str_bn.d source.d util/fdt.d util/fileex.d util/fileex_bn.d util/linetoken.d util/linetoken_bn.d util/macro.d util/file2.d
build.d(56): Identifier expected following package
build.d(56): ';' expected
build.d(634): identifier expected following '.', not 'macro'
build.d(3348): identifier expected following '.', not 'macro'
source.d(55): Identifier expected following package
source.d(55): ';' expected
source.d(105): Identifier expected following package
source.d(105): ';' expected
source.d(483): identifier expected following '.', not 'macro'
util/macro.d(38): Identifier expected following package
make: *** [build] Error 1

Daha sonra bunların artık macro kelimesinin bir özel kelime haline geldiği için olduğunu öğrendim. Bu macro kelimesi yerine farklı bir kelime kullanınca bu hatalar gitti. Daha sonra posix'le ilgili derleyici yakındı. O hatalar da bir şekilde düzeldi. Şimdi de şu hataları veriyor:

make -f Makefile.unix
dmd -op -release -inline -ofbuild build.d util/pathex_bn.d util/pathex.d source_bn.d util/str.d build_bn.d util/booltype.d util/fdt_bn.d util/str_bn.d source.d util/fdt.d util/fileex.d util/fileex_bn.d util/linetoken.d util/linetoken_bn.d util/makro.d util/file2.d
util/linetoken.d(51): Error: cannot implicitly convert expression (",") of type immutable(char)[] to char[]
util/linetoken.d(51): Error: cannot implicitly convert expression ("//") of type immutable(char)[] to char[]
util/linetoken.d(51): Error: cannot implicitly convert expression ("\\") of type immutable(char)[] to char[]
util/linetoken.d(71): Error: cannot implicitly convert expression (",") of type immutable(char)[] to dchar[]
util/linetoken.d(71): Error: cannot implicitly convert expression ("//") of type immutable(char)[] to dchar[]
util/linetoken.d(71): Error: cannot implicitly convert expression ("\\") of type immutable(char)[] to dchar[]
make: *** [build] Error 1

Hata veren linetoken.d dosyasının ilgili kısımları şu şekilde.

module util.linetoken;
private import util.linetoken_bn;
 
private {
    static import std.ctype;
    static import std.string;
    static import std.utf;
 
}
char[][] TokenizeLine(char[] pSource,
                      char[] pDelim = ",",
                      char[] pComment = "//",
                      char[] pEscape = "\\")
{// <-- Derleyicinin tam olarak yakınmaya başladığı 51.satır burası
    dchar[][] lTemp;
    char[][] lResult;
 
    lTemp= TokenizeLine( std.utf.toUTF32(pSource),
                         std.utf.toUTF32(pDelim),
                         std.utf.toUTF32(pComment),
                         std.utf.toUTF32(pEscape) );
    foreach( dchar[] lLine; lTemp )
    {
        lResult ~= std.utf.toUTF8( lLine );
    }
 
    return lResult;
}

Bazıları da bud isimli aracın çok eski olduğunu söylüyorlar. Ben derleyici olarak dmd 2.0 kullandım. Sırf bunu derlemek için de derleyici değişikliğine gitmeyeyim diye düşündüm. Olmazsa artık dmd 1.0 sürümü bir derleyiciyle tekrar deneyeceğim..
acehreli (Moderatör) #23
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
O hata mesajını tanıyorum. Çift tırnaklarla yazılan dizgiler D2'de değişmez oluyorlar. char[] dizgilerine atamak için .dup ile kopyalanmaları gerekiyor:

char[] benimki = "abc".dup;

Veya, TokenizeLine'ın parametreleri de immutable yapılabilir ve sonra toUtf32 çağrılırken .dup yapılır; vs...

D2 eski kodlarla çalışmak üzere tasarlanmamış; ben olsam D1 kodları üzerinde hiç uğraşmazdım. :)

Ali
erdem (Moderatör) #24
Üye Tem 2009 tarihinden beri · 910 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli on 2009-08-30, 12:47:
D2 eski kodlarla çalışmak üzere tasarlanmamış; ben olsam D1 kodları üzerinde hiç uğraşmazdım. :)

Evet D1 sürümünü kullanınca bud derlendi ve kullanılabiliyor.

Clanlib'le ortaya çıkan problemler nedeniyle SDL derelict ve bud üçlüsüyle artık D ile SDL uygulamaları geliştirebiliyorum.

Derleme işlemi pek kısa sayılmaz:

bud resimyukle.d -I ~/dmd/src/ext/ -L-ldl -exec -op ~/dmd/src/ext/derelict/opengl/glx.d

Kaynak kod da bu şekilde.

import std.string;
import derelict.sdl.sdl;
import derelict.sdl.image;
 
 
// dikey ve yatay ekran cozunurlukleri
const int xCozunurluk = 480;
const int yCozunurluk = 480;
 
// ekranda her pikselde gosterilecek bit sayisi. 24=> gercek renk
 
const int pikselBitSayisi = 32;
 
SDL_Surface * ekran = null;
SDL_Surface * arkaplan = null;
 
 
 
SDL_Surface * resimYukle (char * dosyaIsmi)
{
    SDL_Surface * yuklenenResim = null;
    SDL_Surface * optimizeResim = null;
    yuklenenResim = IMG_Load (dosyaIsmi);
    if (yuklenenResim != null)
    {
        optimizeResim = SDL_DisplayFormat (yuklenenResim);
        SDL_FreeSurface (yuklenenResim);
    }
    return optimizeResim;
}
 
void yuzeyUygula (int x, int y, SDL_Surface * kaynak, SDL_Surface * hedef)
{
    SDL_Rect konum;
 
    konum.x = x;
    konum.y = y;
 
    SDL_BlitSurface (kaynak, null, hedef, &konum);
}
    
 
void ilklendir ()
{
    // SDL Derelict modulunu yukle
    DerelictSDL.load ();
    DerelictSDLImage.load ();
    
 
    // Tum SDL modullerini yukle
    SDL_Init (SDL_INIT_EVERYTHING);
 
    // penceremizi olusturuyoruz
    ekran = SDL_SetVideoMode (xCozunurluk, yCozunurluk, pikselBitSayisi,
                              SDL_SWSURFACE);
    SDL_WM_SetCaption (toStringz ("Pekemon :)"), null);
}
 
void kaynaklariGeriVer ()
{
    // SDL'e cikmasini soyle
    SDL_Quit ();
 
    // SDL tarafindan paylasilan kutuphaneyi geri ver
    DerelictSDL.unload ();
}
 
void main ()
{
    ilklendir ();
    arkaplan = resimYukle ("background.png");
    yuzeyUygula (0, 0, arkaplan, ekran);
    
    scope (exit) kaynaklariGeriVer (); // ciktigimiz zaman kaynaklari geri ver
 
  anaDongu:
    while (true)
    {
        SDL_Flip (ekran);
        
        SDL_Event olay;
        
        // bu dongu isletilirken ortaya cikabilecek tum olaylari isle
        while (SDL_PollEvent (&olay))
        {
            switch (olay.type)
            {
                // kullanici pencerenin kapatma tusuna tikladi
            case SDL_QUIT:
                break anaDongu;
                // varsayilan olarak hicbirsey yapmiyoruz switch=>den cik
            default:
                break;
            }
        }
    }
    
}

Hatta bir de ekran görüntüsü vereyim :)

[Resim: http://img527.imageshack.us/img527/3240/ekran.png]

Daha hangi projeye karar verdiğimiz belli olmadığı için şimdilik sadece arkaplanı çiziyor. Yorumlarınızı bekliyorum.

Bir ikincisi artık hangi proje üzerinde çalışacağımız konusunda karara vardık mı? Bunu merak ediyorum.
canalpay (Moderatör) #25
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Güzel bir proje olabilir. Ama ilk olarak saf d ile kodlayacağımız bir proje olmalı. Hem anlaşılması daha kolay olur. Hemde ilk proje olacağı için böyle daha karmaşık bir projeye göre rahat ilerleriz. Ama hiçbir proje olmamasındansa böyle bir proje olması çok daha iyidir.
acehreli (Moderatör) #26
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Hmmm... Güzel... :)

Derleme komutu çok kısa aslında: make ;)

Şimdi bunu nerede nasıl başlatıyoruz? Başka projeler de olabilir tabii... Haydi başlasınlar bir yerde... :)

Ali
erdem (Moderatör) #27
Üye Tem 2009 tarihinden beri · 910 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Burda son bir kere daha forum üyelerine soruyorum. Emin misiniz? :)

Çünkü bir de işin şöyle bir yönü var. Sanırım grafik programlama olayına D biraz dolaylı şekilde kullanıyor. Bazı şeyler tam olgunlaşmamış gibi gözüküyor. Örneğin SDL kütüphanesini bile dolaylı olarak bu binding yapan ek kütüphaneler ile kullanıyor. Derleme aracı olarak kullandığı bud D1 sürümünde derleniyor. Ama D2 derleyicisi ile çalışıp çalışmadığı garanti değil. (Belki de Ali bey'in bildiği başka derleme yardımcıları vardır) Derelict'te bir problem yok gibi gözüküyor. Biraz önce bir resim dosyasından sprite'ları kesip buraya taşımayı daha sonra hareketlendirmeyi düşünüyordum. Tam olarak şöyle bir şey:

[Resim: http://lazyfoo.net/SDL_tutorials/lesson06/sprites.jpg]

Ama bir yerde program patladı. D'de kapsam çözünürlük (scope resolution) -> operatörü kullanılabiliyormuydu? Çok uğraşmamakla beraber ilk aklıma gelen o oldu. Aslında SDL kütüphanesi arkadaşların düşündüğü gibi zor değil aksine basit bir kütüphane. Hatta gerekirse SDL'le ilgili  o aşamaya kadar işlevleri de anlatabilirim. Ama benim korktuğum bu dolaylı kullanımdan oluşabilecek hatalar..

Evet başlatıyorsak nerede nasıl başlatıyoruz? :)
erdem (Moderatör) #28
Üye Tem 2009 tarihinden beri · 910 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
erdem:
Ama bir yerde program patladı. D'de kapsam çözünürlük (scope resolution) -> operatörü kullanılabiliyormuydu? Çok uğraşmamakla beraber ilk aklıma gelen o oldu.

Evet tahmin ettiğim gibi sorunlar kapsam çözünürlük operatöründen kaynaklanıyormuş. -> olan kısımları (* ). olarak değiştirince sorun düzeldi.

İkincisi internette biraz araştırınca D ve SDL kullanılarak yapılan başka oyunlar da olduğunu gördüm. Örneğin Titanion diye bir oyun..

[Resim: http://www.asahi-net.or.jp/~cs8k-cyu/windows/ttn_1l.gif]

Burda D ve SDL arasındaki bağlantı için D-porting isimli bir kütüphane kullanmışlar.

Japonlar yaptıysa bizim de yapmamız için bir neden yok diye düşünüyorum :)
acehreli (Moderatör) #29
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
1) Projenin kaynak kodu Türkçe mi olsun İngilizce mi? İkisinin de ayrı avantajları var.

2) Proje hosting için hangi siteyi kullanalım? Proje sitesi Türkçe olacaksa, bilinen Türkçe bir proje hosting sitesi var mı?

3) Proje sitesi Türkçe olmayacaksa, sürüyle proje hosting sitesinden tercih ettiğiniz bir tane var mı?

Ben şu anda yabancı hosting siteleri hakkında bilgi toplamaya çalışıyorum. İki bağlantı:

http://en.wikipedia.org/wiki/Comparison_of_free_software_h…

http://stackoverflow.com/questions/10490/best-open-source-…

Ali
erdem (Moderatör) #30
Üye Tem 2009 tarihinden beri · 910 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
1) Projenin kaynak kodu Türkçe mi olsun İngilizce mi? İkisinin de ayrı avantajları var.

Burada sanırım kaynak kodda kullandığımız değişken isimlerini falan kasdediyorsunuz. Ben tercihimi (her ne kadar bazı kelimelere örneğin =>blitting karşılık bulmak zor olsa da) Türkçeden yana kullanırım.

Proje'nin kaynak kodundan çok kendisi, açıklama sayfaları, dökümantasyonu (ki eğer öyle bir duruma gelirse :) çift dil destekleyecek şekilde olursa süper olur.

acehreli:
2) Proje hosting için hangi siteyi kullanalım? Proje sitesi Türkçe olacaksa, bilinen Türkçe bir proje hosting sitesi var mı?

Ben şimdiye kadar hiç Türkçe proje sitesi duymadım.

acehreli:
3) Proje sitesi Türkçe olmayacaksa, sürüyle proje hosting sitesinden tercih ettiğiniz bir tane var mı?

Burada da sağladığı özellikler nedir? ne değildir? tam bilmemekle beraber oyumu google code'dan yana kullanıyorum. Çünkü görünüm olarak sade ve hoş bir arayüz sunuyor. Örneğin:

 http://code.google.com/p/itask-module/

Gene de bu konularda tercih tamamen sizin çünkü bu konuda deneyimli olan sizsiniz :)
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  önceki  1  2  3  4  5  sonraki 
Forum: Projeler Genel RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-08-23, 18:09:13 (UTC -07:00)