Forum: Ders Arası RSS
D ile yap boz oyunu
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: D ile yap boz oyunu
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.
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
erdem (Moderatör) #3
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Tamam şimdi oldu. Taşların konumunu değiştirmeyi unutuyormuşum :)

[Resim: http://www.zayifakim.org/resim/resim/yapbozkaristir.png]
zafer #4
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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?
https://github.com/zafer06 - depo
erdem (Moderatör) #5
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler :)

Ben şimdiye kadar Arduino ve Beagleboard ile çalıştım. Maalesef Rasberry Pi konusunda deneyimim yok.
zafer #6
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Anlıyorum, teşekkürler.
https://github.com/zafer06 - depo
erdem (Moderatör) #7
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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.
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:
Forum: Ders Arası 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-11-22, 12:28:59 (UTC -08:00)