Yararlı bir şey

Mevcut

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

public class Parent
{
}
Sınıf , anahtar kelimenin yardımıyla sınıfı Childmiras alır .Parentextends
public class Child extends Parent
{
}

Örnek 2 — üst sınıfın değişkenlerini kullanma

public class Parent
{
  public int age;
  public String name;
}
Sınıf , sınıfın ve alanlarını sınıfın kendisinde bildirilmiş gibi Childkullanabilir .agenameParentChild
public class Child extends Parent
{
  public void printInfo()
  {
    System.out.println(name + " " + age);
  }
}

Örnek 3 — üst sınıfın yöntemlerini kullanma

public class Parent
{
   public int age;
   public String name;
   public getName() {
      return name;
   }
}
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().
public class Child extends Parent
{
   public void printInfo()
   {
      System.out.println(getName() + " " + age);
   }
}

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);
   }
}
İşte Childsınıfın derleyicinin bakış açısından nasıl göründüğü


2. Yöntem geçersiz kılma

ChildBazen , sınıfımıza çok yararlı bir Parentsı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, Childsınıftaki yöntemle aynı imzaya sahip bir yöntemi bildiririz Parentve sonra ona kendi kodumuzu yazarız.

Örnek 1 — yöntemi geçersiz kılma

public class Parent
{
   public String name;
   public void setName(String nameNew) {
      name = nameNew;
   }

   public getName() {
      return name;
   }
}
Yöntem printInfo()aşağıdaki ifadeyi gösterecektir:
Luke, No!!!
public class Child extends Parent
{
   public void setName(String nameNew) {
      name = nameNew + ", No!!!";
   }

   public void printInfo()
   {
      setName("Luke");
      System.out.println(getName());
   }
}

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:
public class Child extends Parent
{
   public String name;    // An inherited variable

   public void setName(String nameNew)  // The overridden method replaces the inherited one
   {
      name = nameNew + ", No!!!";
   }

   public getName()    // An inherited method
   {
      return name;
   }

   public void printInfo()
   {
      setName("Luke");
      System.out.println(getName());
   }
}

Ö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()ChildprintInfo()Child

Örnek:

Parent parent = new Parent();
parent.printnInfo();
Bu kod, ekranda aşağıdaki metni görüntüler:
Luke
Child child = new Child();
child.printnInfo();
Bu kod, ekranda aşağıdaki metni görüntüler:
Luke, I am your father

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());
   }
}
İşte Childsı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>();
yeni oluşturmaArrayList

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
ArrayList<String> list = new ArrayList<String>();
Yeni bir dize listesi oluşturma
list.add("name");
Listenin sonuna bir öğe ekleyin
list.add(0, "name");
Listenin başına bir öğe ekleyin
String name = list.get(5);
Bir öğeyi dizinine göre al
list.set(5, "new name");
Bir öğeyi dizinine göre değiştirme
int count = list.size();
Listedeki öğelerin sayısını alın
list.remove(4);
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.012max-1Randomjava.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 minve 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 -10içeriyor +10. Bu, aşağıdaki gibi bir kodla yapılabilir:

int dx = getRandomNumber(-10, 11);

-10Bu 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.


Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok