Forum: Projeler pisti RSS
kart.d'yi nasıl gerçekleştireceğiz ?
Sayfa:  1  2  3  4  sonraki 
canalpay (Moderatör) #1
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: kart.d'yi nasıl gerçekleştireceğiz ?
Okunabilirliği arttırmak için ilk önce puanları enum olarak tanımlamayı düşünüyorum :

enum k_puan
{
    tek        =1,
    çift       =2,
    üç         =3,
    pişti      =10,
    vLipişti   =20,
 
                }

Valenin özel varanışı içinde belki enum yazabiliriz:

enum k_davranışlar
{
    normal, alır  }

Ancak 52 tane kartın değerini taşıyacak türü nasıl gerçekleştireceğiz ?

struct ile mi ? Yoksa eşleme tablosu ile mi ?

Sanırım eşleme tablosu olmaz. Çünkü birden fazla değer girmemiz gerekecek. Eşleme tablosu sadece birden fazla anahtar girmeye uygun(diye biliyorum.).

Yapılar ile nasıl gerçekleştireceğiz ?

Şuan ben onu düşünmeye başladım. Ama yapıları çok iyi bilmediğimden düşüncemden bir şey çıkar mı bilmem.


Birde konu başlığı ile alakasız ama piştilerin kurallarının bir çok varyasyonu var. Onun için bence projenin lideri piştinin kurallarını ayrıntılı bir biçimde anlatan bir metin dosyasını proje sunucusuna atmalı bence. Siz ne düşünüyorsunuz ?
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4511 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
Okunabilirliği arttırmak için ilk önce puanları enum olarak tanımlamayı düşünüyorum :

enum k_puan
{
    tek        =1,
    çift       =2,
    üç         =3,
    pişti      =10,
    vLipişti   =20,
 
                }

Valeli piştinin daha yüksek puan olduğunu duymamıştım. :) Piştinin çeşitlerine de bulaşmaya başladık. Kağıt kesilince altta vale varsa kesene verecek miyiz? vs. :)

Güzel. Programda puan sayılırken kullanılan bilgiler... O konuda bir eşleme tablosu kullanılabilir:

puan += puanTablosu[kart];

Tabii 52 kağıdı koymak yerine, yalnızca değerli olanlar durur. Onun için benim kod yanlış olur. kart'ın tabloda olup olmadığına önce in işleciyle bakmak gerek.

Valenin özel varanışı içinde belki enum yazabiliriz:

enum k_davranışlar
{
    normal, alır  }

İlginç... normal olduğu zaman değer eşitliği karşılaştırması yapılacak; değilse almış olarak kabul edilecek...

Ancak 52 tane kartın değerini taşıyacak türü nasıl gerçekleştireceğiz ?

struct ile mi ? Yoksa eşleme tablosu ile mi ?

Eşleme tablosu olabilir; tablo şöyle kurulabilir:

KartPuanı[Kart] puanTablosu  = [ Kart('♣', 2) : KartPuanı.çift, /* ... */ ];

(Ben genelde k_puan yerine KartPuanı gibi isimleri yeğliyorum. Ama o zaman da fazla uzun olabiliyor. Her zaman için kararsızlık yaşanan konular... :))

Ama yapıları çok iyi bilmediğimden

Yapılar çok basittir. :) Senin sınıflar yazdığını bildiğim için, yapıları da bildiğini düşünüyorum. Kabaca: Sınıfla başla, türemeyi çıkart, ve referans türü değil, değer türü olduğunu anla. Temelde o kadar basit. :) (Tabii ki bir ince noktalar da var ama kavram olarak kabaca o kadar.)

Yapılar dersinin problemlerinde ve çözümlerinde oyun kağıdı yapısı vardı. Fikir olarak başlangıç noktası olabilir:

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

Birde konu başlığı ile alakasız ama piştilerin kurallarının bir çok varyasyonu var. Onun için bence projenin lideri piştinin kurallarını ayrıntılı bir biçimde anlatan bir metin dosyasını proje sunucusuna atmalı bence. Siz ne düşünüyorsunuz ?

