Bölüm Seviyesi: Orta 

Başlangıç (Bölüm #1-#5) bölümleri, kabul etmem gerekiyor ki sıkıcıydı. Ama if ifadesi, for döngüsü, değişkenler ve tablolar konusunda, Lua ile daha büyük projelere atılmak için yeterince bilgi sahibiyiz artık. Bu bölüm, ve sonrasında gelecek bölümlerde bu bilgileri kullanarak ve pekiştirerek, favori oyunlarınızın küçük parçalarının ardında yatan kodu daha iyi anlamanız ve kendi oyunlarınızı yazmaya her bölümde bir adım daha yaklaşmanız için uğraşacağım. Bunları yaparken kopya çekmeye değil, bir proje hakkında nasıl düşünmeniz gerektiğini öğrenmeye özen gösterin.

Minecraft, Witcher, Terraria, Dark Souls ve daha birçok oyunda; oyuncu sahip olduğu eşyaların bir listesini bazen görselleri ile birlikte envanterinde inceleyebilir. Bu bölümde birlikte, sıfırdan bir envanter sistemi yaratacağız.

Bir envanter sistemi aşağıdakileri yapabilmedilir:

envanterde eşyalar saklanacak.

eşyaların farklı özellikleri olacak. (İsim, güç, savunma gibi)

envanter ekrana yansıtılacak.

Şimdi, iyi bir programcı fikrini küçük parçalara bölmekte ustadır. Yukarıdaki 3 özelliğin kod olarak nelerden oluşacağını canlandırmaya çalışın.

Önce eşyalardan başlayalım. Kendinizce 3 oyun içi eşya tasarlayın ve bu eşyalara özellikler verin.

Bu eşyalar ve özellikler her ne isterseniz, o olsun. Şimdi, eşyaları özelliklerine ayırdığınızda, bunları tabloya çevirmek çok da zor olmamalıdır.

*değerlerin arasında virgül var.

Şimdi bu yaklaşımı kullanarak, envanteri de bir tablo haline getirebiliriz. İçine de eşyalarımızı koyarız. Şimdi bunu kod olarak yazalım:

Şimdi, eşyalarımız ve envanterimiz tablolar halinde yazıldı. Eğer hata yapmadıysanız kodunuz da hata vermez. 3 özellikten 2’si şu anda yapılmış durumda.

envanterde eşyalar saklanacak.

eşyaların farklı özellikleri olacak. (İsim, güç, savunma gibi)

envanter ekrana yansıtılacak.

Envanteri Ekrana Yansıtmak.

Şimdi, Löve2D’de bulunan bir fonksiyon öğreneceğiz. Kısaca açıklayacağım ve kullanınca anlayacaksınız.

love.graphics.print(string,x,y) fonksiyonu ile, ekranda istenilen x,y koordinatlarına istenilen bir mesaj (string) yazılır. Neredeyse her love.graphics fonksiyonu gibi, love.draw() içine yazılır.

Bunu kullanarak, envanteri ekrana yansıtmaya çalışalım. Bir tablodaki her bir eleman için bir işlem yapılacak. Bu size tanıdık geliyor mu? Bir for döngüsü kullanarak, envanter içinde her eşya için; yani tablo içinde her v için, o eşyanın özelliklerini ekrana yazalım. İsimden başlayalım:

Envanter içinde her eşyanın ismini 16,16 koordinatlarına yazdık. Programı çalıştırarak harika eserimize bir bakış atalım:

Bunu ilk gördüğünüzde tepkiniz şöyle olabilir.

Ama korkmayın. Bu karşılaştığımız şeye bug diyoruz. Sebebi üzerine düşününce, çok belirgin olduğunu fark edeceksiniz. Her eşyanın ismini 16,16 koordinatlarına yazarsanız, hepsi üst üste olur. Dolayısıyla bunu çözmek için, her eşyanın envanterde endeksi sürekli 1 olarak arttığından, y koordinatını endeks ile çarpmak bu sorunu çözer.

Bunun sonucunda birinci eşya 16*1, ikinci 16*2, üçüncü ise 16*3 koordinatlarına yazılır ve böylece devam eder. Her eşyanın kaç özelliği var ise, o kadar çok  boşluk bırakmanız gerekebilir. Benim durumumda her eşyanın 4 özelliği var, dolayısıyla 4*16 bir de eşyalar arasında 16 piksel pay bırakırsak 80 piksel yeterli olacaktır.

Yukarıda sadece eşyanın ismini yazdık, ama diğer özellikleri de aynı şekilde alt alta yazabilirsiniz. Biraz daha açıklayıcı olması için stringlerin başına ne olduklarını yazın. Örneğin eşyanın açıklamasını tırnak içine alarak, ismi ile açıklamasını belirgin bir şekilde ayırabilirsiniz. Bu bir tasarım tavsiyesidir.

Şimdi, ben yapınca şöyle bir sonuca vardım:

Ekranda da şöyle gözüküyor:

Bu bölümlük bu kadar. Bir sonraki bölümde, bir karakter oluşturarak hareket etmesini ve yerde bulduğu eşyaları toplamasını sağlayacağız.

Ama o bölüme geçmeden önce, kendi RPG envanteri tasarımlarınızı bana Twitter’dan (@ tulanDenizcan) göndermeye ne dersiniz? Buun dışında her türlü soruya da oradan açığım.

Şimdilik,

print(“Görüşürüz.”)

love.event.quit() –Bu fonksiyon löve2d programınızı kapatmak için kullanılır.

1
like
1
love
0
haha
0
wow
0
sad
0
angry
2 Yorum konuları
0 Konu cevapları
0 İzleyiciler
 
En çok tepki verilen yorum
En yeni yorumlar
2 Yorum yazarları
mustafaÇalı Kuşu Son yorum yazarları
  Abone ol  
En Yeniler Eskiler Beğenilenler
Bildir
mustafa
Üye

Teşekkürler güzel bir içerik olmuş.

Çalı Kuşu
Yazar

Okurken yeni şeyler keşfettiğini hissetmenin ayrıcalığı sanırım tartışılmaz…