Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Allegro ile 2D oyun programlama

Başlatan Erdem , 14 Ağustos 2012, 03:15:29

Erdem

Allegro ile 2D oyun programlama örnekleri oluşturdum. Şimdilik sadece C ile yazıldı. İleride D ile nasıl kullanılacağını anlatan dersler hazırlayabilirim. Hazırlamayabilirim de  :D

Şimdilik sadece zevk için kodluyorum  ;)

https://github.com/erdemoncel/allegro

Örnekleri çalıştırabilmek için ilkönce Allegro kütüphanesini kurmanız

$ sudo apt-get install liballegro4.2-dev

Ve basitçe make demeniz yeterli  :D

Erdem

Aynı şeyi DAllegro ve Allegro5 kullanarak yaptım ekrana şöyle bir şey çıktı   :D

https://gist.github.com/3383856


Firzen

Ustam bu gitHub ve Cloud9 IDE hakkında biraz bilgi verebilir misin? Elimdeki beaglebone'u bunun üzerinden programlayan var da :S
Kararsız...

Erdem

Ben bu Cloud9 IDE'yi ilk defa duyuyorum. Ama şöyle bir bakınca sitesini buldum:

https://c9.io/

Ayrıca açık kaynak kodlu bir Javascript geliştirme platformuymuş. Ve kaynak kodu github üzerinde bulunuyor:

https://github.com/ajaxorg/cloud9

Beaglebone senin de bahsettiğin gibi Javascript ile programlanabiliyor. Hatta Ubuntu'da daha rahat edeceğini düşünüyorum. Daha önce Beaglebone başlangıç konulu mesajlara bakabilirsin.

Github çok popüler bir yazılım geliştirme platformu. O kadar harika bir şey ki sürüm takip sistemi sayesinde yazdığınız bir kodun bir sene önceki halini görebiliyorsunuz. Hatta Microsoft, Facebook gibi devasa yazılım firmaları bile yazılımlarının bir kısmını açık kaynak kodlu olarak Github üzerinde paylaşıyorlar.

Ya da Linux çekirdeğinin kaynak kodlarını mı merak ettiniz işte Torvalds karşınızda  :D

https://github.com/torvalds

Ya da Andrei Alexandrescu'nun Facebook için yazdığı ve C++'nin standart kütüphanesinde bulunan std::string'den daha hızlı çalışan fbstring'in kaynak kodlarını mı incelemek istiyorsunuz.

https://github.com/andralex

Kısacası elektronik ve bilgisayar bilimleri okuyan arkadaşlar ilk elden github kullanımını öğrenmeliler. Hoş kullanımı da basit ama..

Örneğin ilk verdiğim bağlantıdaki allegro uygulamalarının kaynak kodunu bilgisayarınıza indirmek için:

git clone https://github.com/erdemoncel/allegro.git

demek yeterli. Daha sonra linux üzerinde Allegro kütüphanesini kurduktan sonra make demek yeterli.

Dosya yüklemek de oldukça basit:

git add test.d
git commit -m "D için test kodu"


İlkönce hangi dosyayı ekleyeceğimizi belirtiyoruz. Sonra ufak bir açıklama ekliyoruz. Dosyaları sunucuya göndermek için de:

git push -u origin master

demek yeterli. Eğer sunucudaki dosyalar üzerinde başka bir kullanıcı değişiklik yaptıysa ilkönce yerel depoyu eşitlemek için:

git pull

demek yeterli oluyor.

Firzen

Çok teşekkür ederim açıklama için en kısa zamanda öğrenmeye çalışacağım çünkü bu beagle bone çok hoşuma gidiyor ve programlamak istiyorum :)
Kararsız...

Erdem

#5
Allegro örnekleri artık platformdan bağımsız olarak artık Windows altında da çalışıyor. Windows XP altında denedim.

Tek yapmanız gereken MinGW kurulum programını buradan indirmek. Kurulum programında C Compiler ve MSYS Basic System seçenekleriyle MinGW'yi kurun. Bilgisayarım'a sağ tıklayarak Özellikler Gelişmiş Ortam Değişkenleri seçerek Path değişkenini seçin Düzenle'yi tıklayın ve alttaki kutucuğa MinGW'nin çalıştırılabilir dosyalarının olduğu dizini örneğin ;C:\MinGW\bin şeklinde ekleyin.