Bu konuya sen de değinmişsin... :) Bunu da oyuncuya bırakmalıyız. Puan hesaplarını ve kuralları soyutlayabilirsek, o arayüzlerden türemiş olan sınıflardan oyuncunun istediğini seçeriz. Programın geri kalanının bundan haberi olmaz:

      PiştiPuanları
     /     \      \
Normal Kahvehane  vs.

Ali
canalpay (Moderatör) #3
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Valeli piştinin daha yüksek puan olduğunu duymamıştım. :) Piştinin çeşitlerine de bulaşmaya başladık. Kağıt kesilince altta vale varsa kesene verecek miyiz? vs. :)

Ben şu şekilde biliyordum => "Normal pişti puanı verilir ayrıca pişti yapılan kağıdın değeride pişti puanına eklenir."
Ama wiki'den baktım orada Vale ise 20 puan değil ise 10 puan yazıyordu. İnternetten pişti oyunları oynadım ve şansıma Vale ile pişti yaptım :-) doğru çıktı.

Güzel. Programda puan sayılırken kullanılan bilgiler... O konuda bir eşleme tablosu kullanılabilir:


Çok mantıklı.

Tabii 52 kağıdı koymak yerine, yalnızca değerli olanlar durur.

Sonuçta 52 kağıdıda tanımlayacağız. Çünkü hangi sayıdan hangi şekilli kağıdı dağıttığımızı bilmemiz şart. Yani kartlar tüm ayrıntısı ile tanımlancak. Ancak ne yaparız. 2 deriz. programımız otomotik olarak kaç çeşit 2 olduğunu anlar ve onları tanımlar filan. Zor şuan tam olarak aklımda bir fikir yok. Şeytan diyor hepsini tek tek tanımla :-)

(Ben genelde k_puan yerine KartPuanı gibi isimleri yeğliyorum. Ama o zaman da fazla uzun olabiliyor. Her zaman için kararsızlık yaşanan konular... :))

Bende tercih etmiyorum ama yazarken son dakkada bir şeyler değiştirdim. Adınıda hemen koyabilmek için kısa tuttum.

Bence en zor karar bu kartlarda olacak. Ama aslında en basiti bu :-) Şey gibi romen rakamıda aslında kolay gibiydi ama aslında zorduda.

Bence bu kartlar modülünü ilk siz yazmaya başlayın. Böylece elimizde somut bir şey olur ona göre kartlar modülünü değiştiririz.
canalpay (Moderatör) #4
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu arada ben şöyle bir şey yapmak isterdim.
    Numara        Şekli                                                     =  Puan            pişti puanı    özel davranışı
Kart[2]             [sinekli(yada direk ♣ şeklinde gösteririz.)]   =  [puan.tek]    [puan.pişti]  [davranış.normal]

Ama bu şekilde tanımlayamayız çünkü benim bildiğim D'de bunu kolayca tanımlayabileceğimiz bir tür yok.

Ama bu verdiğim örnek en azından kart modülünde ne olmalı onu gösteriyor. Sizce ?
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4511 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Güzel... Bence sağ tarafta ihtiyaç duyulan şey bir yapı işte:

struct PiştiKartı
{
    Kartı kağıt;
    int puan;
    int piştiPuanı;
    Davranış davranış;
}

Benim anladığım kadarıyla, Kağıt çok genel bir kavram. O yalnızca renk ve değeri tutmalı. Ancak piştiye ait olan kavramlarla birleşince "pişti kağıdı" olarak anılabiliyor.

Sol tarafta anahtar olarak kullandığın da aslında hiçbir oyuna bağlı olmayan kağıt kavramını temsil ediyor galiba. Renk ve değeri ayırmanın bence bir yararı yok. Programda her yerde renk ve değer diye ayrı değişkenler kullanmak yerine, tek bir kart değişkeni kullanmak daha iyi olur:

Kart kart = oyuncu.oyna();

Yani bize tek bir kart verir. O yüzden, eşleme tablosunun anahtarı da Kart olmalı. Dolayısıyla, senin sol tarafta gösterdiğin değer ve renk bir yapı halinde birleşmiş oluyor.

