Jump to page: 1 2
Thread overview
Oyunun çizilmesi
Jun 16, 2010
Racih
Jun 17, 2010
Racih
Jun 17, 2010
Racih
Jun 17, 2010
Racih
Jun 17, 2010
Racih
Jun 17, 2010
Racih
June 16, 2010

Alıntı:

>

Can'dan şimdiye kadar duyduğumuz tasarımlar oyunun görüntülenmesini dışarıda bıraktıklarına göre, o konuyu onun tasarımlarından bağımsız olarak düşünmeye başlayabiliriz.

Evet aynen öyle. Sizcede daha iyi olmadı mı ?

Alıntı:

>

Ne dersiniz? Can'dan başkaları öncelikli olacak şekilde ;) bu konuda çalışmak isteyen var mı? :)

Beni şutluyorsunuz sanırım. Size başarılar. Oyun görüntülenirken gtkD ve qtD ile uğraşmak istemeyenler belki curses ile uğraşmak isteyebilirler. Yani cursesi D'de çalıştırdık, isteyen onlar ile uğraşşsın. Veya herşeyi kendileri yazmak isteyebilir.

Size başarılar !

Not : Ben yokum rahat rahat projenin bu kısmına bulaşabilirsiniz :-P

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 15, 2010

Can'dan şimdiye kadar duyduğumuz tasarımlar oyunun görüntülenmesini dışarıda bıraktıklarına göre, o konuyu onun tasarımlarından bağımsız olarak düşünmeye başlayabiliriz.

Oyunun nasıl görüntüleneceğini düşünelim. Bunun için birden çok ortam kullanabileceğimizi biliyoruz: GtkD, QtD, konsol ekranı, vs. Bunların hepsi ile de uyumlu olan nasıl bir arayüz düşünebiliriz?

Programı hangi ortamda çalıştığımızdan bağımsız olarak işleteceğiz, ve örneğin çiz() diyerek oyunun belirli bir anının görüntülenmesini sağlayacağız. Bunun için, ortamdan bağımsız bir arayüz tasarlamak gerekiyor.

Sesli düşünüyorum...

class OyunÇizici
{
   int yükseklik;
   int genişlik;
   // vs.

   this(int yükseklik, int genişlik, /* vs. */)
   {
       // ...
   }

   // masayı boşaltır
   abstract void sil();

   // masaya bir nesne yerleştirir
   abstract void yerleştir(Konum konum, OyunNesnesi nesne);

   // bütün masayı gösterir ortama uygun olarak gösterir
   abstract void çiz();

   // insan oyuncuyla etkileşir ve eldeki kağıtlardan hangisinin
   // seçildiğini döndürür
   abstract int kağıtSeç(OyunKartı[] el);
}

Bu sınıf, Can'ın Masa'sı tarafından kullanılabilir ve ortama uygun olarak çalışır.

Tabii aslında bu sınıftan türetilen bir çizici kullanılır. Bunu en kolay olarak konsol ortamında yazabiliriz:

class KonsolOyunÇizici : OyunÇizici
{
   dchar[][] tuval; // bütün masanın çizildiği 'resim'

   // ... yukarıdaki işlevleri iki boyutlu dizi içine çizecek şekilde tanımlar
}

'KonsolOyunÇizici.çiz' işlevi çok çok kolay olarak, tuval'in satırlarını art arda ekrana yazar. Ve örneğin şöyle bir çıktı elde edilir:


         Oyuncu 1

Oyuncu 2            Oyuncu 3

           Ali
       5♢ K♡ K♠ 4♡


(Tabii tasarıma göre masada başka oyun nesneleri de bulunabilir.)

Ne dersiniz? Can'dan başkaları öncelikli olacak şekilde ;) bu konuda çalışmak isteyen var mı? :)

Aslında aynı fikirden İşlevler dersinin 3 numaralı probleminde de söz etmiştim:

http://ddili.org/ders/d/islevler.html

Tabii başka birisi de GtkD veya QtD veya başka bir ortam için de yazabilir. Yukarıdaki kodlar da tamamen taslak... :) Yazmaya başladıkça değişmesi gerekecektir...

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 17, 2010

Hmm bak bu benlik iş :P . Ben uğraşıyım, öğrene öğrene ilerlerim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 17, 2010

Ramazan Bey şimdiden şu kodlardaki

struct KullanıcıAyarları
{
   dchar[] kulllanıcıAdı;
   int kişiSayısı;
   int bitmePuanı;

}


değerleri kullanıcıdan alan bir arayüz yapmaya kalkışabilirsiniz. İster gtkD ile ister qtD ile(Sanırım siz çalıştıramadınız ama Mengü Bey çalıştırmış idi. Ona nasıl çalıştırdığını sorabiliriz.) ister kendiniz sıfırdan bir konsol arayüzü yazarak isterseniz curses ile(http://ddili.org/forum/post/1921'de bağlayıcının kodları var.).

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 17, 2010

Teşekkürler :) ncurses le uğraşıyordum. Fakat getmaxyx si tanımadı.

benim_ncurses.d dosyasına şunu ekledim;
int getmaxyx(WINDOW *win,int row, int col);

deneme.d ye şunu ekledim;
getmaxyx(stdscr,row,col);

dmd -w -L-lncurses deneme.d ile derledim verdiği hata;

deneme.o: In function _Dmain': deneme.d:(.text._Dmain+0x23): undefined reference to getmaxyx'
collect2: ld çıkış durumu 1 ile döndü
--- errorlevel 1

Düzeltme : Şuan getmaxy ve getmaxx olarak iki fonksiyona ayrılmış. Şimdi diğer sorunlarla uğraşıyorum.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 17, 2010

Bende tanıtamadım. Ama benim bildiğim benim_ncurses.d dosyasına :

extern (C) int getmaxyx(WINDOW *win,int row, int col);

eklenmesi gerekiyor.

Ancak yine de aynı hata veriyor.

Ve benim bildiğim kadarıyla(KUTALMIS Bey beni aydınlatmıştı : http://ddili.org/forum/post/1887) bu hata bağlayıcının bizim şu komutta dmd -w -L-'lncurses' deneme.d kırmızı olarak tanımladığımız yerde getmaxyx işlevini tanımlanmadığını söylüyor.

Ali Bey gelince yanlışım var ise söyler ancak ben böyle biliyorum.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 17, 2010

ozaman

extern (c) {
int getmaxx(WINDOW *win,int row);
int getmaxy(WINDOW *win,int col);
int raw();
}

bu şekilde de çalışması lazım. Ama böylede o komut yemedi.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 17, 2010

Şöyle bir hata mı verdi :
curses.d(521): valid linkage identifiers are D, C, C++, Pascal, Windows, System

Eğer böyle bir hata verdiyse extern (c) yerine extern (C) yaz. Yani C'yi büyük yaz.

Çünkü ben getmaxy'yi denedim ve derlendi. Yok eğer başka bir hata varsa hata kodunuda söyleki anlayabilelim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 17, 2010

bende de derlendi fakat boş değer veriyor. Ayrıca parçalama hatası diyor. Benden kaynaklı bir hata var. Ah bir bulsam

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 17, 2010

Evet size özgü bir hata.
şöyle bir kod:

writeln(getmaxy(stdscr,5));

-1 değerini çıkışa yazdırıyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2