Make love, not var_dump())

Captain's Log

Sonsuzdöngüde'ki stajıma başlarken konuşuyorduk ne yapsak nasıl yapsak nereye yönelsek diye. Ben web programlama ile ilgili bir şeyler beklerken Osman ile konuşmamız sonucunda, oyunlar hakkındaki ilgimi ve bu yöne yönelmememin daha doğru olacağını keşfettik. Hepimizin hayalidir biraz oyun yapmak değil mi? :)

Osman, Sonsuzdongü'nün içeride geliştirdiği ufak oyunu anlattı. Yardımları ve destekleriyle ben de Corona öğrenmeye başladım gözümüzü kapayıp.

Corona SDK nedir?

Corona SDK mobil cihazlar için 2D (iki boyutlu) oyun ve uygulama geliştirme platformudur. Windows üzerinde sadece Android, Mac üzerinde Android ve iOS aygıtlar için uygulama geliştirilebilir.

Geliştirmeleri Lua programlama dilinde yaptığınız oyunları test etmeniz için bir de simülatör sunuyor Corona.

Bunun yanında fizik kütüphanesi başta olmak üzere, telefon donanımına erişebileceğiniz (GPS, accelerometer), sosyal medya API'ları ile ödeme aracıları ile iletişim kurabileceğiniz bir çok kütüphane sunuyor.

Haydi kuralım!

Corona SDK şu anda Windows ve Mac için mevcut. Corona’nın sitesinden indirdiğimiz kurulum dosyasını çalıştırdıktan sonra yönergeleri takip ederek kurulumu tamamlıyoruz.

Masaüstünden "Corona Simulator"ü çalıştırdığımızda karşımıza bir kerelik onaylama penceresi çıkacak ve bizden kullanıcı adı (mail adresi) ve şifre isteyecek, eğer hala kayıt olmadıysanız "Register”"tuşuna basarak açılan sayfadan kaydımızı yapıyoruz ve bu bilgileri onay penceresine giriyoruz. Ve artık başlamak için hazırız.

Geliştirme için sevdiğiniz metin editörünü kullanabilirsiniz. Ben Notepad2 kullanıyorum.

Her proje içinde bir main.lua dosyası vardır kodumuzu bu dosya içine yazacağız.

Şimdi kendi yaptığım ilk uygulama uzerinden satır satır inceleyelim başlangıç olarak. Bu uygulamaya oyun denemez ama başlangıç için güzel bir zar uygulaması. Kısaca, telefonu salladığınızda zar atıyor ve ekranda sonucu gösteriyor.

Corona Zar

-- Basit Zar Uygulamasi
-- Statü Bar kaldırma
display.setStatusBar( display.HiddenStatusBar )

-- Ekrana "background" adında yeni bir resim yerleştirme
local background = display.newImage( "images/iphone4-wallpaper7s.jpg" )

-- dice adında yeni bir resim yerleştirme ve ekrandaki yerini belirleme
local dice = display.newImage( "images/Dice-1.png" )
dice.x = display.contentWidth/2; dice.y = display.contentHeight/2
 
-- Ses dosyasını yukleme. (Çalma değil)
local diceSound = audio.loadSound("diceroll.wav")

--Yeni bir "text" ekleme ve yerini belirleme
myText = display.newText("", display.contentWidth/2, 100, native.systemFont, 40)

-- accelerometer Event lerini dinleyen fonksiyonu
local function listener( event )
    -- Cihazın "shake" edildiğini kontrol eden if
    if event.isShake then
        
        -- Daha önce yüklediğimiz ses dosyasını oynatma
        audio.play( diceSound )
        
        -- Konsola cihazın "shake" edildiğini yazdırma
        print( "The device is being shaken!" )
		
		-- timerE fonksiyonu
		local function timerE(ev)
			-- 1-6 arası rastgele bir sayı belirleme
			x=math.random(6)
			-- dice resmini silme
			dice:removeSelf()
			-- x değişkenine gore yeni bir resim ekleme (..x.. ya dikkat)
			dice = display.newImage( "images/Dice-"..x..".png" ) 
			dice.x = display.contentWidth/2 dice.y = display.contentHeight/2 	
      
			-- konsola x i yazdırma
			print("Rolled"..x)
			
			-- Onceden bos olan text içerigini x değişkenine gore değiştirmek
			myText.text = "Rolled "..x
		end
    
		--timerE fonksiyonunun özellikleri, 100ms, 10 kere
		timer.performWithDelay( 100, timerE, 10 )
		
    end
 
    return true
end

-- cihazın shake özelligini dinleyen listener
Runtime:addEventListener("accelerometer", listener )

