Sunday, February 19, 2012

Unity'de Oyun Programlama - [Ders - 1]

Herkese merhaba, yaklaşık bir ay önce Unity ile ilgilenmeye başladım. Bilmeyenler için Unity hakkında ufak bir açıklama yapayım. Unity, 3D oyun motorudur. Daha detaylı bilgi için resmi sayfasına bakabilirsiniz. Bu yıl üniversitede bu oyun motorunu öğrenip, kullanacağımız bir ders açıldı. "SE 350" kodlu bu dersin adı "Oyun Programlama". Derse çok yoğun ilgi oldu. Yaptığım gözlemlere göre, teoriden ziyade, uygulama yapılabilecek dersler öğrenciler tarafında daha fazla ilgi topluyor, diyebilirim. Daha fazla uzatmadan, asıl konuya değinmek istiyorum. Dersten sonra hepimize ufak bir proje verildi. Proje kısaca şöyleydi; Unity'de kontrol edebileceğimiz bir karakter oluşturup, bu karakter ile etrafımızda var olan bir takım objeleri toplamak. Unity hakkında hiçbir fikri olmayanlar için zor bir proje olarak gözükebilir. Fakat tek satır kod dahi yazmadan, istediklerimizi kolayca yapabiliriz. Şimdi hep birlikte bu projeyi yapmaya başlayalım. Öncelikle Unity'i açıp, menüden File > New Project seçeneğini seçip, yeni bir proje oluşturuyoruz.

Thursday, February 16, 2012

Visual Studio 2010 İçine OpenGL Kurulumu

Herkese merhaba, bugün sizlere, bu dönem ilk dersine girdiğim "SE 313" kodlu, "Bilgisayar Grafiği ve Görsel Programlama" adlı ders için gerekli olan OpenGL kurulumunun Visual Studio 2010 içine nasıl yapılacağını anlatacağım. Öncelikle ihtiyacımız olan glut-3.7.6-bin dosyasını buradan indiriyoruz. Daha sonra Visual Studio 2010’nun kurulu olduğu dizine gidiyoruz. VC klasörü içinde ki,  include klasörü içine GL diye klasör oluşturuyoruz. İndirdiğimiz dosya içinde ki glut.h dosyasını GL içine  atıyoruz. Daha sonra ise yine VC içinde ki lib klasörüne glut32.lib dosyasını atıyoruz.  Sıra geldi .dll dosyasına. glut32.dll dosyasını ise Windows/system32 klasörü içerisine atıyoruz. Şimdi sıra geldi test projesi oluşturmaya. Visual Studio 2010'u açtıktan sonra ilk önce, menülerden File > New > Project'i seçerek, proje penceresini açıyoruz, ardından bu pencereden Empty Project seçeneğini seçip projemize bir isim veriyoruz.

Sunday, February 12, 2012

Haftanın Tavsiyeleri - 5

Haftanın Filmi - War Horse / Steven Spielberg


Haftanın Kitabı - The Hunchback of Notre-Dame / Victor Hugo


Haftanın Müziği - All Of This Could Have Been Yours / Shooter Jennings & Hierophant

Saturday, February 11, 2012

GGJ - İzmir 2012

Herkese merhaba, bu yazımda, bu yıl ilk defa katıldığım GGJ'den bahsetmek istiyorum. Öncelikle GGJ nedir, bilmeyen arkadaşlarımız için ufak bir bilgilendirme yapayım. GGJ(Global Game Jam) türünün tek örneği ve tüm dünyada aynı 48 saat içinde gerçekleştirilen bir oyun geliştirme etkinliğidir. Türkiye'de her yıl Ankara ODTÜ'de yapılmaktayken, bu yıl İstanbul, Ankara, İzmir ve Elazığ olmak üzere 4 ilde birden gerçekleştirildi. Bunun biraz öncesine gidersek, bu dönem başında arkadaşlarla GGJ Ankara'ya katılma gibi bir planımız vardı. Fakat GGJ'nin bu yıl İzmir'de de düzenlenmesi, işleri biraz değiştirdi. İlk başta İzmir'deki GGJ'nin ilk defa yapılacağını göz önüne alarak Ankara'da olandan daha iyi bir şey çıkmayacağını düşünüyordum ve Ankara'ya gitmekte diretiyordum. Ancak gerek diğer arkadaşların tutumu gerek GGJ İzmir ekibinin hevesli ve özverili çalışması düşüncemin değişmesinde önemli rol oynadı. Netice olarak GGJ İzmir'e katılma kararı aldım ve başvurumu yaptım. Açıkcası bu benim ilk GGJ serüvenim olmasına rağmen başvurumun reddedileceğini hiç düşünmedim. Başvurum onaylandıktan sonra GGJ gününü beklemeye başladım. Yazımın devamını GGJ izlenimleriyle devam ettirmek istiyorum. GGJ İzmir'de birçok tanıdık yüzün yanı sıra yeni insanlarla tanıştım.