Oturumu kapatıp açın. Allegro uygulamalarını indirdikten sonra sıkıştırılmış dosyayı açın. Derlemek için ana dizinde mingw32-make demeniz yeterli. Eğer her şey yolunda gittiyse programın çalıştırılabilir dosyaları uygulama dizininde oluşacak.


DumrulBey

Eline sağlık Erdem, bir de ben bunu SDL ile yapsam diyorum...:)

Salih
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

Erdem

Yapacağını biliyorum Salihcim  :)

Burada en zorlayıcı nokta merminin çarpışma algoritması olabilir. Aslında tamam çok zor değil ama diğerlerine nispeten. Ama burada piksel bazında çarpışma algoritması kullanılıyor ve bildiğimiz nispeten zor olan çarpışma algılama tekniklerini kullanmaya gerek kalmıyor.

Şimdi öyle bir şey ki mermi aslında bir piksel boş bir alanın etrafına çizilen bir dörtgen. Boş olduğu için ortasının rengi her zaman arkaplan rengi ile aynı renkte yani siyah. Allegro'nun tek bir pikselin rengini verebilen bir işlevi var. Dolayısıyla mermi farklı renkteki bir cismin üzerinden geçmediği sürece o pikselin rengi her zaman siyah oluyor. Bunu ben bu gün öğrendim vay be dedim.

Bir de bunu bügün gördüm:

http://inventwithpython.com/

Ali bey ana konu CS olduğu için diller yalnızca gerektikleri kadar kullanılacaklar demişti. Ama bu dönem hem MIT'den CS ve Stanford'dan Yapay Zeka dersleri alacağım için baktım her ikisi de Python kullanıyor. C++ ve D'nin yanında Python da öğrenecek gibiyim  :)

Eğer vakit kalırsa o kitapları da alıp okuyabillirim.

DumrulBey

Güzel kitap ve yöntemler, teşekkürler...

Ancak getPixel() işlevi sadece bir bilgi ve zemin rengi değişebilir. Şimdi şunları diyebilirsin:

Renkleri öyle bir seçerim ki zemin resmi içinde bulunmayan bir rengi düşman 1'in çevresinde, başka bir rengi de düşman 2'nin çevresine uygularım. Böylece hangi renk gelirse o nesneyi (düşmanı) kaybeder ve puanı da arttırırım...:)

Bence bize pixelTest'den çok hitTest olayı lazım ve bunun için de yukarıdaki yöntem dahil bir çok bilgiyi kullanabilmeliyiz. Çünkü ileride öyle şeyler lazım olacak ki yetmeyecek! Sanırım hitTest() işlevi bize üç bilgi verebilmesi gerekiyordu:

  • xNesne, üstüne geçti mi?
  • xNesne, üstünde mi?
  • xNesne, üstünden çıktı mı?
Belki de bunlar bile yetmeyebilir. Yani xNesne (düşman) neresinden vuruldu: Başından 10 puan, ayağından 2 puan, gövdesinden 5 puan gibi...

Salih
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

Erdem

#9
Alıntı yapılan: DumrulBey - 28 Ağustos 2012, 14:30:28
Renkleri öyle bir seçerim ki zemin resmi içinde bulunmayan bir rengi düşman 1'in çevresinde, başka bir rengi de düşman 2'nin çevresine uygularım. Böylece hangi renk gelirse o nesneyi (düşmanı) kaybeder ve puanı da arttırırım... :)

Bence gayet mantıklı :)

Aslında şu an okuduğum Allegro kullanarak C ile oyun programlamayı anlatan kitap biraz baymaya başladı. Sebebi hem orta ile iyi arası bir kitap olması, hem de D, C++, Python varken C ile uğraşmak biraz hamallık gibi geliyor. Bir de şöyle bir şey buldum:

http://thepythongamebook.com

Acaba bu kitabı yarım bırakıp diğer kitaplara başlasam mı diye düşünüyorum. Sonuçta asıl amacım örnekleri D ve Allegro ile yapmak.

Gamedev.net'de bu konuda harika bir makale vardı:

http://www.gamedev.net/page/resources/_/technical/game-programming/how-do-i-make-games-a-path-to-game-development-r892

Artık ileride beraber D ile bir küçük oyunlar dükkanı açarız. Tetris, pacman, super mario, sonic .. Allah ne verdiyse  :D