(Bu arada; Kart mı, Kağıt mı?)

Ali
canalpay (Moderatör) #6
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
(Bu arada; Kart mı, Kağıt mı?)

Bende arasıra kağıt desemde kart kullanılıyor.
renk ve değeri ayırmanın bence bir yararı yok.

Neden ? Şekil ve değer zaten şart olacak ama ayrı olması bence daha iyi. Hem daha okunaklı hem de 2 dediğimizde 4 farklı şekil için 2 değerini veren bir işlevi daha kolay yazarız. Değil mi ?

Benim anladığım kadarıyla, Kağıt çok genel bir kavram.

Evet. Ama modülün adı kağıt olduğuna bakmayın sadece karttan bahsetmiyoruz. Pişti kartlarından bahsediyoruz.  Yani sadece normal yaşamımızda pişti için kullanılan 52 kartın bilgisayardaki biçimi olacak.
Normal yaşamımızda o pişti oynarken o kartların bizim için sabit bir değeri vardır. Bilgisayar içinde olacak ve beynimizde de bilgisayarda da bence o kartların değeri pişti dizinindeki kart modülünde saklıdır.

Bu arada bence kartlara ayrıca birde kartın kullanılıp kullanılmadığı hakkında da bir değer verilmeli.


Neyse bence siz aklınızdakini kodlarla bir taslak halinde yükleyin sonrada beraber fikir alışverişi yaparız.

Ama benim aklımda olan biçim şu şekilde :

Numara Şekli                                                   = Puan         pişti puanı    özel davranışı       oynanabilir mi?
Kart[2]  [sinekli(yada direk ♣ şeklinde gösteririz.)] = [puan.tek] [puan.pişti]  [davranış.normal]  [oynana.evet]

*oynana = oynanabilirlik.evet
acehreli (Moderatör) #7
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4511 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
renk ve değeri ayırmanın bence bir yararı yok.

Neden ? Şekil ve değer zaten şart olacak ama ayrı olması bence daha iyi. Hem daha okunaklı hem de 2 dediğimizde 4 farklı şekil için 2 değerini veren bir işlevi daha kolay yazarız. Değil mi ?

Son söylediğini anlamadım. Eğer destenin oluşturulmasından bahsediyorsan anlarım. Ama deste bir kere oluşturulduktan sonra programda şekil ve değerler değil, oyun kartları dolaşmalı.

Benim söylemek istediğim, oyuncu'nun düşünerek karar vermesi örneğinde görülüyor:

yanıt = oyuncu.oyna();

(Veya oyuncu.kararVer() gibi de olabilir; ama burada önemli değil.)

Yukarıdaki kodda yanıt'ın türü nedir? 2 gibi bir değer yetmez, çünkü sinek 2'nin diğerlerinden farkı var. Yani program içinde 'yanıt' gibi değişkenler artık hep Kart türünde olmalı.

Belki de oyuncu, "elimdeki üçüncü kart" anlamında bir indeks döndürüyordur:

int kart = oyuncu.oyna();

O da olur. Ama yine de elindeki dört kart bir Kart dizisi olduğu için, yine de şekillerle renkler bir aradalar.

Benim anladığım kadarıyla, Kağıt çok genel bir kavram.

Evet. Ama modülün adı kağıt olduğuna bakmayın sadece karttan bahsetmiyoruz. Pişti kartlarından bahsediyoruz.  Yani sadece normal yaşamımızda pişti için kullanılan 52 kartın bilgisayardaki biçimi olacak.

Yani seninle aynı fikirdeyiz. Sen Kart derken "pişti kartı"nı ifade ediyorsun, ben daha da alt düzeyde ve oyundan bağımsız olan "deste kartı"nı. Soyutlamayı farklı noktada yapıyoruz.

Eğer ileride genel bir "oyun masası" kavramı olacaksa, o kadar genel kavramın piştiden haberi olmamalı herhalde. O zaman daha alt düzeyde bir kağıt kavramı kurarız.

Bu arada bence kartlara ayrıca birde kartın kullanılıp kullanılmadığı hakkında da bir değer verilmeli.