Saturday, February 4, 2012

Izmir Mass Transit Guide - [Proje]

Herkese merhaba! Bugün Android işletim sistemi üzerinde çalışan cep telefonları için, üniversite 3. sınıfta "SE 310" kodlu, "İleri C++: Şablonlar ve Soysal Programlama" dersinde Javascript, XHTML, Google Map API(V3) ve Qt kütüphanesini kullanarak yazdığım daha çok tasarım odaklı olan "Izmir Mass Transit Guide" projesini anlatacağım. Proje kısaca İzmir belediye sınırları içerisinde seçilen iki nokta arasında, başlangıç noktasından varış noktasına en hızlı ulaşımı sağlayacak şekilde belediye otobüslerini kullanarak aktarmaları da göz önünde bulundurup seyahat planı oluşturup, oluşturulan planı Google Map üzerinde gösteriyor. Projeyi açıklamaya başlamadan önce ufak bir kaç noktaya değinmek istiyorum. Bu proje client(müşteri) ve server(sunucu) olmak üzere iki kısma ayrılıyor. Projenin client yani istek talep eden kısmını ben yazdım. Ancak projenin server kısmı, dersi aldığımız öğretim görevlisi tarafından verildi. Bu yüzden projenin sadece client kısmına ait kaynak kodunu paylaşacağım. Projeyi tekrar kısaca anlatacak olursam, kullanıcı programı açtığı zaman karşısına aşağıdaki gibi bir ekran gelmektedir. Programın çalışma prensibi oldukça basit. Bulunduğumuz ve varmak istediğimiz noktanın bilgilerini sunucu tarafında çalışan koda yolluyoruz, sunucu almış olduğu bu verilere göre başlangıç noktasından varış noktasına en hızlı ulaşımı sağlayacak şekilde, aktarmaları da göz önünde bulunduracak şekilde bir seyahat planı oluşturuyor. Son olarak bu plan client tarafına iletiliyor. Ve bu veriyi javascript aracılığı ile işleyip, ekrana bastırıyorum.

Monday, January 30, 2012

Road to Droko's Castle - [Proje]

Herkese merhaba! Hazır bol vaktim varken, bahsetmek istediğim diğer bir projede üniversite 3. sınıfta "SE 320" kodlu, "Bilgisayar Oyunlarına Giriş" dersinde JAVA programlama dilini ve Slick2D oyun kütüphanesini kullanarak yazdığım 2 boyutlu platform oyunu. Kısa ve klasik hikayemiz şöyle; oyunun ana kahramanı Henry ve onun kız arkadaşı vardır. Fakat günlerden bir gün Henry'nin kız arkadaşı Droko adı verilen kötü kalpli bir canavar tarafından kaçırılır ve bunun doğrultusunda oyunumuz başlar. Oyunda 10+1(+1 bölüm sonu canavarı ile karşılaşma) olmak üzere toplam 11 level var. Oyundaki karakterlerin resimleri(sprite), Little Fighter II ve Mario tarzı oyunlardan alınmış olup üzerinde ufak birkaç değişiklik yapıldıktan sonra oyuna entegre edilmiştir. Karakterimiz koşabiliyor(yön tuşları +X tuşuna aynı anda basılmalı), zıplayabiliyor(Yukarı ok tuşuna basılmalı) ve ateş edebiliyor(Space tuşuna basılmalı). Diğer yaptığım oyunlara nazaran daha profesyonel ve görsellik açısından daha umut verici olsa da henüz işin başında olduğumu bir kez daha belirtmek isterim. Tekrar oyunun genel dinamiklerine dönecek olursak, ateş etme hakkımız sınırlı, bu yüzden oyunda ateş ve sağlık bonusu bulunmaktadır. Aynı zamanda oyunda 2 tip farklı düşman var. Bu iki düşmanda Mario'dan tanıyacağınız karakterler.Oyunumuz kısa hatları ile bu kadar. Şimdi size resimlerle daha fazla detay vermeye çalışacağım.

