Forum: D Programlama Dili RSS
Program fikri: "Kutuyu kapa" oyunu
Sayfa:  1  2  sonraki 
acehreli (Moderatör) #1
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ı
Konu adı: Program fikri: "Kutuyu kapa" oyunu
Bu oyunu yeni öğrendim, Türkçesini bilmiyorum, ve hiç oynamadım. :) İngilizce isimleriden birisi "shut the box".

Kurallar çok basit:

Bütün oyuncuların 1'den 9'a kadar sayıları var. Sayılar açık; herkes görüyor. Amaç bütün sayıları kapatmak. (Oyunun eski asıllarında sayılar galiba tahta parçalarla kapatılıyormuş. Kağıtta üzerlerine çarpı işareti de koyulabilir tabii ki.)

Oyuncu iki zar atıyor. Zarların değerleri toplanıyor. Oyuncu, toplamları zarların toplamına denk gelen sayılar seçiyor ve onları kapatıyor. Örneğin 2 ve 3 gelmişse, toplamları 5 olduğu için toplamları 5 olan sayılar kapatıyor: 1 ve 4 olabilir, veya 2 ve 3 olabilir, veya yalnızca 5 olabilir. Oyuncu isterse tek zarın değerini de kullanabiliyor. (Zarların toplamı 6 ve daha yüksekse ve 6 ve daha yüksek sayılar zaten kapanmışlarsa zaten başka yolu yok.)

Atılan zara karşılık sayı kapatamayan oyuncunun oyunu sona eriyor. Doğru anladıysam, hep aynı oyuncu zar atıyor ve ancak onun işi bitince diğer oyuncuya geçiliyor. Her oyuncu kapattığı sayı adedi kadar puan alıyor. (Oyunun başka puanlama çeşitleri de varmış.)

Bilgiler şurada:

  http://en.wikipedia.org/wiki/Shut_the_Box

Program fikri olarak kolaya benziyor.

Ali
yavuzgunay #2
Üye Ock 2012 tarihinden beri · 1 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
değişik bir oyunmuş.

madem oyun yapımından açıldı konu, d dilinde directx kullanma imkanı var mı ? çok fazla okumadım d nin yapabildiklerini ama sanırım c++ başlık dosyalarını okuyabiliyormuş, yani directx çok rahat entegre edilebilir ?
acehreli (Moderatör) #3
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ı
Hoşgeldin yavuzgunay! :)

D ile directx hiç duymadım. Şimdilik durum şu:

- D programları C kütüphanelerini ile aynen bağlanabiliyor. Ancak, C başlıklarını ekleme olmadığı için o başlıkların D ilintilerinin (D binding) yazılmış olmaları gerekiyor. İlinti yazmak kolay: otomatize edilebiliyor ama sonradan bir insanın mutlaka üzerlerinden geçmesi gerekiyor; çünkü örneğin C ile D dizileri aynı değiller. Parametre olarak dizi alan C işlevlerine D dizileri oldukları gibi gönderilemiyorlar. Pek bir zorluk yok.

- Yukarıda anlatılan C++ başlıkları için de geçerli ama bir kısıtlama var: D çoklu kalıtımı desteklemediği için ve D'nin şablonları C++'ınkilerden çok daha güçlü olduğu için çoklu kalıtım ve şablon kullanan C++ işlevleri ve sınıfları için D ilintisi yazılamıyor. Bu durumun düzeltilmesi konusunda baskılar var; belki bu kısıntı da giderilir.

Oyun programcılığı için SDL var. Görsel olarak da GtkD ve QtD. Yarım ;) kitaplarımız şurada:

  http://ddili.org/ders/index.html

Ali
Avatar
Salih Dinçer #4
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hoş geldiniz, Yavuz Bey...

SDL henüz bugün ilgimi çekmeyi başardı hatta az önce apt-get komutunu verdim bile...:)

Directx ise sanırım Windows platformu için olsa gerek. Scene camiasında çok güzel şeyler yaptıklarını gördüm. En son şu 4 KB.'lık müziği ve kurduğu sanal 3B gezegen atmosferi ile büyüleyici iş başarmışlar:

