Jump to page: 1 2
Thread overview
XNA ve Pacman Çalışmalarım
Sep 11, 2009
erdem
Sep 11, 2009
esatarslan52
Sep 11, 2009
erdem
Sep 12, 2009
esatarslan52
Sep 12, 2009
erdem
Sep 12, 2009
esatarslan52
Sep 12, 2009
erdem
Sep 17, 2009
erdem
Sep 18, 2009
erdem
Sep 18, 2009
erdem
Sep 19, 2009
erdem
Sep 19, 2009
erdem
September 11, 2009

Daha önce c++ ile konsolda çakma bir packman denemem olmuştu(yarım bırakmıştım :-/ ). Onda kullandığım yapay zeka aşağıdaki şekilde idi. "if (sayac % 20000 == 0)" hızını ayarlamak için. Yeni öğrendiğim daha güzel bir çözümse "if (rand() % 4 == 0)" gibi olanı. Bu sayede level atladıkça mod değeri 1 azaltılarak dusman git gide daha de zeki hale getirilebilir. Bunu en yakın zamanda D ile yazmaya başlayacağım diziler ve gotoxy() ile uğraşmamın sebebi bunun için. kbhit() için çözüm bulabilmiş değilim.

void Dusman::ilerle(Kahraman *pKahraman)
{
   int dusmanX = getX();
   int dusmanY = getY();
   sayac++;

   if (sayac % 20000 == 0)
   {
       sil();
       if (pKahraman->getX()>dusmanX)
           dusmanX++;
       else if(pKahraman->getX()<dusmanX)
           dusmanX--;

       if (pKahraman->getY()>dusmanY)
           dusmanY++;
       else if (pKahraman->getY()<dusmanY)
           dusmanY--;

       sayac = 0;
   }

   setXY(dusmanX,dusmanY);
   ciz();
}

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

September 11, 2009

Daha önce bu forumda bir yerlerde bahsettiğim gibi Pacman projemi Microsoft'un XNA (http://creators.xna.com/en-US/) oyun geliştirme kütüphanesi üzerine taşıdım.

Bundaki amacım burda edindiğim oyun geliştirme mantığını daha sonra açık kaynak kütüphanelere SDL ya da Clanlib gibi taşımak. İşte bir kaç ekran görüntüsü:

http://img44.imageshack.us/img44/46/pac1.jpg

Burda yaptıklarım:

  • Pacman'in klavyeden kontrolü ve hareketli oyun nesnesi (animated sprite) haline getirmek.
    Resimden belki belli olmuyor ama klavyede sağa, sola,aşağı yukarı bastığınızda pacman hareketli bir oyun nesnesi haline geliyor. Yukarı aşağı giden pacman resmi oluşuyor.
    -Basit bir harita sistemi.
    Burada görülen duvarlar, bonuslar ve noktalar bir harita dosyasında saklanıyor. Ve oyun içinde bu harita dosyasından yükleniyor.
  • Çarpışma algılaması
    Bu kısmı yaparken dikdörtgen cisimler için kullanılan çarpışma algılamasını (rectangle collision) kullandım.

http://img22.imageshack.us/img22/3842/pac2x.jpg

Yapmayı planladıklarım:

  • Oyun içi sesler
  • Pacman'in düşmanları (hayaletler)
  • Yapay zeka
    Aslında oyunun orjinal versiyonunda bulunan 4 hayaletin farklı renk, isim ve karakterleri varmış. Pembe olan Speedy, takma ismi "Pinky" ve hızlı. Kırmızı hayaletin ismi Shadow takma ismi "Blinky" her zaman arkanızda ve başınızdan atmak zor. Açık mavi hayalet Bashful takma ismi "Inky" çok ürkek ve sizi görünce kaçmak isteyecek. Portakal rengi hayalet Pokey takma ismi "Clyde", sizi yakalamak için elinden geleni yapacak ama yavaş.
    Böyle bir yapay zeka sistemini yapmak zor olacağı için olmazsa sürekli sağa git gibi bir mantıkla çalışan bir yöntem de kullanabilirim.

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

September 11, 2009

Buradan çok fazla bir şey anlamam mümkün değil ama kaynak kodlarını gönderirsen deneyebilirim.. Burada hayaletler o boş olan 4'lü kısımdan çıkacak. Daha sonra oradan rastgele bir yöne ilerleyerek Pacman'i kovalayacaklar. Şimdilik C#'a yabancı olduğum için bir sınıfın bir yapıya erişimi nasıl olur onu anlamaya çalışıyorum. Bunun için de şimdilik static koydum yeterli oldu. Bir de ikinci resimde pacman olduğu noktadan alt, üst, sağ, sol kontrol edecek. Eğer duvarsa hareket etmeyecek değilse hareket edecek. Şimdilik en zor kısım burası gibi.. Haritayı da bir string listede

List<string> harita

olarak tutuyorum. Kullandığım harita da şu şekilde:

111111111111111
133333111333331
131313313313131
121311313113121
131331313133131
131133333331131
133331101133331
131131000131131
131331111133131
1333111x1113331
131313333313131
121333131333121
131101131131131
133333333333331
111111111111111