Onu akıl yürütme aşamasında kart saymayla ilgili olarak mı düşünüyorsun? Ortak bir bilgi olarak bütün oyuncular "şu kart çıktı mı" diye bakabilsinler diye mi? Olabilir...

Neyse bence siz aklınızdakini kodlarla bir taslak halinde yükleyin sonrada beraber fikir alışverişi yaparız.

Ben yapmak istemiyorum. :) Eğer tartışıyor gibi görünüyorsam da tam doğru değil. Ben yalnızca başka bir fikir olarak ortalığı karıştırıyorum. :)

Ama benim aklımda olan biçim şu şekilde :

Numara Şekli                                                   = Puan         pişti puanı    özel davranışı       oynanabilir mi?
Kart[2]  [sinekli(yada direk ♣ şeklinde gösteririz.)] = [puan.tek] [puan.pişti]  [davranış.normal]  [oynana.evet]

*oynana = oynanabilirlik.evet

Kabul. Sağ tarafta ayrı olarak yazdıkların ya yapı ya da sınıf olarak bir araya getirilmeli.

oynana hileyi engellemek için mi?

Onun dışında, eğer Kart diye bir yapı oluşturursak ve desteyi bir Kart dizisi olarak kurarsak, kartların oynanıp oynanmadığını anlamak da bu açıdan gerekmeyebilir. 'El' kavramını ve yerdeki kağıtlar kavramlarını da Kart[] olarak tanımlarsak, başlangıçta 52 uzunluğunda olan dizinin içinden elemanları alır, yer ve el destelerine ekleyebiliriz.

Ama ben daha fazla yavaşlatmak istemiyorum. Sen eklemeye başla. (Sana çok çok kolay gelen yerlerini sonraya bırakırsan yeni başlayan arkadaşlara da oralarını yaptırırız belki. Of zor işler bunlar... :) Bence sen istediğin gibi yap. Zaten okul bitti... şimdi program yazma zamanı... :) )

Ali
canalpay (Moderatör) #8
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Kendim şöyle bir kod yazdım :
        struct OyunKağıdı
    {
        
        dchar biçim;
        dchar değer;
 
        string toString()
        {
            return format("%s %s",değer,biçim);
        }
    }    
        
    enum kartPuanı
    {
        tek          =1,
        çift         =2,
        üç           =3,
        pişti        =10,
        valeliPişti  =20        }
 
    enum kartDavranışı
    {
        normal,alır  }
 
    enum oynanmış
    {
        evet,hayır }
 
 
    struct desteDeğer
57.satır=>    {
        OyunKağıdı kart;
        kartPuanı puan;
        oynanmış oynanmış_mı;
        kartDavranışı davranış;
        
    }

Ve bu koduda şu biçimde çalıştırmayı bekliyorum:
 
    auto kart =OyunKağıdı('♠','2');
    auto değer=desteDeğer(kart,kartPuanı.tek,oynanmış.evet,kartDavranışı.normal);

Tabikide hata veriyor.
isimsiz.d(57): Error: struct isimsiz.main.desteDeğer inner struct OyunKağıdı cannot be a field

Eğer hata düzeltilebilirse nasıl bir tasarım sizce ?
acehreli (Moderatör) #9
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4511 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bence daha önceki satırlardaki bir hata yüzünden ilgisiz bir hata mesajı çıkıyor olabilir. Çünkü senin gösterdiğinin başına bir import ve aşağıdaki main'i yazınca bende derlendi:

import std.string;
 
// ...
 
void main()
{
    auto kart =OyunKağıdı('♠','2');
    auto değer=desteDeğer(kart,kartPuanı.tek,oynanmış.evet,kartDavranışı.normal);
}

Bence tasarım güzel.

Tek soru, OyunKağıdı'nın desteDeğer'in içinde olmasının mı olmamasının mı daha iyi olduğu. Bence böyle devam etmelisin, bir zararını görürsen tekrar düşünülür.

Ali
canalpay (Moderatör) #10
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bence daha önceki satırlardaki bir hata yüzünden ilgisiz bir hata mesajı çıkıyor olabilir.