[Resim: http://ddili.org/forum/unb_lib/designs/modern/img/arrow_right.png]http://scene.org/file.php?file=/parties/2009/breakpoint09/…

Bir öneri (soru) ben dillendirmek isterim. Bu belki bir oyun değil ama zihni çalıştıran ve ortaya çıkan sonuç ile şaşırtan güzel bir beyin oyunu sayılabilir. Aslında çözmek için kod yazmak veya çizelge oluşturmak gerekiyor. Çünkü sonuç gerçekten büyük (neredeyse googol sabiti kadar!) bir sayı. Soruyu türeten Ali Ağabey'in adaşı Ali Eskici:

Ali Eskici:
40 adet kutunun her birinin içinde 39 kutu,
Bu 39 kutunun her birinin içinde 38 kutu,
Bu 38 kutunun her birinin içinde 37 kutu,
...
Bu 3 kutunun her birinin içinde 2 kutu,
Bu 2 kutunun her birinin içinde 1 kutu bulunmaktadır.

Buna göre toplam kutu sayısı nedir?

Not: Dikkatli düşünün, cevap sandığınızdan çok farklı olabilir.

Kaynak: http://aliesoft.com/blog/?cat=3

Çözümü yanlış bulunmuş çünkü geçenlerde bunu Zeka Oyunları, Facebook grubunda tartışmıştık. Yani sitede an itibariyle yazdığı gibi sonuç "2.217.887.688.014.780*10^33" değil. Ama doğru cevabın x E+94 basamaklı olduğunu, 41. kutuda ise kendisi dahil toplam 6,22199762820005E+97 kutu içerdiğini söyleyebilirim!

Denklemi ise çok basit ama bir süre zihininiz ve belki parmaklarını çalıştırmanız için değerlerin ne olduğunu yazmayacağım...:)

xK = ((K * K1) + 1) * K2

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #5
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ı
Salih Dinçer:
Bir öneri (soru) ben dillendirmek isterim.

Bunun için başka konu açtım:

  http://ddili.org/forum/thread/713

Ali
acehreli (Moderatör) #6
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ı
Son zamanlardaki MVC sohbetlerinden esinlenerek bu oyunu da kodladım:

  http://code.google.com/p/kutuyu-kapat/

Eksiklikleri var ama şimdilik ilgilenmeyeceğim. :)

Ali
Avatar
Salih Dinçer #7
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ama hocam olmaz ki!

Bunu SDL ile yapman gerek; gel seni SDL'ci yapalım...:)

Şimdi onu da sen yaparsın deme çünkü Erdem'i de kaybettik. Zannedersem Allegro saflarına geçti. Ama yakında bomba gibi şeylerle onu Allegro'dan kurtaracağım inşaallah.

Yükleme Notları:
svn checkout http://kutuyu-kapat.googlecode.com/svn/trunk/ kutuyu-kapat
cd kutuyu-kapat
make
./kutuyu-kapat

Dip Not: zar_secicisi.d dosyasına "import std.string;" satırını eklemelisiniz...

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Bu mesaj Salih Dinçer tarafından değiştirildi; zaman: 2012-08-23, 03:36.
Avatar
Salih Dinçer #8
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Başlangıç olsun diye...:)
import sdl, std.stdio, std.random;
 
  enum GENİŞLİK  = 600;
  enum YÜKSEKLİK = 200;
 
void main(){  
// var olmayan zar yüzeyi: 7
  int[][] zarlar = [ [    00, 32, 0, 1, 25, 0x303030 ], // gövde
                     [  -20, -20, 8, 0, 12, 0xCC0000 ], // sol üst
                     [   2020, 8, 0, 12, 0xCC0000 ], // sağ alt                   
                     [  -2020, 8, 0, 12, 0xCC0000 ], // sol alt
                     [   20, -20, 8, 0, 12, 0xCC0000 ], // sağ üst                   
                     [  -20,   0, 8, 0, 12, 0xCC0000 ], // orta sol
                     [   20,   0, 8, 0, 12, 0xCC0000 ], // orta sağ
                     [    0,   0, 8, 0, 12, 0xCC0000 ]  // orta
                   ];
// hepsinin dilim olduğunu (int[][]) ümit ediyorum...:)
   auto ortaNokta = zarlar[$-1][];
   auto bir = zarlar[0..1][] ~ ortaNokta;
   auto iki = zarlar[0..3][];
   auto üç = iki ~ ortaNokta;
   auto dört = zarlar[0..5][];
   auto beş = dört ~ ortaNokta;
   auto altı = zarlar[0..7][];
// foreach() için işaretçi dizisi...
   int[][]*[6] zar = [ &bir, &iki, &üç, &dört, &beş, &altı ];/*
   zar[0] = &bir; zar[1] = &iki; zar[2] = &üç;
   zar[3] = &dört; zar[4] = &beş; zar[5] = &altı; //*/
 
  bool DEVAM = true;
  auto PENCERE = "Kutuyu Kapa v1".ptr;
 
  SDL_Event event;
  SDL_Surface* ekran = SDL_SetVideoMode(GENİŞLİK, YÜKSEKLİK, 0, SDL_HWSURFACE);
  SDL_WM_SetCaption(PENCERE, PENCERE);
 
  int sırası;
  auto rnd = Random(unpredictableSeed);
  SDL_Surface*[zar.length] zarYüzeyleri;
  
  foreach(işaretçi; randomCover(zar, rnd)) {
     zarYüzeyleri[sırası] = şekilÜret(100, 100, *işaretçi);
     sırası++;
  }
  SDL_Rect konumu;
           konumu.y = 50;
      
  while (DEVAM) {
    foreach(konum, yüzey; zarYüzeyleri) {
      konumu.x = cast(short)(konum * 100);
      SDL_BlitSurface(yüzey, null, ekran, &konumu);
    }
    SDL_Flip(ekran);
    while (SDL_PollEvent(&event)) {
      if(event.type == SDL_KEYUP) {                    
        if(event.key.keysym.sym == SDLK_ESCAPE) DEVAM = false// ESC tuşu
      } else if(event.type == SDL_QUIT) DEVAM = false// ALT-F4 tuşu
    }
  }
  SDL_Quit();
}
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #9
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ı
Yanıtlanan mesaj #7
Salih Dinçer:
zar_secicisi.d dosyasına "import std.string;" satırını eklemelisiniz