Burada 1'ler duvarları 0'lar boş alanları 2'ler bonusları 3'ler de pilleri gösteriyor. Ben pacman'i çizen işlevle diğer tüm hareketsiz cisimleri çizen işlevi birbirinden ayırdım. Yoksa yukarıdaki gibi (aslında burada bir x yok) pacman için de haritada bir değer mi gösterseydim emin değilim. Şimdilik List'den yatay :

1333111x1113331

ve dikey

111113001x33331

satırlarını alıp bunları da geçici bir string değişkene atıp bahsettiğim sağ, sol, üst, alt yönlere hareket edebiliyormu kontrolünü yapmayı düşünüyorum.

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

September 12, 2009

Kaynak kodu buraya (http://rapidshare.com/files/279043361/Oyun.7z.html) koydum. Kahramanımız için duvar kontrolü var, düşman için duvar kontrolünü yazmaya çalışırken bırakmışım.
Kahramanımız w-a-s-d tuşları ile hareket eder.

Alıntı:

>

Yeni öğrendiğim daha güzel bir çözümse "if (rand() % 4 == 0)" gibi olanı.

Bunu şurdan (http://kaan.basesistem.com/?p=633) öğrenmiştim. Sende bir bak istersen.

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

September 11, 2009

Oh oh... Ne güzel şeyler yapıyorsunuz. :)

Ben de kenardan dinleyerek, oyun programcılığından bir şeyler kapmaya başladım. ;)

Ali

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

September 12, 2009

Alıntı (erdem):

>

Yalnız senin hangi kütüphaneyi kullandığını anlayamadım. gotoxy ve setxy falan var. Bunları kullanabilmek için hangi kütüphaneyi kullanmam gerekiyor?

Harici bir kütüphane kullanmadım. gotoxy ve setxy benim oluşturduğum temel.h ve temel.cpp dosyalarında. Yalnız kodu windows'da yazmıştım. O yüzden gotoxy() winapi leri kullanarak oluşturulmuştur. Başka işetim sistemlerinde hata verir.

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

September 12, 2009

Aslında bende daha güzel bir kitap var da. Okuması uzun ve konular oldukça ağır ve 100 binlerce satır koddan oluştuğu için henüz bitirmedim. Programming Game AI By Example (http://www.ai-junkie.com/books/toc_pgaibe.html)

Gene de oradaki AI tekniklerine bakarım.

Yalnız senin hangi kütüphaneyi kullandığını anlayamadım. gotoxy ve setxy falan var. Bunları kullanabilmek için hangi kütüphaneyi kullanmam gerekiyor?

@acehreli: Bu arada Ali bey sizin de deneyiminizden yararlanalım :) Diyelim ki üstteki gibi bir haritayı tutmak için en uygun veri yapısı hangisi olabilir. Ben list kullandım ama. Bu arada C#'da map veri yapısı yok diye biliyorum.

Bir de şöyle bir örnekte

131331111133131
1333111x1113331
131313333313131

verileri şu şekilde karşılaştırabileceğimiz bir yapı olabilir mi? Olursa nasıl olur?

Örneğin harita [7][9] == '1' gibi..

Benim kafam biraz bulanık olduğu için böyle bir erişim yöntemi şimdilik aklıma gelmedi. Ama böyle olsa çok kolaylık olacak.

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

September 12, 2009

Tamam ikinize de çok teşekkürler! :) Şimdilik kafam biraz dağınık olduğu için en kısa zamanda verdiğiniz örnekleri inceleyeceğim.

Bu arada C++'nin gözünü sevem :) D yöntemi de gayet açık gözüküyor.

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

September 12, 2009

O iki boyutlu bir dizi değil mi? C++'da olsa:


enum HaritaKaresi { bos, duvar, bonus, pil };
typedef vector<HaritaKaresi> Satir;
typedef vector<Satir> Harita;
// ...
Harita harita = /* ... */
harita[satir][sutun] = duvar;

D'de:

import std.stdio;

enum HaritaKaresi { boş, duvar, bonus, pil }

void main()
{
   HaritaKaresi[5] ilkSatır = HaritaKaresi.duvar;
   HaritaKaresi[5][5] harita;
   harita[] = ilkSatır;

   harita[2][2] = HaritaKaresi.pil;

   foreach(satır; harita) {
       foreach(kare; satır) {
           write(kare);
       }
       writeln();
   }
}

C#'ta sıralı olması gerekmeyen topluluklar için HashTable varmış; C++'daki map'in eşdeğeri olan da NameValueCollection'mış. Ve tabii ki hiç kullanmadım... :)

Ali

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

September 17, 2009

Pacman'den çarpışma algılaması sistemi yapıldıktan sonra yeni bir ekran görüntüsü. Burada dikdörtgensel (rectangular) çarpışma algılaması kullandım.

http://img30.imageshack.us/img30/1323/pacmancarpisma.jpg

Burada kırmızı kısımlar pacman'in geçemeyeceği dikdörtgensel yapılar.

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

« First   ‹ Prev
1 2