Evet.
"auto kart =OyunKağıdı('♠','2');
auto değer=desteDeğer(kart,kartPuanı.tek,oynanmış.evet,kartDavranışı.normal);"

Satırlarını main'e eklememişim.

Tek soru, OyunKağıdı'nın desteDeğer'in içinde olmasının mı olmamasının mı daha iyi olduğu. Bence böyle devam etmelisin, bir zararını görürsen tekrar düşünülür.

Benim daha eklemek istediğim şeyler vardı. Böyle deyince acaba eklemesem mi diye düşünmeye başladım. Ancak benim beynimde tasarladığım pişti oyununun kart modülü ile şuanki gerçekleşmiş pişti oyunun kart modülününde ufak farklar var. Sizin büyük bir olasılıkla beğenmeyeceğiniz :-) bu kodları siz bu mesajı görünceye kadar eklemeyi düşünüyorum.
Sonra olur mu olmaz mı diye tartışırız. Ve levent2z takma adlı arkadaşımız ve projemizi izleyen Mengü Bey'de fikirlerini söyler.(Beni tutun :-p )
acehreli (Moderatör) #11
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4511 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
Sizin büyük bir olasılıkla beğenmeyeceğiniz :-)

Beğenmemek değil... :) Yalnızca anlamaya çalışıyorum ve doğru cevabı ben de bilmiyorum.

Her veriyi birbirinden ayrı tutmak istemiyoruz; yoksa temel türlerin üstünde kavramlar ifade edemeyiz. (Aşağıdakilerde aynı fikirde olduğumuzu biliyorum.)

Örneğin kartın masadaki görünümünü halleden kartGöster diye bir işlev olsa, ona bir Kart göndermek mantıklı olur:

kartGöster(atılanKart);

Yoksa, kartlarla ilgili her işlemde bütün kart üyelerini ayrı ayrı belirtmek zorunda kalırız:

alır_mı(yerdekiDeğer, yerdekiBiçim, atılanDeğer, atılanBiçim);
kartGöster(atılanDeğer, atılanBiçim);

Burada doğru olan Kart diye bir tür tanımlamak ve onu kullanmaktır.

Peki bu "bir araya getirmeyi" ne kadar ileri götürmeliyiz? Oyunda kullanılan bütün bilgiyi tek bir türde de toplamak istemiyoruz:

alır_mı(oyun);
kartGöster(oyun);

O da tabii ki fazla olur çünkü alma ve gösterme işlemleri ile ilgisiz veriler de o işlevlere gitmiş olur. Ben, hangi verinin hangi türde durması gerektiğini sorguluyorum ve gerçekten kendim de emin değilim.

Bazen en iyisi yazmaya başlamak ve kodu ihtiyaçlar belirdikçe değiştirmektir. Onun için sen bizi bekleme. :)

Ve levent2z takma adlı arkadaşımız ve projemizi izleyen Mengü Bey'de fikirlerini söyler.(Beni tutun :-p )

Seni tutmuyoruz. :) Yazmaya, anlatmaya, veya sormaya devam et.

Ali

Not: Bunun için ayrı bir konu açarız ama ben de görsel kısmının nerede ayırt edileceğini düşünüyorum. Konsol, GtkD, vs. ile ilgili olan bölüm yalnızca göstermeyle ilgilenmeli; ama "şu kareye şu karakteri çiz" kadar da alt düzeyde olmamalı. Yoksa oyun mantığının ekran karesi veya ekran pikseli gibi kavramlardan haberinin olması gerekir; onu istemeyiz. Burada da soyutlamanın nasıl olacağı ilginç olacak. Belki başkalarının fikri vardır...
canalpay (Moderatör) #12
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Beğenmemek değil... :) Yalnızca anlamaya çalışıyorum ve doğru cevabı ben de bilmiyorum.

Ben şakasına dedim. Eğer proje katılacak biri varsa görsün hata yapanları asmıyoruz. :-) Eğlenceli bir şekilde tartışıyoruz(bilgi alışverişi yapıyoruz) demek için söyledim.