Teşekkürler; ekledim. Sende derleme hatası mı verdi, yoksa olması gerektiğini kendin mi farkettin? Bende hatasız derleniyor çünkü. (?)

Ali
acehreli (Moderatör) #10
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ı
Gösterici arayüzüne zarAtıldı() işlevini ekledim. O SDL kodlarını SDLGösterici sınıfına taşımak gerekecek.

Ali
Avatar
Salih Dinçer #11
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #9
acehreli:
Sende derleme hatası mı verdi, yoksa olması gerektiğini kendin mi farkettin? Bende hatasız derleniyor çünkü. (?)
Evet, bende derleme hatası verdi: DMD 2.059
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #12
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ı
dmd 2.060 ile hata vermiyor. Demek ki Phobos modüllerinden birisi std.string'i public olarak import etmeye başlamış ve ben farkında olmadan onun import'undan yararlanmışım.

import'ların private/public konularında sorunlar mı vardı? Belki onunla da ilgilidir. Neyse; düzelmiş olmalı. :)

Ali
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ı
import'ların private/public konularında sorunlar mı vardı? Belki onunla da ilgilidir. Neyse; düzelmiş olmalı.

Şuralarda bahsi geçti. 2.060'ta var mı hala bilmiyorum.

http://ddili.org/forum/thread/199
ve
http://ddili.org/forum/post/6500
Avatar
Salih Dinçer #14
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ali'ye böyle bir oyunu BT sektörüne kazandırdığı için teşekkür etmeliyiz. Ailecek oynuyoruz, bakalım ne zaman sıkılacağız...:)

Bu arada oyunda sanki iki hata var...

1'si, iki zar da aynı olursa tek tek seçilemiyor. Bu belki de hata değildir çünkü iki taş da aynı kutuyu gösteriyor...:)
1 2 3 4 5 6 7 8 9
Zarlar: [4][6], Toplam: 10, Seçiminiz? 4 6

1 2 3 _ 5 _ 7 8 9
Zarlar: [3][3], Toplam: 6, Seçiminiz? 3 3
Toplam 3 yasal değil. Seçiminiz? 3

2'si ise, son numarada kilitlenme! Sanki hiç bir zaman veya çok düşük olasılıkla 9 puan alınabilir, ne dersiniz?
1 2 3 4 5 6 7 8 9
Zarlar: [1][4], Toplam: 5, Seçiminiz? 5

1 2 3 4 _ 6 7 8 9
Zarlar: [3][6], Toplam: 9, Seçiminiz? 9

1 2 3 4 _ 6 7 8 _
Zarlar: [3][5], Toplam: 8, Seçiminiz? 8

1 2 3 4 _ 6 7 _ _
Zarlar: [3][4], Toplam: 7, Seçiminiz? 7

1 2 3 4 _ 6 _ _ _
Zarlar: [6][3], Toplam: 9, Seçiminiz? 3 6

1 2 _ 4 _ _ _ _ _
Zarlar: [5][6], Toplam: 11, Seçiminiz? 11
11 geçerli bir numara değil.
Zarlar: [4][1], Toplam: 5, Seçiminiz? 1 4

_ 2 _ _ _ _ _ _ _
Zarlar: [5][2], Toplam: 7, Seçiminiz? 2
Toplam 2 yasal değil. Seçiminiz? 2 5
5 zaten kapalı.
Puan: 8

Belki de ilk belirsizlik için aynı iki zar gelmesi engellenebilir. Bu şekilde oyun daha zevkli olabilir, bilemiyorum. Ama başlangıçta 6'yı kapamışsak ve ikincisinde 3 3 gelirse oyunu çok erken zamanda kaybetmiş oluyoruz...:)

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Bu mesaj Salih Dinçer tarafından değiştirildi; zaman: 2012-08-23, 15:50.
erdem (Moderatör) #15
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bunu derlerken bende de şöyle bir hata  verdi:
kutu.d(41): Error: template std.random.randomCover does not match any function template declaration

/usr/include/dmd/phobos/std/random.d(1502): Error: template std.random.randomCover(Range,Random) if (isRandomAccessRange!(Range) && isUniformRNG!(Random)) cannot deduce template function from argument types !()(int[][]*[6u],MersenneTwisterEngine!(uint,32,624,397,31,-1727483681u,11,7,-1658038656u,15,-272236544u,18))
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  sonraki 
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, 06:55:20 (UTC -08:00)