Jump to page: 1 25  
Page
Thread overview
kart.d'yi nasıl gerçekleştireceğiz ?
Jun 30, 2010
Kadir Can
June 13, 2010

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 ?

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

June 13, 2010

Alıntı:

>

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

Alıntı:

>

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

Çok mantıklı.

Alıntı:

>

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 :-)

Alıntı:

>

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

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

June 13, 2010

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 ?

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

June 13, 2010

Alıntı:

>

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

Bende arasıra kağıt desemde kart kullanılıyor.
Alıntı:

>

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 ?

Alıntı:

>

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

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

June 13, 2010

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 ?

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

June 13, 2010

Alıntı (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.

Alıntı:
> 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...

Alıntı:

>

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... :))

Alıntı:

>

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

Alıntı:

>

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

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

June 13, 2010

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

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

June 14, 2010

Alıntı:

>

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.

Alıntı:

>

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 )

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

June 13, 2010

Alıntı (canalpay):

>

Alıntı:

>

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.

Alıntı:

>

Alıntı:

>

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.

Alıntı:

>

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

Alıntı:

>

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. :)

Alıntı:

>

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

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

June 14, 2010

Alıntı:

>

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.

Alıntı:

>

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.

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

« First   ‹ Prev
1 2 3 4 5