Thursday, January 26, 2012

Hacop Fighter - [Proje]

Herkese merhaba, hazır vaktim varken bahsetmek istediğim başka bir projede üniversite 2. sınıfta "CS 340" kodlu, "Yazılım Geliştirmede İlerlemeler" dersinde JAVA programlama dilini kullanarak yazdığım 2 boyutlu uzay simulasyonu. Oyun hem iki kişilik hem de tek kişilik oynanabilir. Eğer tek kişi oynuyorsanız, oyundaki amaç düşman gemilerinin tamamını yok edip, bölüm sonu canavarı ile karşılaşmak. Oyuncu sahip olduğu uzay gemisi ile sağ taraftan üzerine gelen düşman gemilerini yok edip bölüm sonu canavarına ulaşmaya çalışır. Ancak oyunu iki kişi oynamak isterseniz, ilk oyuncu uzay gemisini yönlendirirken, ikinci oyuncu mouse ile haritanın izin verilen kısımlarına tıklayarak düşman bırakıp ilk oyuncuyu yok etmeye çalışıyor. Haksız rekabet olmaması için ikinci oyuncunun mouse ile her tıklamasında random fonksiyon çağrılıyor. Karşı tarafa düşman bırakayım derken bonusta bırakabilirsiniz. Oyunda düşman gemilerinden ayrı olarak sağlık(health) bonusuda bulunmaktadır. Bu bonusu aldığınız vakit geminizin dayanaklılığı artmaktadır. Oyundaki tüm düşman gemilerini yok ettikten sonra bölüm sonu canavarı ile karşılaşıyorsunuz. Bu yaratık diğerlerine göre daha büyük ve daha güçlü olmakla birlikte, ilk yapay zeka denemem olması bakımından benim için ayrı bir yere sahiptir. Şimdi de oyunumu resimler eşliğinde sizlere tanıtmak istiyorum.

RISK - [Proje]

Çok uzun zamandır düşündüğüm, fakat zaman sıkıntısı nedeniyle yapamadığım şeylerden biriside, üniversite yılları boyunca yapmış olduğum projeleri blogumda yayınlamaktı. Bunlardan ilki üniversite 1.sınıfta "CS 116" kodlu, "Programlamaya Giriş II" dersinde, C programlama dilini kullanarak bir arkadaşımla yaptığım RISK adlı konsol oyunu. Görsel anlamda pek iç acıcı olmasada programlamaya yeni adım atmış birisi için hatırı sayılır derecede güzel bir oyun yapmaya çalıştım. Bu yazımda oyunla ilgili ufak bilgiler verip, yazının sonunda kaynak kodunun linkinide vereceğim. Öncelikle RISK, 2 kişilik bir savaş simulasyonu. Oyun "Soğuk Savaş" konseptini baz alarak ilerliyor. Konseptin "Soğuk Savaş" olmasının nedeni oyunu geliştirmeye başladığım ilk zamanlarda, deneme amaçlı oynadığım oyunlarda rakip oyuncuların hiçbirinin ilk hamleyi yapmaması, oyundaki asker ve tank gücünün bloklaşmasıyla ilgili. Her oyuncunun oyun başında 5 asker ve 5 tank birliği bulunuyor. Oyun sıra tabanlı, bir oyuncu hamlesini yaptıktan sonra hamle sırası diğer oyuncuya geçiyor. Askerlerin 25 atak, 20 savunma gücü varken, tankların 65 atak, 60 savunma gücü bulunuyor. Oyundaki harita 2 boyutlu bir matris. Hamle sırasına sahip kullanıcı; Sahip olduğu birliği hareket ettirebilir(Askeri birliklerin hareketi 1 birim iken tank birliklerinin hareket kabiliyeti 2 birim) ya da sırasını rakibine devredebilir. Hamle sırasına sahip kullanıcı, oyuncu açısından rahat bir oynanabilirlik sunması için ordusunun o anki durumunuda görüntüleyebiliyor. Unutmadan son bir şey daha var onuda söyleyeyim, oyunda 2 tanede şifre var. Bu şifrelerden ilki(HUSEYIN) birliklerinizin atak ve savunma gücünü 100 yaparken, ikinci şifre(AKCAN) birliğinizin harita üzerinde istediğiniz herhangi bir noktaya ilerlemesine imkan sağlıyor. Şifredeki isim ve soyisim dersi almış olduğumuz öğretim görevlisine aittir. Bu kadar detaydan sonra şimdi size birkaç resim eşliğinde oyunu göstermek istiyorum.