Not: Bunun için ayrı bir konu açarız ama ben de görsel kısmının nerede ayırt edileceğini düşünüyorum. Konsol, GtkD, vs. ile ilgili olan bölüm yalnızca göstermeyle ilgilenmeli; ama "şu kareye şu karakteri çiz" kadar da alt düzeyde olmamalı. Yoksa oyun mantığının ekran karesi veya ekran pikseli gibi kavramlardan haberinin olması gerekir; onu istemeyiz. Burada da soyutlamanın nasıl olacağı ilginç olacak. Belki başkalarının fikri vardır...

Benim en çok sevdiğim yer orası. Orasını çok güzel bir biçimde halletceğimize inanıyorum.
Daha sonra o konuda açıklarım ki zaten açıklayacak önemli bir şey yok.(Yada benim göremediğim Ali Beyin gördüğü bir şey vardır.)



Evet kartları ben kafama göre eklemeyi sürdürüyorum. Ne de olsa yanlışı öğrenemeden doğruyu göremeyiz.
canalpay (Moderatör) #13
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Benim kafamda tasarım ile ilgili tek bir sorun kaldı. Eğer onuda çözersek bence kart ile ilgili bütün tür işleri benim için bitmiştir.

Evet sorumu soruyorum.

Kodda gördüğünüz gibi OyunKartı diye bir tür var.
Ve bu OyunKartı türünü eşleme tablosunda tanımlanan anahtar sözcük gibi kullanan ve bu anahtarla ilgili bazı değerler alan DesteDeğer türü var.

Biz nasıl OyunKartı türünü gösterip DesteDeğer türünden o türdeki değere karşılık gelen veriyi edineceğiz:

Kodlarla anlatırsam:

eşlemetablosu[OyunKartı]=DesteDeğer(OyunKartı değerini döndürmesede olur.); //Dedik
Daha sonra örneğin görevli modülünde nasıl eşlemetablosu[OyunKartı]; deyip DesteDeğerin verilerini edinebiliriz ?
acehreli (Moderatör) #14
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4511 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Doğru anlıyorsam: eşlemeTablosu, DesteDeğerTanımla() tarafından oluşturuluyor ve bir yerde yaşamaya başlıyor. O noktadan sonra eşlemeTablosu'nun bir sahibi var. Sorun, başka bir modülden (bu durumda 'görevli' mödülünden) o sahibin içindeki eşlemeTablosu'na erişmek...

Öncelikle, o sahibin türü ve ismi ne olmalı? Ona karar verdikten sonra, bir kaç seçenek:

- eşlemeTablosu'nu görevliye kurulurken verebiliriz. O da eşlemeTablosu'na bir referans tutar (dinamik diziler zaten referanstırlar):

class Görevli
{
    const DesteDeğer[] desteDeğer;
 
    this(const DesteDeğer[] desteDeğer)
    {
        this.desteDeğer = desteDeğer;
    }
 
// ...
}

Sonra gerektikçe kendi üyesi gibi doğrudan kullanır.

- görevli, eşlemeTablosu'nu sahibinden isteyebilir: sahip.eşlemeTablosu. Sahibin kim olduğunu da görevli kurulurken ona bir kurucu parametresi olarak verebiliriz:

class Görevli
{
    // (Bunun ismini öylesine 'Sahip' ve 'sahip' yapıyorum)
    const Sahip sahip;
 
    this(const Sahip sahip)
    {
        this.sahip = sahip;
    }
}

- eşlemeTablosu evrensel (global) yapılabilir ama bu en az istenen çözümlerden birisidir

Ali
canalpay (Moderatör) #15
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Tek amacım OyunKartı türünden bir değer ile bu kartın DesteDeğer türündeki tanımlanmış değerlerine erişebilmek.

Yani 10 dediğimde
 "kartPuanı.üç,piştiPuanı.pişti, oynanmış.hayır,kartDavranışı.normal" değerlerine ulaşabilmek. Bu eşleme tablosuyla olur yada başka bir şey ile farketmez.
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:
Sayfa:  1  2  3  4  sonraki 
Forum: Projeler pisti 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-10-20, 23:55:22 (UTC -07:00)