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. ]