Tuesday, December 13, 2011

Radyo Projesi ve Last.fm API

Yaklaşık 1 yıl önce, vaktimi staj ararken firmaların dikkatini yaptığımız projelerle çekebileceğimiz ve bu projelerin bizi bir adım öne çıkaracağını dinleyerek geçirdim. Hatta kimi akademisyen hocalarımıza bu durumdan rahatsız olduğumu belirttim. Onlarda bugün git yarın gel edasında bilgi yetersizliğimiz nedeniyle bu durumun olağan olduğu kanısındaydılar. Yazın bir araya geldiğim 2 arkadaşımla beraber hiç bir fikrimiz olmadan web üzerinden ufak bir radyo yayını yapan bir site üzerinde kafa yorduk. Epeyce konuştuk, tartıştık. Öncelikle yapacağımız radyo webte olanlardan farklı olmalıydı onlarda olmayan bir takım farklı özelliklerle yayına başlamalıydık. Hatta bunun yanı sıra bugün hala bir çok radyo yayını yapan web sitelerindeki eksikliklerden olan çalan parçayı anında görme, geçmişte çalınan parçalara göz atma, ya da dinlediğimiz parçanın sözlerini aynı web sayfası içinde görememe bizi düşündüren problemlerin başında geliyordu. Yaklaşık 3-4 ay sonunda ufak bir prototip çıkardık ortaya henüz test aşamasından geçmedi. Ancak bu noktada asıl bahsetmek istediğim şey yukarıdaki sorunlarımızın hepsine last.fm API'si kullanarak çözüm bulabildiğimiz gerçeğiydi. Projeye başlamadan önce gerekli olacak tüm verilerin tarafımızdan sağlanması gerektiğini düşünüyordum. Ancak projede epey vakit harcadıktan sonra aslında webte hali hazıra bulunan API'leri kullanmanın daha faydalı olduğunu gördüm. API kullanmak yararlı olduğu kadar işlerimizi daha kolay ve hızlı halletmemizi de sağlıyor. Kısaca last.fm API'sinden bahsetmek gerekirse içerisinde Album, Artist, Track... ve bunun gibi birçok sınıf(class) barındırıyor, her sınıfın ise kendine özgü metodları(methods) var. Bu metodları kullanarak parçaya ait XML'e ulaşabiliyorsunuz. Ulaştığınız XML dosyasından ise işinize yarayan bilgiyi rahatlıkla çekebiliyorsunuz. Bugün salt PHP kullanarak yaptığım veri çekme işleminin pek verimli olduğunu düşünmüyorum. PHP'ye özgü, özellikle XML'den veri çekmek için hazırlanmış pek çok kütüphane var. Yakın zamanda bunları kullanıp güzel bir XML ayrıştırıcı yazmayı planlıyorum. Yazdığım vakit, kodları sayfaya koyarım. Takipçilere iyi günler.

Friday, November 18, 2011

JAVA [Ders - 5] String Sınıfı ve Metodları

Herkese merhaba. Bir önceki dersimizde Java'da en çok kullanılan sınıf olan "String" sınıfına giriş yapmakla birlikte bir string'i tanımlamak ve görüntülemekle ilgili ufak bir program yazmıştık. Şimdiki dersimizde bu sınıfa ait metodların bazılarını kullanmayı öğreneceğiz. Bu linkten "String" sınıfı ile ilgili daha detaylı bilgiye ulaşablirsiniz. Şimdi gelelim bu sınıfa ait metodları kullanmaya, öncelikle bu sınıfa ait tüm metodların listesine bu linkten ulaşabilirsiniz. Karşınıza çıkan listede yer alan metodların hepsini "String" sınıfından türemiş olan her obje için kullanabilisiniz. Mesela elimizde ad ve soyad diye iki tane string olsun ve bizde bu iki stringi birleştirelim. Kodumuz şu şekilde olacak;