Satır satır incelemek gerekirse;

Satır 3: Bu tek satır kod ekranın üstündeki "Statü Bar" denilen seridi kaldırmaya yarıyor. (Pil durumu, saat vs. Gösteren bar)

Satır 6: Bu satırda background adında bir resim tanımlıyoruz (.png) parantez ve tırnak içine istediğimiz resmin adını uzantısını yazıyoruz. Eğer ayrı bir dosya içindeyse bunu da ekliyoruz. Bu bizim uygulamamızın arkaplanındaki resim olacak.

Satır 9: Aynen üstteki gibi bir resim ekliyoruz bu da bizim zar resmimiz.

Satır 10: Burada zar resmini ekran üzerinde istediğimiz kordinatları belirleyerek yerleştiriyoruz. dice.x, x kordinatını dice.y,y kordinatını gosteriyor.
Display.contentWidth/2 ekranın eninin yarısı anlamına geliyor. Digeri aynı şekilde boyun yarısı anlamına geliyor.

Satır 13: Burada kullanacağımız zar sesini yüklüyoruz. Resimlerde yaptıgımız gibi tırnak içine ses dosyasının adını uzantısıyla birlikte yazıyoruz. (Sadece yüklüyoruz daha çalmıyoruz çalma işlemi ileride)

Satır 16: Bu satırda myText adında ekrana eklenecek yazıyı tanımlıyoruz. Şimdilik içi boş ekranda birşey gozukmeyecek. İlerde zar resmi değiştikçe yazıda değişecek. Ayrıca ekrandaki yerini, puntosunu ve yazı tipinide burada belirliyoruz.

Satır 19: Listener adında bir fonksiyon başlatıyoruz. Nerdeyse tüm işlemler burda yapılıyor. Bu listener ise, 55. satırdaki "accelerometer" event'ine bind oldu

Satır 21: Burda bir if var cihaz sallandığı anda buraya giriyoruz.

Satır 24: Bu satır daha önce 13. satırda yüklediğimiz ses dosyasını çalmaya yarıyor.

Satır 27: Konsola cihazın sallandığını yazdıran satır. Kontrol amaçlıdır yazılmasa da olur.

Satır 30: Burada timer fonksiyonunu yazmaya başlıyoruz. Zar resimleri değişirken her resmin arasına zaman eklemeye yarıyor. Eger bu şekilde kullanmazsak resimler cok hızlı değiştirginden değiştiklerini gormuyoruz sadece en son gelen resmi goruyoruz.

Satır 32: 1-6 arası rastgele bir rakam olusturup x’e atıyoruz.

Satır 34:Corona'da da olusturdugumuz resmin içerigini değiştiremiyoruz bu yuzden resmi değiştirmek için once o resmi kaldırıp daha sonra aynı yere yeni kullanmak istediğimiz resmi eklememiz gerekiyor. Bu satırda resmi kaldırıyoruz. Aslında bunun için sprite gibi daha güzel teknikler var ama ilk uygulamada bu resmi kaldırıp tekrar yerine koymak daha basit bir çözüm :)

Satır 36: Burada ise yeniden resim ekliyoruz. Eklenicek resmin adını x’e gore belirliyoruz. Dosyamızdaki resimler 1 resmi için Dice-1, 2 resmi için Dice-2 diye gittiği için tırnak içine x değişkenini koyarak ekrana uygun resmi ekliyoruz.

Satır 37: Eklenen resmin yerini belirliyoruz. Satır10’daki ile aynı ki resimler üstüste gelsin sanki resim değişiyormus gibi görünsün.

Satır 40: Rastgele seçilen x’i konsola yazdırıyor yine takip ve kontrol amaçlı bir satır.

Satır 43: Daha önce myText adında boş olarak yarattığımız yazının artık birşeyler gosterme zamanı geldi. Burada bu değişikliği yapıyoruz.

Satır 47: timerE fonksiyonunu cağırıyoruz. Kaç kere çağıracağımızı ve aralarındaki süreyi de burada ekliyoruz. Burada 100ms aralıklarla 10 kere çağırıyoruz.

Satır55: Onceden belirttiğim gibi 19. Satır için eklediğimiz event listener.

Oyunun tamamlanmış halini, https://github.com/sonsuzdongu/corona-dice adresindeki git deposuna gönderdim. Oradan oyunu daha detaylı inceleyebilirsiniz.

Ben de yeniyim elimden geldiğince başlangıç için satır satır anlatmaya çalıştım. Sürç-ü lisan ettiysek affola :)

"Eee adam gibi oyun nasıl yapacağız diyenler" biraz daha bekleyecek şimdilik bu öğrendiklerimizle pratik yapalım :)