1. Miras
CodeGym oyun motoruyla çalışmak için kalıtımı kullanmanız gerekecek . Ama ya bunun ne olduğunu bilmiyorsan? Bir yandan, bu konuyu anlamanız ve çalışmanız gerekiyor. Öte yandan, motor çok basit olacak şekilde özel olarak tasarlanmıştır, bu nedenle yüzeysel bir kalıtım bilgisi ile idare edebilirsiniz.
Peki miras nedir? Basit bir ifadeyle, kalıtım iki sınıf arasındaki bir ilişkidir. Bunlardan biri üst sınıf gibi davranır, diğeri ise çocuk (torun) sınıf olur. Dahası, bir üst sınıf, alt sınıfları olduğunu bile bilmeyebilir. Başka bir deyişle, ebeveyn, soyundan gelen sınıflara sahip olmaktan pek fayda sağlamaz.
Ancak kalıtım, çocuk sınıfına birçok avantaj sağlar. Bunlardan en önemlisi, ebeveyn sınıfın tüm değişkenlerinin ve yöntemlerinin, sanki ebeveyn sınıfının kodu doğrudan alt sınıfa kopyalanmış gibi, alt sınıfta görünmesidir. Bu tamamen doğru değildir, ancak temel bir kalıtım anlayışı için yeterli olacaktır.
Kalıtımı daha iyi anlamanıza yardımcı olacak bazı örnekler.
Örnek 1 — işte en basit örnek
|
Sınıf , anahtar kelimenin yardımıyla sınıfı Child miras alır .Parent extends |
|
Örnek 2 — üst sınıfın değişkenlerini kullanma
|
Sınıf , sınıfın ve alanlarını sınıfın kendisinde bildirilmiş gibi Child kullanabilir .age name Parent Child |
|
Örnek 3 — üst sınıfın yöntemlerini kullanma
|
Sınıf Child , Parent sınıfının değişkenlerini ve yöntemlerini sınıfta bildirilmiş gibi kullanabilir Child . Bu örnekte, yöntemi kullanıyoruz getName() . |
|
Bazı ayrıntıları atlayarak, Java derleyicisinin bakış açısıyla, basitçe üst sınıfın kodunu alt sınıfın koduna kopyaladığımızı söyleyebiliriz:
public class Child extends Parent
{
public int age; // An inherited variable
public String name; // An inherited variable
public getName() { // An inherited method
return name;
}
public void printInfo()
{
System.out.println(getName() + " " + age);
}
}
Child
sınıfın derleyicinin bakış açısından nasıl göründüğü
2. Yöntem geçersiz kılma
Child
Bazen , sınıfımıza çok yararlı bir Parent
sınıfı miras aldığımız, çocuğun ebeveynin tüm değişkenlerini ve yöntemlerini miras almasına neden olduğumuz durumlar vardır . Ancak bu yöntemlerden bazıları tam olarak istediğimiz gibi çalışmayabilir veya hiç istediğimiz gibi çalışmayabilir.
Bu durumda ne yaparsın? Uygulanmasını beğenmediğimiz bir yöntemi geçersiz kılabiliriz . Bu, yapılması gereken basit bir şeydir: sınıfımızda, Child
sınıftaki yöntemle aynı imzaya sahip bir yöntemi bildiririz Parent
ve sonra ona kendi kodumuzu yazarız.
Örnek 1 — yöntemi geçersiz kılma
|
Yöntem printInfo() aşağıdaki ifadeyi gösterecektir:
|
|
Durumu biraz fazla basitleştiren kalıtım, üst sınıfın kodunun alt sınıfa kopyalanmasına neden olur. Ancak, bir alt sınıf zaten bir ata sınıfında var olan bir yöntem ise, o zaman bu yöntem ata sınıfından kopyalanmaz. Burada alt sınıftaki yöntemin üst sınıftaki yöntemi geçersiz kıldığını söylüyoruz. Aşağıdaki örneğe bakın. Belki işleri biraz daha netleştirmeye yardımcı olur:
Derleyicinin bakış açısından Child sınıfı şu şekilde görünür: |
---|
|
Örnek 2 - biraz miras büyüsü (ve yöntemi geçersiz kılma)
public class Parent
{
public getName() {
return "Luke";
}
public void printInfo()
{
System.out.println( getName() );
}
}
public class Child extends Parent
{
public getName() {
return "Luke, I am your father";
}
}
Yöntem printInfo()
bir türde çağrılırsa Parent
, o da getName()
sınıfın yöntemini çağırır Parent
.
Yöntem printInfo()
bir nesne üzerinde çağrılırsa Child
, o da getName()
sınıfın yöntemini çağırır Child
.
Diğer bir deyişle, printInfo()
metot sadece sınıf içinde bildirilir , ancak metot bir nesne üzerinde çağrılırsa sınıfın metodunu Parent
çağırır .getName()
Child
printInfo()
Child
Örnek:
|
Bu kod, ekranda aşağıdaki metni görüntüler:
|
|
Bu kod, ekranda aşağıdaki metni görüntüler:
|
Ve bunun nedeni, derleyicinin bakış açısından (çok basitleştirilmiş bir versiyonu), sınıfın kodu Child
şöyle görünür:
public class Child extends Parent
{
public getName() {
return "Luke, I am your father";
}
public void printInfo()
{
System.out.println(getName());
}
}
Child
sınıfın derleyicinin bakış açısından nasıl göründüğü
3. Listeler
İşte listeler hakkında kısa bir hatırlatma ( List
). Listelerin dizilerle pek çok ortak noktası vardır:
- Belirli bir türde çok sayıda veri depolayabilirler.
- Öğeleri dizinlerine göre almanıza izin veriyorlar.
- Elemanların indeksleri ile başlar
0
.
Listelerin avantajları:
Dizilerin aksine, listeler dinamik olarak boyut değiştirebilir. Oluşturulduktan hemen sonra listenin boyutu 0
. Listeye öğeler eklendikçe boyutu artar. Liste oluşturma örneği:
ArrayList<String> myList = new ArrayList<String>();
ArrayList
Köşeli parantez içinde belirtilen değer, listenin saklayabileceği veri tipidir.
Bir listeyle çalışmak için bazı yöntemler şunlardır:
kod | Kısa açıklama |
---|---|
|
Yeni bir dize listesi oluşturma |
|
Listenin sonuna bir öğe ekleyin |
|
Listenin başına bir öğe ekleyin |
|
Bir öğeyi dizinine göre al |
|
Bir öğeyi dizinine göre değiştirme |
|
Listedeki öğelerin sayısını alın |
|
Listeden bir öğeyi kaldır |
Listeler hakkında daha fazla bilgi için aşağıdaki makaleleri okuyabilirsiniz:
4. Rastgele sayılar
CodeGym oyun motorunun rasgele sayılar üretmek için kullanılabilecek iki yöntemi vardır. Bu yöntemler:
int getRandomNumber(int max)
int getRandomNumber(int min, int max)
İlk yöntem — — , , , ... getRandomNumber(int max)
aralığında rastgele bir sayı döndürür . Kaputun altında, paketteki sınıfı kullanır , ancak bu, rastgele bir sayıyı nasıl kullandığınızı değiştirmez.0
1
2
max-1
Random
java.util
getRandomNumber(int)
bir tamsayıyı bağımsız değişken olarak kabul eder. Bu sayı, rasgele sayı üretecinin döndürebileceği sayıların üst sınırı olacaktır. Alt sınır 0'dır. Dikkat! Rastgele sayı üreteci ASLA üst sınırın değerini döndürmez. Örneğin, çağırırsanız getRandomNumber(3)
rastgele 0, 1 veya 2 döndürür. Gördüğünüz gibi 3 döndürmez. Bu şekilde bir rasgele sayı üreteci kullanmak oldukça basittir, ancak birçok durum için uygundur.
İkinci yöntem — getRandomNumber(int min, int max)
— aralığında rastgele bir tamsayı döndürür [min, max-1]
. Hiçbir zaman 'dan küçük bir sayı döndürmez min
ve hiçbir zaman ' den büyük bir sayı döndürmez max-1
.
Bu yöntemler pratikte nasıl kullanılabilir?
1. Zar
Diyelim ki bir zar atışını simüle etmek ve aralıkta rasgele bir sayı elde etmek istiyorsunuz 1-6
. Nasıl yapardın? Bu, aşağıdaki gibi bir kodla yapılabilir:
int dice = getRandomNumber(1, 7);
Bu yöntem, aralıkta rastgele bir tamsayı döndürür 1-6
.
2. Hedef uygulama
Diyelim ki bir hedefe ateş etmeyi simüle etmek istiyorsunuz ve bir atışın doğruluğu ile dahil arasında değişen rastgele bir bileşen -10
içeriyor +10
. Bu, aşağıdaki gibi bir kodla yapılabilir:
int dx = getRandomNumber(-10, 11);
-10
Bu yöntem, aralığında rastgele bir tamsayı döndürür +10
.
Oyunlarda rastgele sayıları kullanmanın birçok yolu vardır. Sadece hayal gücünüzle sınırlısınız. Kendi oyunlarınızı yazın, geliştirin ve sürecin tadını çıkarın.
Herkes oyun oynayabilir, ancak yalnızca programcılar onları oluşturabilir.
GO TO FULL VERSION