Aslında bunu C++ ile yapmıştım. Şimdi D versiyonunu yapmaya çalışıyorum ama bu sefer biraz daha basit olması açısından her taş nesnesinde bilgileri tutmayı düşündüm.
Örneğin ilk taşımızın konumu(0,0) genişliği 200, yüksekliği 150 ikinci taşın konumu (200,0) genişliği 200, yüksekliği 150 şeklinde bu bilgileri her sınıf tutuyor. Bir de her taş nesnesi kendi numarasını akılda tutuyor.
import std.stdio, sdl, vector2, cizici;
class Taş
{
Grafik2D oyuncuGrafik;
Vector2 konum;
int genişlik;
int yükseklik;
Dörtgen parça;
size_t numara;
static size_t sonrakiNumara;
this(Grafik2D grafik, Vector2 konum)
{
oyuncuGrafik = grafik;
this.konum = konum;
genişlik = 200;
yükseklik = 150;
parça.w = cast(ushort) genişlik;
parça.h = cast(ushort) yükseklik;
parça.x = cast(ushort) konum.x;
parça.y = cast(ushort) konum.y;
this.numara = numaraVer();
}
static size_t numaraVer()
{
immutable yeniNumara = sonrakiNumara;
++sonrakiNumara;
return yeniNumara;
}
size_t numaraOgren()
{
return this.numara;
}
void güncelle()
{
}
void çiz(Çizici çizici)
{
çizici.çiz(oyuncuGrafik, konum, parça);
}
}
Daha sonra oyun sınıfı içinde taşlarıDiz() isimli bir işlev tahtayı dolduruyor.
class Oyun : TemelOyun
{
Taş[] taşlar;
Grafik2D resim;
int taşGenişlik = 200;
int taşYükseklik = 150;
this()
{
super();
}
override protected void içerikYükle()
{
super.içerikYükle();
resim = içerik.yükle("cicek.jpg");
taşlarıDiz();
}
void taşlarıDiz()
{
auto oyuncuKonum = Vector2(0, 0);
for (int j = 0; j < 600; j = j + taşYükseklik)
for (int k = 0; k < 800; k = k + taşGenişlik)
{
oyuncuKonum = Vector2(k, j);
taşlar ~= new Taş(resim, oyuncuKonum);
}
foreach(eleman; taşlar)
{
writeln(eleman.numaraOgren());
}
}
override protected void güncelle()
{
/* ..... */
}
override protected void çiz()
{
// oyuncuyu içiz
foreach(eleman; taşlar)
eleman.çiz(çizici);
/* ..... */
}
}
Benim sormak istediğim şimdi her taşın bir numarası olduğuna göre taşlar dizisini bu numarayı kullanarak karıştırabilirmiyiz.
İlk dizdiğimizde taşlar şu şekilde duruyordu:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
C++'deki std::random_shuffle olanağına benzer şekilde bu nesneleri sadece numaralarına göre karıştırabilirmiyiz? Teşekkürler.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]