Thread overview
D ile yap boz oyunu
Feb 01, 2016
erdem
Feb 01, 2016
erdem
Feb 02, 2016
zafer
Feb 02, 2016
erdem
Feb 02, 2016
zafer
Feb 02, 2016
erdem
February 01, 2016

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

February 01, 2016

Tamam şimdi oldu. Taşların konumunu değiştirmeyi unutuyormuşum :)

http://www.zayifakim.org/resim/resim/yapbozkaristir.png

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

February 01, 2016

D'deki randomShuffle():

import std.stdio;
import std.random;
import std.range;
import std.algorithm;

struct Taş {
   size_t numara;
}

void main() {
   Taş[] taşlar = iota(5).map!(n => Taş(n)).array;
   writefln("Önce : %s", taşlar);
   taşlar.randomShuffle();
   writefln("Sonra: %s", taşlar);
}

Ali

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

February 02, 2016

Erdem eline sağlık çok güzel olmuş, bence bir ara D forum bünyesinde bir SDL grubu kurup SDL üzerine daha çok bilgi paylaşmalıyız. SDL ile çok güzel işler ortaya çıkarmak mümkün görünüyor.

Bu arada seni yakalamışken, geçenlerde elime bir RaspberryPi geçirdim. Üzerinde Raspberian işletim sistemi vardı hemen üzerine GDC arm sürümünü kurdum ve küçük bir merhaba dünya projesi geliştirtim. D ile keyifliydi :)

Ancak bu işlerden pek anlamıyorum ve D ile pi'nin bacaklarına (pin) ulaşmak istiyorum. Normade python için çok güzel bir kütüphanesi var ama ben D ile çalışmak istediğim için bunu kullanamıyorum. Bu konuda biraz bilgi paylaşırmsın? Nasıl yapabilirim?

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

February 02, 2016

Teşekkürler :)

Ben şimdiye kadar Arduino ve Beagleboard ile çalıştım. Maalesef Rasberry Pi konusunda deneyimim yok.

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

February 02, 2016

Anlıyorum, teşekkürler.

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

February 02, 2016

D ile yap boz daha kolay oldu :)

Denemek isteyen arkadaşlar eğer D derleyicisi kurulu değilse Digital Mars derleyicisinin son sürümünü http://dlang.org/download.html
adresinden kurabilirler.

SDL geliştirme kütüphanelerini de :

'$ sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev'

Oyunun kaynak kodunu bilgisayarınıza kopyalamak için

'$ git clone https://github.com/erdemoncel/oyun.git '

demeniz yeterli. Daha sonra yapboz dizinine geliyoruz.

'$ cd oyun/yapboz'

Oyunu derlemek için **'make yapboz' **demeniz yeterli. Çalıştırılabilir dosya bin dizininde oluşuyor.

'$ cd ../bin/
$ ./yapboz
'

diyerek oyunu çalıştırabilirsiniz.

Taşları karıştırmak için k tuşuna basmanız yeterli. Eğer isterseniz oyun.d içinde içerik yükle kısmını

       resim = içerik.yükle("yapboz.jpg");

olarak değiştirebilirsiniz. Böylece oyunun nasıl çalıştığını daha iyi gözlemleyebilirsiniz.

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